如何在 Dynamics CRM 中执行插件交易之外的操作

How to Execute an Operation Outside of a Plugin Transaction in Dynamics CRM

我的 CRM 系统中有一个 Trace 实体,无论插件或工作流 activity 是否失败,我都想为该实体插入记录。当实时plugin/workflow失败时,所有发生的数据操作都会被回滚,所以任何插入的Trace记录也会被回滚。

我知道我可以使用 ITracingService,但很多时候最终用户不会 willing/able 在发生错误时将问题转告给我。

有谁知道在事务之外插入跟踪记录的受支持方法,因此无论代码成功还是失败,它们都可用?

如果您使用的是 Dynamics CRM Online(从 Spring 更新开始支持。)效果很好,1 天后会自动清除日志。

对于内部部署,您必须在执行事务之外编写它们。因此,您有几个不同的选择:

  1. 使用存储的凭据创建与 Dynamics CRM 的新连接(将它们存储在自定义实体或插件步骤的不安全或安全配置字符串中(建议您加密密码,无论您选择哪个选项。)

  2. 使用 NLog(或 Log4Net)等工具并像任何其他 .NET 应用程序一样记录日志(因为在线和沙箱不受限制。)

  3. 推出您自己的自定义日志记录解决方案并写入磁盘或网络服务。让它实现 ITracingService(它只有一个简单的方法),它可以在任何可能使用 CRM 跟踪实现的地方使用。你可以在这里看到我的快速实现(用于不同的目的):。您仍然需要实现对 disk/webservice/sql 的写入。顺便说一句,让它写入 Web 服务,从技术上讲它仍然可以在 CRM Online 中工作。