MS CRM 中的自定义工作流与插件
Custom WorkFlows vs Plug-ins in MS CRM
我在 CRM 中使用了很多插件代码来实现业务逻辑,但现在我想出了这个称为自定义工作流的功能 Activity。
现在我想知道什么时候通过插件使用这些自定义工作流程?
代码活动是自定义步骤,可以插入到一个或多个不同的工作流中。有点像 "plugins",但过去常常插入到工作流程中。
工作流为您提供更多反馈,因为它们在 CRM 中以可视化方式呈现,因此非技术人员可以看到工作流的状态,以及自启动以来执行的步骤。工作流也在异步服务中执行,因此它们 运行 异步执行,插件 运行 在应用程序池中同步执行。
因此,工作流对于较长的 运行ning 流程也更好。
话虽如此,插件在以下情况下仍然有用:
- 您需要立即响应,因为它们是在 CRM 的应用程序池中触发和执行的,并且,
- 您需要 运行 事务内的任何内容,以便他们可以通过引发异常来中止它。
示例:您与第 3 方服务集成,其中无法在 CRM 中创建记录,除非在另一方验证某些内容。再比如并发性:auto-number plugin是一个插件,因为它需要在事务中锁定数据库,否则多个并发线程可能会创建重复的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
业务用户可以简单地使用和操作工作流。
自定义工作流程绝对可重用。有了一个寄存器,您就有了一段可以在多种情况下使用的业务逻辑。
在某些情况下,您甚至可能碰巧编写了可用于许多不同实体的代码。
到目前为止,您知道自定义工作流比插件更可靠,但插件接管自定义工作流的关键是当您验证数据更改并最终需要恢复这些更改时.当然这在自定义工作流中是可能的,但添加插件比工作流更容易。
请记住,插件 运行 更快! (因为我自己测试过)
- 但是,CRM 中的分析工作流程仍然存在问题!
许多开发人员或 MS CRM 初学者在某些情况下会混淆是使用工作流还是使用插件,因为两者都可以使用并且能够在服务器端执行特定任务。
插件和工作流有一些显着差异,例如事件消息的限制、触发点。
您可以参考下面的内容link以全面了解差异-
我在 CRM 中使用了很多插件代码来实现业务逻辑,但现在我想出了这个称为自定义工作流的功能 Activity。 现在我想知道什么时候通过插件使用这些自定义工作流程?
代码活动是自定义步骤,可以插入到一个或多个不同的工作流中。有点像 "plugins",但过去常常插入到工作流程中。
工作流为您提供更多反馈,因为它们在 CRM 中以可视化方式呈现,因此非技术人员可以看到工作流的状态,以及自启动以来执行的步骤。工作流也在异步服务中执行,因此它们 运行 异步执行,插件 运行 在应用程序池中同步执行。
因此,工作流对于较长的 运行ning 流程也更好。
话虽如此,插件在以下情况下仍然有用:
- 您需要立即响应,因为它们是在 CRM 的应用程序池中触发和执行的,并且,
- 您需要 运行 事务内的任何内容,以便他们可以通过引发异常来中止它。
示例:您与第 3 方服务集成,其中无法在 CRM 中创建记录,除非在另一方验证某些内容。再比如并发性:auto-number plugin是一个插件,因为它需要在事务中锁定数据库,否则多个并发线程可能会创建重复的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
业务用户可以简单地使用和操作工作流。
自定义工作流程绝对可重用。有了一个寄存器,您就有了一段可以在多种情况下使用的业务逻辑。 在某些情况下,您甚至可能碰巧编写了可用于许多不同实体的代码。
到目前为止,您知道自定义工作流比插件更可靠,但插件接管自定义工作流的关键是当您验证数据更改并最终需要恢复这些更改时.当然这在自定义工作流中是可能的,但添加插件比工作流更容易。
请记住,插件 运行 更快! (因为我自己测试过)
- 但是,CRM 中的分析工作流程仍然存在问题!
许多开发人员或 MS CRM 初学者在某些情况下会混淆是使用工作流还是使用插件,因为两者都可以使用并且能够在服务器端执行特定任务。
插件和工作流有一些显着差异,例如事件消息的限制、触发点。
您可以参考下面的内容link以全面了解差异-