• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/entityrequisite.php
  • Класс: Bitrix\Crm\EntityRequisite
  • Вызов: EntityRequisite::checkBeforeAdd
public function checkBeforeAdd($fields, $options = array())
{
	unset($fields['ID'], $fields['DATE_MODIFY'], $fields['MODIFY_BY_ID']);
	$fields['DATE_CREATE'] = new \Bitrix\Main\Type\DateTime();
	$fields['CREATED_BY_ID'] = \CCrmSecurityHelper::GetCurrentUserID();

	$result = $this->checkRqFieldsBeforeSave(0, $fields);
	if (!$result->isSuccess())
	{
		return $result;
	}

	$this->separateAddressFields($fields);

	global $USER_FIELD_MANAGER, $APPLICATION;

	$result = new Entity\AddResult();
	$entity = RequisiteTable::getEntity();

	try
	{
		// set fields with default values
		foreach ($entity->getFields() as $field)
		{
			$fieldName = $field->getName();
			if ($field instanceof Entity\ScalarField && !array_key_exists($fieldName, $fields))
			{
				$defaultValue = $field->getDefaultValue();

				if ($defaultValue !== null)
				{
					$fields[$fieldName] = $field->getDefaultValue();
				}
			}
			else if ($field instanceof Entity\BooleanField && array_key_exists($fieldName, $fields))
			{
				if ($fields[$fieldName] !== 'Y' && $fields[$fieldName] !== 'N'
					&& $fields[$fieldName] !== true && $fields[$fieldName] !== false)
				{
					$fields[$fieldName] = $field->getDefaultValue();
				}
			}
		}

		// uf values
		$userFields = array();

		// separate userfields
		if ($entity->getUfId())
		{
			// collect uf data
			$userfields = $USER_FIELD_MANAGER->GetUserFields($entity->getUfId());

			foreach ($userfields as $userfield)
			{
				if (array_key_exists($userfield['FIELD_NAME'], $fields))
				{
					// copy value
					$userFields[$userfield['FIELD_NAME']] = $fields[$userfield['FIELD_NAME']];

					// remove original
					unset($fields[$userfield['FIELD_NAME']]);
				}
			}
		}

		// check data
		RequisiteTable::checkFields($result, null, $fields);

		// check uf data
		if (!empty($userFields))
		{
			if (!$USER_FIELD_MANAGER->CheckFields($entity->getUfId(), false, $userFields))
			{
				if (is_object($APPLICATION) && $APPLICATION->getException())
				{
					$e = $APPLICATION->getException();
					$result->addError(new Entity\EntityError($e->getString()));
					$APPLICATION->resetException();
				}
				else
				{
					$result->addError(new Entity\EntityError("Unknown error while checking userfields"));
				}
			}
		}

		// check if there is still some data
		if (!count($fields + $userFields))
		{
			$result->addError(new Entity\EntityError("There is no data to add."));
		}

		// return if any error
		if (!$result->isSuccess(true))
		{
			return $result;
		}
	}
	catch (\Exception $e)
	{
		// check result to avoid warning
		$result->isSuccess();

		throw $e;
	}

	return $result;
}