3

我即将在 CRM 中编写一个每天调用自身的工作流。这是一个递归工作流。

如果在过去 3 天内未更新记录,它将每天在 50 万个实体上运行并停用记录。

我担心性能有没有其他人这样做。

4

2 回答 2

3

我没有亲自实现过这样的事情,但是异步服务必须跟踪数据库中浮动的 500,000 条记录,这将对您的硬件造成负担。此外,CRM 跟踪递归工作流实例。我面前没有确切的规范,但如果工作流在特定时间范围内调用自己一定次数,CRM 将终止工作流。

您是否可以编写一个控制台应用程序,向 Crm 服务询问三天内未更新的记录,然后停用它们?每天将其作为计划任务运行一次,然后您的 CRM 系统就无需跟踪所有正在运行的工作流实例。

编辑:啊,我现在看到您可能一直在考虑在所有记录上运行的工作流,而不是在每条记录上运行的工作流。如果你走这条路,benjynito 的建议很有意义,尽管我仍然认为计划任务比使用工作流更合适。

于 2009-09-21T21:16:22.740 回答
1

您需要确保您的工作流程在非高峰时段运行。假设你有一个本地安装,你应该能够摆脱它。如果您使用的是托管实例,您可能会担心一个组织在运行工作流,而另一个组织正在使用该系统。如有必要,使用超时和自定义工作流活动将开始时间强制为某个时间段。

我假设您将尽可能高效地确定要停用哪些记录。(即查询表达式只会带回您将要停用的记录)。

CRM 提供的内置无限循环保护不应该杀死您的工作流实例。它在呼叫深度为 8 后停止,但如果一个小时内没有呼叫,它会重置为 1。因此,您每天执行一次这一事实应该会让您在递归工作流程方面做得很好。

于 2009-09-22T12:49:47.440 回答