Plugins MS CRM中的自定义工作流与插件

Plugins MS CRM中的自定义工作流与插件,plugins,workflow,dynamics-crm,Plugins,Workflow,Dynamics Crm,我使用了很多插件代码来实现CRM中的业务逻辑,但现在我提出了这个功能,称为自定义工作流活动。 现在我想知道什么时候在插件上使用这些自定义工作流?代码活动是可以插入到一个或多个不同工作流中的自定义步骤。一种“插件”,但过去常常被插入到工作流中 工作流为您提供了更多反馈,因为它们在CRM中直观地表示,因此非技术人员可以查看工作流的状态以及自启动以来执行的步骤。工作流也在异步服务中执行,因此它们在应用程序池中异步运行,插件同步运行 因此,对于长时间运行的流程,工作流也更好 尽管如此,在以下情况下,插件

我使用了很多插件代码来实现CRM中的业务逻辑,但现在我提出了这个功能,称为自定义工作流活动。
现在我想知道什么时候在插件上使用这些自定义工作流?

代码活动是可以插入到一个或多个不同工作流中的自定义步骤。一种“插件”,但过去常常被插入到工作流中

工作流为您提供了更多反馈,因为它们在CRM中直观地表示,因此非技术人员可以查看工作流的状态以及自启动以来执行的步骤。工作流也在异步服务中执行,因此它们在应用程序池中异步运行,插件同步运行

因此,对于长时间运行的流程,工作流也更好

尽管如此,在以下情况下,插件仍然很有用:

  • 您需要立即做出响应,因为它们是在CRM的应用程序池中触发和执行的
  • 您需要在事务中运行任何内容,这样他们就可以通过引发异常来中止事务
示例:您与第三方服务集成,在CRM中无法创建记录,除非在另一端验证某些内容。另一个例子是并发:自动编号插件是一个插件,因为它需要在事务中锁定数据库,否则多个并发线程可能会创建重复的ID


因此,答案总是:视情况而定

我自己深入研究了这个主题,发现了一些有趣的东西,我想与大家分享, 下面是比较的完整列表:

  • 插件对数据更改(如更新或创建记录)的唯一触发,但自定义工作流参与到流程中(工作流、对话框等)

    因此,工作流不仅可以在数据更改时触发,还可以在其流程内的任何时间点按需触发。正如您可能已经理解的那样,这是实现复杂业务逻辑所需的真正的灵活性

  • 插件不接受参数或传递的数据, 但是,自定义工作流通过使用Inagument属性使其成为可能,如下所示:

    [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
    
    [Input(“Case”)]//工作流中显示的字段的标签
    [ReferenceTarget(“incident”)]//如果使用EntityReference,则必须指向类型
    public InArgument yourArg{get;set;}//几乎支持所有数据类型
    
  • 业务用户可以简单地使用和操作工作流

  • 自定义工作流是完全可重用的。有了一个寄存器,您就有了一条业务逻辑,可以在多种情况下使用。 在某些情况下,您甚至可能会编写一个可用于许多不同实体的代码

  • 到目前为止,您知道自定义工作流比插件更可靠,但插件接管自定义工作流的关键是验证数据更改并最终需要恢复这些更改。当然,这在自定义工作流中是可能的,但添加插件要比工作流容易得多

  • 请记住,插件运行得更快!(当我自己测试时)

  • 然而,CRM中的评测工作流仍然存在漏洞
许多开发人员或MS CRM初学者在某些场景中会感到困惑,是使用工作流还是使用插件,因为两者都可以使用,并且能够在服务器端执行特定任务

插件和工作流有一些显著的区别,比如事件消息的限制、触发点

您可以参考下面的链接以完全了解差异-


自CRM 2013以来,可以选择工作流是同步运行还是异步运行。同样,插件也可以配置为同步或异步运行。。。我刚刚遇到了大量同步工作流的性能问题。而且,就个人而言,如果我需要异步运行某些东西,我更喜欢代码活动,因为它更“直观”。但是,这些仍然是可能的选项,这取决于您的偏好。因此@Jordi,正如您所看到的,它们都可以异步或同步运行,因此并发性并不是区分它们的好方法。您提到的唯一优点是,非技术用户可以更好地看到代码活动。是的,它们是一种更友好的表示形式。