• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/usageentity.php
  • Класс: BitrixRestUsageEntityTable
  • Вызов: UsageEntityTable::register
static function register($entityType, $entityId, $subEntityType, $subEntityName)
{
	$entity = static::getEntityInfo($entityType, $entityId);

	$getListParameters = [
		'filter' => [
			'=ENTITY_TYPE' => $entityType,
			'=ENTITY_ID' => $entity['ENTITY_ID'],
			'=SUB_ENTITY_TYPE' => $subEntityType,
			'=SUB_ENTITY_NAME' => $subEntityName,
		],
		'select' => [
			'ID',
		],
		'limit' => 1,
	];

	$res = static::getList($getListParameters);
	$element = $res->fetch();
	if ($element)
	{
		return $element['ID'];
	}

	$newEntity = array(
		'ENTITY_TYPE' => $entityType,
		'ENTITY_ID' => $entity['ENTITY_ID'],
		'ENTITY_CODE' => $entity['ENTITY_CODE'],
		'SUB_ENTITY_TYPE' => $subEntityType,
		'SUB_ENTITY_NAME' => $subEntityName
	);

	try
	{
		$res = static::add($newEntity);
		return $res->isSuccess() ? $res->getId() : false;
	}
	catch (SqlQueryException $e)
	{
		if (mb_strpos($e->getMessage(), 'Duplicate entry') !== false)
		{
			//Try to get one more time
			$res = static::getList($getListParameters);
			$element = $res->fetch();
			if ($element)
			{
				return $element['ID'];
			}
		}
		throw $e;
	}
}