【问题标题】:How to Execute an Operation Outside of a Plugin Transaction in Dynamics CRM如何在 Dynamics CRM 中的插件事务之外执行操作
【发布时间】:2015-06-12 16:45:55
【问题描述】:

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

我知道我可以使用 ITracingService,但很多时候最终用户不愿意/不能在发生错误时将问题转达给我。

是否有人知道将跟踪记录插入事务外部的受支持方式,以便无论代码成功还是失败,它们都可用?

【问题讨论】:

    标签: c# dynamics-crm dynamics-crm-2013


    【解决方案1】:

    如果您使用的是 Dynamics CRM Online(从春季更新开始支持此功能。)它运行良好,并在 1 天后自动清除日志。

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

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

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

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

    【讨论】:

    • “如果您使用 Dynamics CRM Online(从春季更新开始支持此功能)是什么意思。它工作得很好,并在 1 天后自动清除日志。”我想记录来自 rest 服务调用的请求 url、请求正文和响应正文。
    • 如果您在 Dynamics CRM Online 中使用 ITracingService,它将被保存到 CRM 中的插件跟踪实体,以及最新版本的 Dynamics CRM Online。无论是否抛出异常都可以保存,不需要依赖用户下载日志文件。
    • 所以在线春季发布中总是会写追踪服务的踪迹?即使没有错误?
    • @Daryl - 可选,是的。您可以将其设置为始终保存、从不保存或异常保存。对于生产,我建议使用 Save on Exception 并使用 Always Save 进行测试/开发。
    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多