• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/model/entity.php
  • Класс: BitrixCatalogModelEntity
  • Вызов: Entity::update
static function update($id, array $data): ORMDataUpdateResult
{
	$result = new ORMDataUpdateResult();

	$entity = static::getEntity();

	static::normalize($data);

	if (Event::existEventHandlers($entity, ORMDataDataManager::EVENT_ON_BEFORE_UPDATE))
	{
		$event = new Event(
			$entity,
			ORMDataDataManager::EVENT_ON_BEFORE_UPDATE,
			[
				'id' => $id,
				'fields' => $data['fields'],
				'external_fields' => $data['external_fields'],
				'actions' => $data['actions']
			]
		);
		$event->send();

		$event->mergeData($data);
		if ($event->getErrors($result))
			return $result;
	}

	static::prepareForUpdate($result, $id, $data);
	if (!$result->isSuccess())
		return $result;
	unset($result);

	if (Event::existEventHandlers($entity, ORMDataDataManager::EVENT_ON_UPDATE))
	{
		$event = new Event(
			$entity,
			ORMDataDataManager::EVENT_ON_UPDATE,
			[
				'id' => $id,
				'fields' => $data['fields'],
				'external_fields' => $data['external_fields'],
				'actions' => $data['actions']
			]
		);
		$event->send();
		unset($event);
	}

	$result = $entity->getTablet()->update($id, $data['fields']);
	$success = $result->isSuccess();
	if ($success)
	{
		$data['fields'] = $result->getData();
		if ($entity->fieldsCount > 0)
			$entity->modifyEntityCacheItem($id, $data['fields']);
	}

	if (Event::existEventHandlers($entity, ORMDataDataManager::EVENT_ON_AFTER_UPDATE))
	{
		$event = new Event(
			$entity,
			ORMDataDataManager::EVENT_ON_AFTER_UPDATE,
			[
				'id' => $id,
				'fields' => $data['fields'],
				'external_fields' => $data['external_fields'],
				'actions' => $data['actions'],
				'success' => $success
			]
		);
		$event->send();
		unset($event);
	}

	if ($success && !empty($data['actions']))
		static::runUpdateExternalActions($id, $data);

	unset($success, $entity);

	return $result;
}