Рабочий процесс, который запускается при обновлении Quote.TotalAmount, получает ошибку бесконечного цикла.

У меня есть рабочий процесс, который обновляет настраиваемое поле в объекте Quote при обновлении общей суммы Quote. Когда рабочий процесс выполняется, возникает следующая ошибка.

«Это задание рабочего процесса было отменено, поскольку рабочий процесс, который его запустил, содержал бесконечный цикл. Исправьте логику рабочего процесса и повторите попытку. Информацию о логике рабочего процесса см. в справке».

Чтобы воспроизвести эту ошибку, создайте рабочий процесс по запросу с шагом обновления. На этапе обновления для депозита котировок устанавливается значение 100. Запустите рабочий процесс, затем перейдите в область «Сеансы обработки» рабочего процесса. Вы увидите, что рабочий процесс выполнялся много раз. Если вы откроете запись сеанса процесса, вы увидите ошибку, упомянутую выше.

Я предполагаю, что это происходит потому, что при обновлении котировки общая сумма пересчитывается, когда общая сумма пересчитывается, выполняется рабочий процесс, когда рабочий поток выполняется, котировка обновляется, а когда обновляется котировка, обновляется общая сумма. и так далее и тому подобное и сын.

Например

  1. Цитата является обновлением

  2. Общая сумма пересчитывается

  3. Рабочий процесс запускается и обновляет депозит котировки.
  4. Общая сумма пересчитывается
  5. Рабочий процесс запускается и обновляет депозит котировки.
  6. Общая сумма пересчитывается
  7. Рабочий процесс запускается и обновляет депозит котировки.
  8. Общая сумма пересчитывается
  9. Рабочий процесс запускается и обновляет депозит котировки.
  10. Возникает ошибка

Я надеюсь в этом есть смысл

Кто-нибудь знает или есть идеи, как это решить?


person user3845056    schedule 14.08.2015    source источник


Ответы (4)


В начале плагина:

if (Context.Depth > 1) 
{
    return; 
}

Он выйдет из плагина, если он будет запущен другим плагином, поэтому выйдет из цикла при втором триггере. Это то, что я использую, когда регистрирую плагин при обновлении, чтобы он не запускался снова.

Надеюсь, поможет.

person Joshua Smith    schedule 14.08.2015
comment
+1, но это помешает всем другим плагинам запускать этот плагин, что может быть требованием. Я лично считаю, что на Depth управление не следует полагаться, если есть другой вариант, это должно быть последним средством. - person mehmetseckin; 17.08.2015
comment
Я согласен, и я подумал спросить об этом, поскольку он не полагался на это. Но в его случае использования этого не произошло. - person Joshua Smith; 17.08.2015

Найдите неиспользуемое поле (или создайте собственное, если его нет) и используйте его как флаг.

Установите для него какое-либо значение в вашем рабочем процессе, и прежде чем выполнять какое-либо обновление записи Quote, проверьте значение этого поля, чтобы определить, обновил ли уже рабочий процесс запись.

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

person mehmetseckin    schedule 14.08.2015

Измените код рабочего процесса, чтобы он не обновлял предложение, если оно фактически не вносит никаких изменений. Я предполагаю, что Total Amount снова и снова устанавливается на одно и то же, и именно поэтому вы получаете бесконечный цикл, поскольку это снова запускает рабочий процесс.

Если вы не обновите предложение, если оно не нуждается в обновлении, вы, очевидно, не запустите другой рабочий процесс.

См. этот пример, чтобы узнать, как проверить предыдущие значения записи в коде действия рабочего процесса.

person pkr    schedule 17.08.2015

Вы не обновляете общую сумму, вы обновляете настраиваемое поле. Вы уверены, что рабочий процесс не запускается также при изменении этого настраиваемого поля?

person Victor Suarez    schedule 20.08.2015