【发布时间】:2016-06-23 06:21:56
【问题描述】:
我使用大量插件代码在 CRM 中实现业务逻辑,但现在我想出了这个称为自定义工作流活动的功能。 现在我想知道何时通过插件使用这些自定义工作流程?
【问题讨论】:
标签: plugins workflow dynamics-crm
我使用大量插件代码在 CRM 中实现业务逻辑,但现在我想出了这个称为自定义工作流活动的功能。 现在我想知道何时通过插件使用这些自定义工作流程?
【问题讨论】:
标签: plugins workflow dynamics-crm
代码活动是可以插入到一个或多个不同工作流中的自定义步骤。一种“插件”,但曾经插入到工作流程中。
工作流程可以为您提供更多反馈,因为它们在 CRM 中以可视方式表示,因此非技术人员可以查看工作流程的状态以及从一开始就执行的步骤。工作流也在异步服务中执行,因此它们在应用程序池中异步运行,插件同步运行。
因此,工作流程也更适合长时间运行的流程。
话虽如此,插件在以下情况下仍然有用:
示例:您与第 3 方服务集成,除非在另一方验证某些内容,否则无法在 CRM 中创建记录。另一个例子是并发:自动编号插件是一个插件,因为它需要在事务中锁定数据库,否则多个并发线程可能会创建重复 ID。
所以,答案一如既往:视情况而定。 :)
【讨论】:
我自己深入研究了这个主题,发现了我想分享的有趣的东西, 所以这里是比较的完整列表:
插件只会触发数据更改,例如更新或创建记录,但自定义工作流程会参与流程(工作流程、对话框......)
因此,工作流不仅可以在数据更改时触发,还可以在其流程中的任何时间点随时按需触发。您可能已经了解,这是实现复杂业务逻辑所需的真正灵活性。
插件不接受参数或传递的数据, 但是自定义工作流程可以通过使用如下 InArgument 属性来实现:
[Input("Case")] //label of the field shown in workflow
[ReferenceTarget("incident")] //if using EntityReference, must point the type
public InArgument<EntityReference> yourArg { get; set; } //almost every data type is supported
业务用户可以简单地使用和操作工作流。
自定义工作流绝对是可重用的。使用一个寄存器,您就有了一个可以在多种情况下使用的业务逻辑。 在某些情况下,您甚至可能碰巧编写了可用于许多不同实体的代码。
到目前为止,您知道自定义工作流程比插件更可靠,但插件接管自定义工作流程的关键在于您验证数据更改并最终需要恢复这些更改。当然这在自定义工作流中是可能的,但添加插件比工作流容易得多。
请记住,插件运行得更快! (我自己测试过)
【讨论】:
许多开发人员或 MS CRM 初学者在某些情况下会混淆是使用工作流还是使用插件,因为两者都可以使用并且能够在服务器端执行特定任务。
插件和工作流有一些显着差异,例如事件消息的限制、触发点。
您可以参考以下链接以完整了解差异-
【讨论】: