OnBeforeItemUpdate
Данное событие позволяет выполнить дополнительные действия до сохранения изменённой записи в базу данных.
Это событие вызывается до того, как выполняется проверка (validation) значений в полях объекта.
Вызывается из событий
Данное событие косвенно вызывается из событий, изменяющих (созданные ранее) записи:
OnUpdate, OnPreSave. Все ранее упомянутые события в
свою очередь вызывают метод kDBItem::Update, который при помощи метода kDBItem::raiseEvent вызывает
данное событие. Более детально это продемонстрировано ниже:
OnUpdate -> kDBItem::Update -> kDBItem::raiseEvent
Входные параметры
название |
описание |
|---|---|
| id (int) |
|
Потенциальное применение
Данное событие можно использовать для
выполнения дополнительных проверок значений полей объекта;
установки значений полей, которые не доступны на форме редактирования;
запрета изменения записи в базе данных.
Ниже будет приведён пример, в котором показано как можно использовать все описанные приёмы.
function OnBeforeItemUpdate(&$event)
{
parent::OnBeforeItemUpdate($event);
$object =& $event->getObject();
/* @var $object kDBItem */
if ($object->GetDBField('Name') != 'John') {
// если значение поля Name не равно John, то показывать специфическую (не стандартную) ошибку
$object->SetError('Name', 'invalid_name', 'la_error_OnlyJohnsAllowed');
}
// запоминание времени изменения записи
$now = adodb_mktime();
$object->SetDBField('ModifiedOn_date', $now);
$object->SetDBField('ModifiedOn_time', $now);
if ($object->GetDBField('Status') != STATUS_ACTIVE) {
// можно изменять только активные записи
$event->status = erFAIL;
}
}
Ограничения
Если статус события ($event->status), по его завершении, не будет равен erSUCCESS, то событие
OnAfterItemUpdate вызвано не будет и запись не будет изменена в базе данных.
См. также