Вопрос

Определение изменившегося поля в событиях Entity

Здравствуйте.
Место событий Entity, событие Saved, для которого был организован событийный подпроцесс. Последний со скриптом и сообщением которое запускает этот скрипт по событию. 
И вопрос, как в скрипте можно определить какие поля были изменены после сохранения, что бы в зависимости от этого в запустить свою логику?

У меня такой же вопрос

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

Добавьте еще подписку на событие, перед сохранением.
Так же делаете подписку, скрипт.
В параметрах создайте нужные переменные нужных типов.
После чего в самом скрипте "перед сохранением", делайте так:
ContactOld = Entity.GetTypedOldColumnValue<Guid>("Contact");
Затем, в вашем скрипте "После сохранения" делайте сверку
if (ContactOld != Entity.GetTypedColumnValue<Guid>("Contact") { // }

Добавьте еще подписку на событие, перед сохранением.
Так же делаете подписку, скрипт.
В параметрах создайте нужные переменные нужных типов.
После чего в самом скрипте "перед сохранением", делайте так:
ContactOld = Entity.GetTypedOldColumnValue<Guid>("Contact");
Затем, в вашем скрипте "После сохранения" делайте сверку
if (ContactOld != Entity.GetTypedColumnValue<Guid>("Contact") { // }

Это можно сделать только в событийном процессе объекте перед сохранением записи

Entity.GetColumnOldValue("Name")

или

Entity.GetTypedOldColumnValue<String>("Name");

 

Добрый день!
На вход элемента скрипта обработки сохранения подается переменная ProcessExecutingContext context (https://monosnap.com/file/TP10NeOGRBkG4zXPFKxrVZM8Tvj4I6).
В ней есть public object ThrowEventArgs { get; set; }, которая приводится к объекту EntityAfterEventArgs. А в этом объекте уже есть массив измененных колонок: public EntityColumnValueCollection ModifiedColumnValues { get; set; }

Еще проще проверить что столбец изменен

var flag = Entity.GetChangedColumnValues().Any(col => col.Name == "Date");

Всем спасибо!

Войдите или зарегистрируйтесь, чтобы комментировать