Вопрос

Обработка изменения некоторых реквизитов сущности

Добрый день!

У меня стоит задача обработки событий изменения некоторых реквизитов (Категория, Сервисный договор, Сервис) сущности Case (Обращения). Я могу в  событийном процессе обрабатывать события "Перед сохранением записи", "После сохранения записи", но я не совсем понимаю, как реализовать реакцию именно на изменение некоторых реквизитов. Т.е. если произошла запись, но перечисленные выше реквизиты не изменились, то ничего делать не нужно. Логика подсказывает, что нужно иметь "снимок" объекта до сохранения и сравнить его с значениями после. Как же это сделать? Заранее спасибо за помощь.

Нравится

5 комментариев
Лучший ответ

На событие CaseSaving получаете в параметр старое значение поля:

 

AccountOldId = Entity.GetTypedOldColumnValue<Guid>("AccountId");
return true;

 

На событие CasеSaved уже можно сравнивать полученный параметр с новым значением

 

var NameEntity = new Entity(Entity);
if (NameEntity.FetchFromDB(Entity.PrimaryColumnValue)) {
	Guid accountId = NameEntity.GetTypedColumnValue<Guid>("AccountId");
 
	if ((AccountOldId != accountId)  { 
               ....
    }
 
}
return true;

 

Смотрите в сторону объекта Case пакета Case. на событие CaseSaving. Так же есть метод в процессе IsStatusChanged. 

 

Еще очень поможет методы событийного процесса объекта Case пакета SLM. Событие так же CaseSaving. Метод GetIsNeedToLogLifecycle() и GetLoggingColumns(). В последнем определяется на какие колонки пишется жизненный цикл обработки обращения. По аналогии я сделал свой журнал обработки обращения со своими колонками.

На событие CaseSaving получаете в параметр старое значение поля:

 

AccountOldId = Entity.GetTypedOldColumnValue<Guid>("AccountId");
return true;

 

На событие CasеSaved уже можно сравнивать полученный параметр с новым значением

 

var NameEntity = new Entity(Entity);
if (NameEntity.FetchFromDB(Entity.PrimaryColumnValue)) {
	Guid accountId = NameEntity.GetTypedColumnValue<Guid>("AccountId");
 
	if ((AccountOldId != accountId)  { 
               ....
    }
 
}
return true;

 

Владимир Соколов,

 Большое спасибо за Ваш ответ. Буду разбираться.

Алексей Следь,

 Большое спасибо за Ваш ответ. Буду разбираться.

Показать все комментарии