MS CRM рекурсивный рабочий процесс и производительность
Я собираюсь написать рабочий процесс в CRM, который вызывает себя каждый день. Это рекурсивный рабочий процесс.
Он будет работать на полмиллиона объектов каждый день и деактивировать запись, если она не была обновлена за последние 3 дня.
Я беспокоюсь о производительности, кто-нибудь еще сделал это.
2 ответа
Вы хотите убедиться, что ваш рабочий процесс работает в часы без пиковой нагрузки. Предполагая, что у вас есть локальная установка, вы сможете сойти с рук. Если вы используете размещенный экземпляр, вы можете быть обеспокоены тем, что одна организация запускает рабочий процесс, в то время как другая организация использует систему. Используйте время ожидания и, возможно, настраиваемое действие рабочего процесса, если необходимо, чтобы принудительно установить время начала для определенного периода.
Я предполагаю, что вы будете максимально эффективны в определении того, какие записи нужно деактивировать. (т.е. выражение запроса вернет только те записи, которые вы будете деактивировать).
Встроенная защита от бесконечного цикла, предлагаемая CRM, не должна убивать ваши экземпляры рабочего процесса. Он останавливается после глубины 8 вызовов, но сбрасывается до 1, если в течение часа не было сделано никаких вызовов. Таким образом, тот факт, что вы делаете это один раз в день, должен помочь вам с рекурсивным процессом.
Я лично не реализовал ничего подобного, но это 500000 записей, которые плавают в БД, которые должна отслеживать асинхронная служба, что облагается налогом на ваше оборудование. Кроме того, CRM отслеживает рекурсивные экземпляры рабочих процессов. У меня нет точных спецификаций передо мной, но если рабочий процесс вызывает себя определенное количество раз в течение определенного периода времени, CRM убьет рабочий процесс.
Не могли бы вы написать консольное приложение, которое запрашивает у службы Crm записи, которые не были обновлены в течение трех дней, а затем деактивировать их? Запускайте его как запланированное задание один раз в день, и тогда ваша система CRM не будет нести ответственность за отслеживание всех запущенных экземпляров рабочего процесса.
РЕДАКТИРОВАТЬ: Ах, я вижу, теперь вы, возможно, думали об одном рабочем процессе, который выполняется на всех записях, в отличие от рабочих процессов, работающих на каждой записи. Совет Бенджинито имеет смысл, если вы идете по этому пути, хотя я все еще думаю, что запланированное задание будет более подходящим, чем использование рабочего процесса.