我有一个自定义工作流活动,它接受一个名为" InputTest"的输入参数。这只是一个字符串。
[Input("InputTest")]
[RequiredArgument]
public InArgument<string> TargetEntity { get; set; }
在我的自定义工作流程活动中,我想阅读它,所以我执行以下操作:
string targetEntityValue = TargetEntity.Get(executionContext);
只要我添加该行,我的工作流程活动将不再执行。当我运行它时,状态将显示&#34;成功&#34;但是工作流程中的任何内容都不会运行,甚至工作流程开头的跟踪也没有说明已输入工作流程。 Diag日志中没有任何内容。当我运行SQL事件探查器时,只有少量语句添加到AsyncBase表中,表明工作流已运行并立即完成。
如果删除上面的行,则工作流程运行正常。我想知道我在这里做错了什么?为什么读取输入参数会导致CRM无法在工作流程中执行任何操作?
这几乎就像代码没有进入它的主要方法。
[Input("Entity")]
[RequiredArgument]
public InArgument<string> TargetEntity { get; set; }
protected override void Execute(CodeActivityContext executionContext)
{
// Create the tracing service
ITracingService tracingService = executionContext.GetExtension<ITracingService>();
if (tracingService == null)
{
throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
}
tracingService.Trace("Entered TestWorkflow.Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
executionContext.ActivityInstanceId,
executionContext.WorkflowInstanceId);
string targetEntityValue = TargetEntity.Get<string>(executionContext);
}
答案 0 :(得分:1)
好吧,这很奇怪。最后我感到绝望,所以我创建了一个带有新程序集名称的新项目,将代码添加回来并进行部署,现在它工作正常。
所以......我想也是:
这是我的第一个自定义工作流程插件,所以也许我会以某种方式设置原始项目错误,并且由于某种原因它没有进入其主要方法。
在CRM服务器上部署原始插件存在某种问题。
为什么CRM会运行插件并返回&#34;成功&#34;没有运行主要方法,我不确定。
答案 1 :(得分:0)
如果要读取“自定义工作流活动”参数,则正确的语法为:
string targetEntityValue = TargetEntity.Get<string>(executionContext);
答案 2 :(得分:0)
你确定那里没有演员表吗?您正在尝试将实体对象转换为字符串