DB.RestoreObjectFromBuffer

From SunFlurry wiki
Jump to: navigation, search
  RestoreObjectFromBuffer (Восстановление состояния объекта)
Объект:Объект базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Не подходящий объект, не буфер, ошибка в данных
Визуальность:Нет

Функция восстанавливает текущий объект из указанного буфера, созданного ранее функцией StoreObjectToBuffer. Из буфера восстанавливаются все свойства объекта -- реквизиты, особые реквизиты, признак объект изменен, внутренние коды и пр. Внимание: если объект является новым несохраненным, среди реквизитов объекта есть нумераторы, заполняемые при создании и была произведена успешная запись объекта, после чего она была отменена откатом транзакции (RollbackTransaction), получится ситуация, когда указанные нумераторы, содержат значения, которые не закреплены в таблице со значениями временных нумераторов на сервере (это, однако, не относится к реквизитам-нумераторам, заполняемым при записи). Поэтому, при наличии таких реквизитов, если объект новый, после отмены транзакции, нужно обновить значения реквизитов-нумераторов с помощью функции SetNumerator. Функция обычно используется для объектов, открытых для визуального редактирования, в момент отмены транзакции, когда запись не была успешной.

Синтаксис

DB.RestoreObjectFromBuffer(<Состояние объекта (BUFFER)>)

Аргументы

  • <Состояние объекта (BUFFER)> - Задает состояние объекта, созданное ранее функцией StoreObjectToBuffer.

Примеры

//Пример для документа aEl, открытого визуально, при обработке которого необходимо убедиться, что также будут обработаны все документы из списка СпД.
//       Если хотя бы один документ не может быть обработан, текущий документ необходимо вернуть в исходное состояние

//Сохраним состояние текущего документа
Buff:=aEl.StoreObjectToBuffer();
        
BeginTransaction();
Try
  //Обработаем текущий документ
  aEl.Publish();
          
  //Обработаем или сохраним все документы из списка СпД
  For i:=1 to СпД.Size() Do
    бДок:=СпД.Get(i);
    If бДок.Status()<2 Then
      бДок.Save();
    Else
      бДок.Publish();
    EndIf; 
  EndDo;

  //Зафиксировать транзакцию
  CommitTransaction();
Except
  //Если сохранение или обработка документов невозможна, будет вызвано исключение
  //Мы должны отменить транзакцию (вернуть все документы и текущий в базе данных в исходное состояние
  RollBackTransaction();
  //Также мы должны восстановить в исходное визуальное состояние текущий документ (обработчик события OnPublish мог изменить какие-либо реквизиты)
  aEl.RestoreObjectFromBuffer(Buff);
  Message(PopError(),"!");
  Exit 0;
EndTry;