Я должен был добавить с самого начала - это в Microsoft Dynamics CRM 2011
Я хорошо знаю CRM, но затрудняюсь объяснить поведение в моем текущем развертывании.
Пожалуйста, прочитайте план моего сценария, чтобы помочь мне понять, какие из моих предположений/пониманий неверны (и, следовательно, что вызывает эту ошибку). Это не соответствует моим ожиданиям.
Это задание рабочего процесса было отменено, так как рабочий процесс, который его запустил, содержал бесконечный цикл. Исправьте логику рабочего процесса и повторите попытку. Сведения о логике рабочего процесса см. в справке.
Итак, в двух словах — стандартное обнаружение бесконечного цикла. Я понимаю концепцию и почему она существует.
Во-первых, я думаю, что в этом сценарии для нас вполне безопасно игнорировать содержимое кода подключаемого модуля.Он отлично работает, является атомарным и практически не затрагивает CRM (чтобы было ясно, это предварительный плагин, который запускает удаленную веб-службу, ожидает ответа, а затем устанавливает атрибут даты/времени «завершено» в моей записи триггера перед передачей целевую сущность обратно в конвейер). Пока создается запись Trigger, этот код работает и делает то, что должен.
Не учитывая содержание подключаемого модуля, может возникнуть проблема, которую я не одобряю, связанная с регистрацией подключаемого модуля на этапе предварительного создания объекта...
Таким образом, остается сам рабочий процесс. Это просто. Он работает следующим образом:
С этой настройкой я вручную создайте новую запись триггера, и процесс начнет действовать. Перемотка вперед 1 час 58 минут (на основе последнего цикла, который я выполнил - помня, что мой код плагина может занять минуту, чтобы завершить работу), после 7 успешных циклов выполнения (т.е. создаются и завершаются новые задания рабочего процесса), 8-й цикл завершается вышеупомянутая ошибка.
Глубина рекурсии по умолчанию установлена на 8. Если рабочий процесс/плагин вызывает сам себя 8 раз, то обнаруживается бесконечный цикл.
Глубина рекурсии сбрасывается каждый час( или 10 минут — см. «Предупреждения» в связанном блоге?)
Настройки глубины рекурсии можно установить с помощью PowerShellили кода SDK с использованием веб-службы развертываниятолько в локальном развертывании(с помощью командлета Set-CrmSetting)
«Изменить настройки глубины рекурсии»
Я не могу изменить настройки глубины рекурсии развертывания, поскольку это невозможно в онлайн-сценарии — в конечном итоге я также буду выполнять развертывание в CRM Online.
" Увеличьте время ожидания рабочего процесса"
Это тоже не вариант - переиндексация должна происходить каждые 15 минут, в идеале раньше.
@Boone предложил ниже, чтобы тайм-аут глубины рекурсии сбрасывался через 60 минут бездействия, а не каждые 60 минут. В этом и заключается первое недоразумение.
Во время обсуждения с @alex я предположил, что CorrelationId может сохраняться между созданием сущности через рабочий процесс и рабочим процессом, который порождает ультимативы... Что ж, это так. CorrelationId одинаков как в подключаемом модуле, так и в рабочем процессе, а также во всех записях, которые буферизируются из этого потока. Сейчас я ищу способы отделить CorrelationId (или, возможно, создание записей) от объекта и рабочего процесса.