MS CRM recursive workflow and performance

Asked
Viewd1394

3

I’m about to write a workflow in CRM that calls itself every day. This is a recursive workflow.

It will run on half a million entities each day and deactive the record if it was not been upodated in the past 3 days.

I’m worried about performance has anyone else done this.

  • Javier, yes CRM usis CRM is a software category, which is related to this post.

    Chris Jones21 сентября 2009, 20:53
  • CRM is a software category, not a product name

    Javier21 сентября 2009, 20:49

2 ответов

1

You'll want to make sure your workflow is running in non-peak hours. Assuming you have an on-premise installation you should be able to get away with that. If you're using a hosted instance, you might be worried about one organization running the workflow while another organization is using the system. Use the timeout and maybe a custom workflow activity, if necessary, to force the start time to a certain period.

I'm assuming you'll be as efficient as possible in figuring out which records to deactivate. (i.e. Query Expression would only bring back the records you'll be deactivating).

The built-in infinite loop-protection offered by CRM shouldn't kill your workflow instances. It stops after a call depth of 8, but it resets to 1 if no calls are made for an hour. So the fact that you're doing this once a day should make you OK on the recursive workflow front.

3

Я лично не реализовал ничего подобного, но это 500 000 записей, плавающих в базе данных, которые должна отслеживать асинхронная служба, что приведет к обременению вашего оборудования. Кроме того, CRM отслеживает экземпляры рекурсивных рабочих процессов. У меня нет точных спецификаций передо мной, но если рабочий процесс вызывает себя заданное количество раз в течение определенного периода времени, CRM убьет рабочий процесс.

Не могли бы вы просто написать консольное приложение, которое запрашивает у Crm Service записи, которые не обновлялись в течение трех дней, а затем деактивирует их? Запускайте его как запланированную задачу один раз в день, и тогда ваша CRM-система не будет обременена отслеживанием всех этих запущенных экземпляров рабочего процесса.

РЕДАКТИРОВАТЬ: А, теперь я вижу, что вы, возможно, думали об одном рабочем процессе, который выполняется для всех записей, в отличие от рабочих процессов, выполняемых для каждой записи. Совет Бенджинито имеет смысл, если вы идете по этому пути, хотя я все же думаю, что запланированная задача будет более подходящей, чем использование рабочего процесса.

  • Я утверждаю, что как только вы начнете пытаться заставить CRM делать то, для чего она не предназначена, вот в чем проблема.

    Matt24 сентября 2009, 18:43
  • Также следует отметить, что я прочитал это так, как упоминает Мэтт (1 рабочий процесс для всех, а не рабочий процесс для каждой сущности). По сути, это бесцельный рабочий процесс, вам просто нужно выбрать что-то, с чего его начать.

    John Hoven22 сентября 2009, 20:56
  • By scheduled task I assume you mean something outside of CRM (Like real windows scheduled tasks / windows service)? Or is there something I’m not aware of in CRM?

    John Hoven22 сентября 2009, 20:51
  • Когда вы начинаете писать код вне crm, клиент не может им управлять. это станет проблемой

    Chris Jones24 сентября 2009, 15:03
  • Да, просто как запланированное задание Windows. Внутри CRM ничего нет.

    Matt22 сентября 2009, 21:03