- Модуль: 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;
}