History – история работы
<< Click to Display Table of Contents >> Объектная модель > Действия с репозиториями и сущностями History – история работы |
История работы с сущностями представляет собой список записей, в котором фиксируются произошедшие с этими сущностями события. Историю работы можно посмотреть в карточке сущности на закладке «История». Записи ведутся в хронологическом порядке.
Пользователь не может подменить информацию об истории работы – она доступна только для просмотра.
Запись в историю работы инициируется при возникновении системных событий: сохранение, изменение, удаление, подписание и т.д., а также при вызове разработчиком соответствующих методов.
Дополнительная информация записывается в историю, если:
•одновременно с сущностью физически происходит одно действие, а логически – несколько. Например, физически документ изменяется, а логически документ регистрируется и для него выделяется новый номер. В этом случае рекомендуется использовать событие «До сохранения истории» и метод Write();
•при выполнении какого-либо действия в системе сама сущность не изменяется, но логически над ней выполняется операция. Например, документ вложен в задание на согласование, задание выполняется с результатом «Согласовать». Тогда в документе отражается факт того, что документ согласован. В этом случае рекомендуется использовать методы для записи истории вне сущности.
Событие «До сохранения истории»
Для записи дополнительной информации в историю работы можно использовать событие «До сохранения истории» и метод Write() в параметрах события.
Пример 1. Добавление записи в историю в событии «До сохранения истории»
При создании документа в историю работы добавляется отдельная запись регистрации. Для добавления записи в историю используется метод Write() в событии «До сохранения истории». Перед этим требуется локализовать значения операции.
public override void BeforeSaveHistory(Sungero.Content.DocumentHistoryEventArgs e)
{
var isCreateAction = e.Action == Sungero.CoreEntities.History.Action.Create;
var operation = new Enumeration(Constants.OfficialDocument.Operation.Registration);
var operationDetailed = new Enumeration(Constants.OfficialDocument.OperationDetailed.Registration);
var comment = !string.IsNullOrWhiteSpace(_obj.RegistrationNumber) ?
string.Join("|", _obj.RegistrationNumber, _obj.DocumentRegister) :
string.Empty;
// Добавить отдельную запись регистрации в историю работы при создании документа.
if (isCreateAction && _obj.RegistrationState != RegistrationState.NotRegistered)
e.Write(operation, operationDetailed, comment, null);
}
ПРИМЕЧАНИЕ. При вызове метода e.Write() событие записи истории не вызывается повторно, так как это приводит к зацикливанию.
Для программной работы с историей предназначено свойство History.
Имя |
Описание |
---|---|
Получить историю работы с сущностью. Метод возвращает список <IHistory> |
|
Write() |
Записать историю работы с сущностью |
Отфильтровать список сущностей по истории. Метод возвращает конкретный экземпляр <IHistory> |
|
Отфильтровать список сущностей по истории работы с документом, если требуется задать условие на номер версии документа. Метод возвращает конкретный экземпляр <IHistory> |
Пример 2. Добавление записи в историю вне сущности
// Добавить запись в историю работы с документом.
var document = OfficialDocuments.Get(id);
document.History.Write(operation, operationDetailed, comment);
ПРИМЕЧАНИЕ. При использовании метода Write() у сущности вызывается событие на запись истории. Поэтому не рекомендуется использовать метод в событии «До сохранения истории» для той же сущности, так как это может привести к бесконечным вызовам события.
© Компания Directum, 2024 |