• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/userfield.php
  • Класс: BitrixMainUserFieldTable
  • Вызов: UserFieldTable::createUtsEntity
static function createUtsEntity(ORMEntity $srcEntity, array $utsFields, array $utmFields, $ufId = null)
{
	global $USER_FIELD_MANAGER;

	// get namespace & class
	/** @var BitrixMainORMDataDataManager $utsClassFull */
	$utsClassFull = static::getUtsEntityClassNameBySrcEntity($srcEntity);
	$utsClassPath = explode('\', ltrim($utsClassFull, '\'));

	$utsNamespace = join('\', array_slice($utsClassPath, 0, -1));
	$utsClass = end($utsClassPath);

	// get table name
	$utsTable = static::getUtsEntityTableNameBySrcEntity($srcEntity, $ufId);

	// base fields
	$fieldsMap = array(
		'VALUE_ID' => array(
			'data_type' => 'integer',
			'primary' => true
		),
		'PARENT' => array(
			'data_type' => $srcEntity->getDataClass(),
			'reference' => array(
				'=this.VALUE_ID' => 'ref.ID'
			)
		)
	);

	// initialize entity
	if (class_exists($utsNamespace."\".$utsClass))
	{
		ORMEntity::destroy($utsNamespace."\".$utsClass);
		$entity = ORMEntity::getInstance($utsNamespace."\".$utsClass);

		foreach ($fieldsMap as $fieldName => $field)
		{
			$entity->addField($field, $fieldName);
		}
	}
	else
	{
		$entity = ORMEntity::compileEntity($utsClass, $fieldsMap, array(
			'namespace' => $utsNamespace, 'table_name' => $utsTable
		));
	}

	foreach ($utsFields as $utsField)
	{
		$field = $USER_FIELD_MANAGER->getEntityField($utsField);
		$entity->addField($field);

		foreach ($USER_FIELD_MANAGER->getEntityReferences($utsField, $field) as $reference)
		{
			$entity->addField($reference);
		}
	}

	foreach ($utmFields as $utmFieldMeta)
	{
		// better to get field from UtmEntity
		$utmField = $USER_FIELD_MANAGER->getEntityField($utmFieldMeta);

		// add serialized utm cache-fields
		$cacheField = (new ORMFieldsUserTypeUtsMultipleField($utmField->getName()))
			->configureUtmField($utmField);

		static::setMultipleFieldSerialization($cacheField, $utmField);
		$entity->addField($cacheField);
	}

	return $entity;
}