• Модуль: crmmobile
  • Путь к файлу: ~/bitrix/modules/crmmobile/lib/Command/SaveEntityCommand.php
  • Класс: BitrixCrmMobileCommandSaveEntityCommand
  • Вызов: SaveEntityCommand::prepareMultiFields
private function prepareMultiFields(array &$fields): void
{
	if (!$this->entity->hasField(Item::FIELD_NAME_FM))
	{
		return;
	}

	unset($fields[Link::ID]);

	$fields['FM'] = [];

	$currentFmFields = $this->entity->getFm()->toArray();
	foreach (CCrmFieldMulti::GetEntityTypes() as $name => $info)
	{
		if ($name === Link::ID || !isset($fields[$name]))
		{
			continue;
		}

		$fmValues = [];
		$removedItems = $currentFmFields[$name] ?? [];

		if (!empty($fields[$name]) && is_array($fields[$name]))
		{
			foreach ($fields[$name] as $field)
			{
				if (empty($field['value']['VALUE_TYPE']))
				{
					$field['value']['VALUE_TYPE'] = key($info);
				}

				$fmValues[$field['id']] = $field['value'];
				unset($removedItems[$field['id']]);
			}

			unset($fields[$name]);
		}

		// processing of strange logic to remove FMs - need to clear 'VALUE'
		foreach ($removedItems as $id => $removedItem)
		{
			$removedItem['VALUE'] = '';
			$fmValues[$id] = $removedItem;
		}

		$fields['FM'][$name] = $fmValues;
	}
}