OnAfterCopyToLive

Data Source

Данное событие вызывается для каждой записи после её копирования из временной таблицы в оригинальную.

Вызывается из событий

Данное событие косвенно (через метод kTempTablesHandler::DoCopyTempToOriginal) вызывается из события OnSave в процессе копирования данных из временной таблицы в оригинальную.

Входные параметры

название

описание

id (int)

ID, которое получила запись после её копирования из временной таблицы в оригинальную.

temp_id (int)

ID, которое было у записи во временной таблице. Данное ID будет отрицательным (для подчинённых записей) или нулём (для главных записей) в случае, когда запись была создана во временной таблице и ещё не была скопирована в оригинальную таблицу.

Примечание

Объекты, которые будут получены из событий, вызываемых из класса kTempTablesHandler никогда не содержат достоверной информации.

Поэтому в случае, когда нужен объект, загруженный по ID скопированной записи, то его нужно загружать самому. Это будет показано на ниже приведённом примере.

$object =& $this->Application->recallObject($event->Prefix . '.-item', null, Array ('skip_autoload' => true));
/* @var $object kDBItem */

$object->SwitchToLive(); // для того, чтобы объект был загружен из оригинальной таблицы, а не из временной
$object->Load( $event->getEventParam('id') );

Потенциальное применение

Данное событие можно использовать для автоматического обновления или добавления данных в другие таблицы на основе только что сохранённых в оригинальную таблицу данных. Это примерно тоже самое, что и используя параметр ids события OnSave, но только здесь можно работать с ID также и подчинённых записей. Ниже приведён пример добавления записи в журнал изменений:

function OnAfterCopyToLive(&$event)
{
    parent::OnAfterCopyToLive($event);

    $log_object =& $this->Application->recallObject('log');
    /* @var $log_object kDBItem */

    $log_object->addEntry($event->Prefix, $event->getEventParam('id'));
}

Ограничения

Данное событие будет вызываться только при использовании события OnSave, и следовательно будет работать только в случае, когда используются временные таблицы.

Изменено в версии 4.2.1.

Это событие вызывается и в случае, когда у префикса нету подчинённых префиксов.