Каким образом избежать циклического вызова процессов?

Есть 2 процесса, которые запускаются по сигналу изменения некоторого поля в 2х разных сущностях, например, Account и Contact.

В одном процессе при изменении поля A в таблице Account вызывается изменение поля Б в Contact, а в другом при изменении поля Б таблицы Contact вызывается изменение поля A в Account.

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

Но вызов серверного кода более тяжелый и к тому же тогда информация об измененных полях не попадает в лог.

Меня интересует, какие ещё есть 'более правильные' с точки зрения производительности варианты решения такой задачи?

 

Нравится

5 комментариев

Добрый день!



А можете уточнить в какой лог не попадают данные, а так же показать Ваш ScriptTask?

Евгений Манько,

Не попадают в Change log в Администрировании

В одном процессе код приблизительно такой:

var update = new Update(UserConnection, "Contact")

            .Set("TypeId", Column.Parameter(ContactType))

            .Where("Account").IsEqual(Column.Const(AccountType)).Execute();

А в другом наоборот.

Алла Савельева,



Добрый день! 

Данный скриптаск тяжелый так как он меняет все записи. Как обходное решение, в разделы можно добавить поля куда будет записываться временный признак (достаточно будет текстового поля которое доступного «только для чтения» которое будет меняться процессом). А в рамках процесса реализовать примерно такую схему – скриншот. Если добавить в стартовый сигнал условие что запрещающий временный признак не установлен, то процессы не будут запускать друг друга.

Евгений,

спасибо за совет, как вариант, может быть.

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

В любом случае, от существующего варианта нужно отказываться))))

Алла Савельева,



Элемент начальный сигнал несет в себе  несколько вариантов запуска. Можно настроить его на изминение/добавление/удаление записи. С возможностью указать условия запуска по событию с опеределенным полем в карточке. При необходимости можно добавить дополнительные фильтры. Подробнее про этот эллемент можно прочитать тут.

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