检测插件回滚

时间:2014-07-14 14:31:43

标签: dynamics-crm-2013

非常简单的问题,但我无法找到任何相关信息。
我在Dynamics CRM 2013中有一个插件,用于侦听帐户的创建和更新事件。根据某些业务规则,有关此帐户的一些信息将写入外部Web服务 但是,有时可以从插件范围之外回滚创建或更新操作(例如第三方插件),因此无法创建或更新帐户。 crm插件模型通过回滚在此事务中进行的每个SDK调用来很好地处理这个问题。但是,由于我已经向外部服务写了一些信息,我需要知道何时发生回滚,以便我可以手动回滚外部操作。

有没有办法检测插件执行管道中的回滚并执行一些自定义代码?也欢迎其他解决方案。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

插件回滚时没有可以订阅的触发器,但您可以确定它何时发生。

  1. 定义一个新实体(称之为“事务跟踪器”或任何有意义的事物)。为实体定义这些属性
    • OptionSet属性(称之为“RollbackAction”,或者再次,无论什么都有意义)。
    • 将用作数据字段的文本属性。
  2. 定义一个新的工作流程,在创建“TransactionTracker”时启动
    • 让它的第一步是等待条件,定义为等待1分钟的进程超时。
    • 下一步是自定义工作流活动,它使用回滚操作来确定如何解析文本属性,以确定实体是否已回滚(如果它是创建,它是否存在?如果是更新,是按日期修改的实体> =事务跟踪器的日期?
    • 如果已回滚,则执行任何nessacary操作,如果尚未回滚,则退出工作流程(或者可选择删除TransactionTracker实体)
  3. 在您的插件中,在进行外部调用之前,创建一个OrganizationServiceProxy(因为您正在创建它而不使用现有的,它将在事务之外创建,因此不会被清除)。
  4. 使用out of transaction服务创建“TransactionTracker”实体,并根据需要填充该属性。
  5. 您可能需要调整超时,但除此之外,它应该可以正常工作。