在实时工作流的自定义工作流活动中缺少跟踪日志

时间:2014-03-05 16:19:04

标签: dynamics-crm-online dynamics-crm-2013

我已经针对CRM 2013编写了一个自定义工作流活动。您无需了解它的作用。我遇到的问题是,尽管实例化了ITracingService,但我使用Trace(...)方法生成的任何跟踪内容在运行时仅对实时工作流进行模糊处理。换句话说,如果我异步运行我的工作流并且(故意)抛出异常,我会在相应的系统作业记录中看到跟踪日志。如果我只是将工作流程切换为“实时”(同步),那么我仍然会得到一个例外,我仍然可以获得任何自定义异常文本,但当然没有相应的systemjob为实时工作流生成,所以,就像插件一样,我在可下载的日志文件中寻找我的Trace输出,该文件在发生异常时显示。在这种情况下,我的Traces不可见但是我从(可能)托管工作流的父上下文得到了Microsoft的跟踪日志 - 您可以看到它引用了我的工作流程过程定义中的步骤:

[Microsoft.Crm.ObjectModel: Microsoft.Crm.Extensibility.InternalOperationPlugin]
[46f6cf4c-14ae-4f1e-98a1-eae99a37e95c: ExecuteWorkflow]
Starting sync workflow 'MyTestWorkflow', Id: ca8782b1-7ca4-e311-a055-6c3be5be5f78
Entering CreateStep1_step: 
Entering CustomActivityStep2_step: 
Sync workflow '__Test' terminated with error 'Unexpected exception from plug-in (Execute): My.Test.WF.DoSomething: System.NullReferenceException: Object reference not set to an instance of an object.'

在我的程序集My.Test.WF.DoSomething中,我在调用时访问了跟踪服务,并立即通过Trace()方法开始编写,例如

_trace.Trace("Starting Greg's custom code...");

这只是一个例子,但重点是,我的跟踪在异步时起作用,但在同步时“丢失”。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

相应工作流程设计器表单上的流程会话部分包含完整的异常消息。

答案 1 :(得分:0)

问题是完整的异常消息不包含通过ITracingService Trace方法创建的跟踪,只包含平台抛出的异常,进程部分的注释选项卡中不包含任何用户跟踪。

我认为开发目的的最佳方法是使用StringBuilder而不是ITracingService,并使用StringBuider.toString()作为消息抛出异常。 至于生产版本,最好的方法可能是使用自定义实体来跟踪运行时的错误,或者根本不在同步工作流上使用自定义工作流活动。

干杯。