Dynamics CRM 2011自定义工作流活动问题

时间:2015-08-20 19:21:34

标签: c# dynamics-crm-2011 workflow-activity

我遇到了我创建的crm 2011自定义工作流活动的问题。工作流活动是取消和续订合同的工作流程的一部分。重新启动异步服务后,该活动仍然有效,但之后很快就会停止工作。我得到一个不同的错误消息取决于程序集是否是沙箱。下面是我在决定尝试沙盒装配之前收到的原始信息。

由于错误导致工作流暂停:

  

未处理的异常:System.TypeLoadException:无法加载类型' Microsoft.Xrm.Sdk.OrganizationRequestCollection'来自assembly' Microsoft.Xrm.Sdk,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'。      在ANHWP_WF_Library.CreateWarrantyPolicy.Execute(CodeActivityContext executionContext)      在System.Activities.CodeActivity.InternalExecute(ActivityInstance实例,ActivityExecutor执行器,BookmarkManager bookmarkManager)      at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor,BookmarkManager bookmarkManager,Location resultLocation)

在沙盒之后......

由于错误导致工作流暂停:

  

未处理的异常:System.ArgumentNullException:值不能为null。   参数名称:类型      在System.Activator.CreateInstance(Type type,Boolean nonPublic)      在System.Activator.CreateInstance(类型类型)      在Microsoft.Crm.Workflow.Services.ActivityReferenceService.InitializeActivity(ActivityReference activityReference)      在Microsoft.Xrm.Sdk.Workflow.Activities.ActivityReference.CacheMetadata(NativeActivityMetadata metadata)      在System.Activities.NativeActivity.OnInternalCacheMetadata(Boolean createEmptyBindings)      在System.Activities.Activity.InternalCacheMetadata(布尔值createEmptyBindings,IList 1& validationErrors) at System.Activities.ActivityUtilities.ProcessActivity(ChildActivity childActivity, ChildActivity& nextActivity, Stack 1& activitiesRemaining,ActivityCallStack parentChain,IList 1& validationErrors, ProcessActivityTreeOptions options, ProcessActivityCallback callback) at System.Activities.ActivityUtilities.ProcessActivityTreeCore(ChildActivity currentActivity, ActivityCallStack parentChain, ProcessActivityTreeOptions options, ProcessActivityCallback callback, IList 1& validationErrors)      在System.Activities.ActivityUtilities.CacheRootMetadata(活动活动,LocationReferenceEnvironment hostEnvironment,ProcessActivityTreeOptions选项,ProcessActivityCallback回调,IList`1& validationErrors)      在System.Activities.Hosting.WorkflowInstance.ValidateWorkflow(WorkflowInstanceExtensionManager extensionManager)      在System.Activities.WorkflowApplication.EnsureInitialized()      在System.Activities.WorkflowApplication.Enqueue(InstanceOperation操作,布尔推送)      在System.Activities.WorkflowApplication.WaitForTurn(InstanceOperation操作,TimeSpan超时)      在System.Activities.WorkflowApplication.InternalRun(TimeSpan timeout,Boolean isUserRun)      在Microsoft.Crm.Workflow.ActivityHost.StartWorkflowExecution(活动工作流,ICommonWorkflowContext上下文)      在Microsoft.Crm.Workflow.ActivityHostBase.StartWorkflow(ICommonWorkflowContext context,Activity preLoadedActivity)

这些错误都没有任何意义,因为它们似乎是CRM本身的问题,而不是我的代码。同一个程序集中的其他活动仍然运行良好,因此它必须是我的活动的问题。谁看过这个吗?提前谢谢。

编辑:

因此,问题与我重新使用代码的愿望有关(就像任何优秀的开发人员一样)。我所做的是创建了一个服务类来处理合同的取消和续订,以便我可以从工作流活动的不同部分调用相同的代码。现在看来,CRM并不是非常喜欢这个。我尝试将方法移出服务类并进入工作流活动类中的一些私有方法,但我得到了相同的错误。最终我决定看看如果我将每行代码放在工作流活动和中提琴的实际执行方法中会发生什么!没有更多的错误。这对我来说似乎有点奇怪,因为从我在那里实例化并调用其他类应该在同一个程序集中正常工作,只要这些类在execute方法中实例化并且不是全局定义的。对于为什么会这样的想法?

1 个答案:

答案 0 :(得分:0)

您是否正在更改自定义活动的代码(特别是输入/输出?)如果是这样,您需要确保在CRM中重新注册之前增加自定义程序集的内部版本号。更新内部版本号时,这会告知CRM的异步服务重新加载自定义程序集。

尝试从CRM取消注册工作流程,然后重新注册。遗憾的是,在取消注册之前,您必须从任何工作流活动中删除自定义步骤。如果您更改了自定义工作流活动的输入/输出,则必须通过相同的取消注册/注册过程。