Выпуск настраиваемого рабочего процесса Dynamics CRM 2011

У меня возникла проблема с пользовательским рабочим процессом crm 2011, который я создал. Операция рабочего процесса является частью рабочего процесса, который отменяет и возобновляет контракты. Действие работает после перезапуска асинхронных служб, но после этого быстро перестает работать. Я получаю другое сообщение об ошибке в зависимости от того, находится ли сборка в песочнице или нет. Ниже приведено исходное сообщение, которое я получил до того, как решил попробовать выполнить "песочницу" сборки.

Рабочий процесс приостановлен из-за ошибки:

Необработанное исключение: System.TypeLoadException: не удалось загрузить тип 'Microsoft.Xrm.Sdk.OrganizationRequestCollection' из сборки 'Microsoft.Xrm.Sdk, версия =5.0.0.0, культура = нейтральная, PublicKeyToken=31bf3856ad364e35'. в ANHWP_WF_Library.CreateWarrantyPolicy.Execute(CodeActivityContext executeContext) в System.Activities.CodeActivity.InternalExecute(экземпляр ActivityInstance, executor ActivityExecutor, BookmarkManager bookmarkManager) в Bookmark Executor.Exception

И после песочницы...

Рабочий процесс приостановлен из-за ошибки:

Необработанное исключение: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: тип в System.Activator.CreateInstance(тип Тип, логическое значение nonPublic) в System.Activator.CreateInstance(тип тип) в Microsoft.Crm.Workflow.Services.ActivityReferenceService.InitializeActivity(ActivityReference activityReference) в Microsoft.Xrm.Sdk.Workflow.Activities.ActivityReference.CacheMetadata(метаданные NativeActivityMetadata) в System.Activities.NativeActivity.OnInternalCacheMetadata(Boolean createEmptyBindings) в System.Activities.Activity.InternalCacheMetadata(Boolean creatempmp, Boolean create1& validationErrors) at System.Activities.ActivityUtilities.ProcessActivity(ChildActivity childActivity, ChildActivity& nextActivity, Stack1 & деятельностьОстальное, ActivityCallStack parentChain, IList1& validationErrors, ProcessActivityTreeOptions options, ProcessActivityCallback callback) at System.Activities.ActivityUtilities.ProcessActivityTreeCore(ChildActivity currentActivity, ActivityCallStack parentChain, ProcessActivityTreeOptions options, ProcessActivityCallback callback, IList1 & validationErrors) в System.Activities.ActivityUtilities.CacheRootMetadata (действие Activity, LocationReferenceEnvironment hostEnvironment, параметры ProcessActivityTreeOptions, обратный вызов ProcessActivityCallback, IList`1& validationErrors) в System.Activities.Hosting.WorkflowInstanceAccessWence.EnsureInitialized() в System.Activities.WorkflowApplication.Enqueue(операция InstanceOperation, логическое push-сообщение) в System.Activities.WorkflowApplication.WaitForTurn(операция InstanceOperation, тайм-аут TimeSpan) в системном времени System.Activities.WorkflowApplication.InpanRoutUnsle:.Crm.Workflow.ActivityHost.StartWorkflowExecution(рабочий процесс Activity, контекст ICommonWorkflowContext) в Microsoft.Crm.Workflow.ActivityHostBase.StartWorkflow(контекст ICommonWorkflowContext, действие preLoadedActivity)

Ни одна из этих ошибок не имеет никакого смысла для меня, так как они кажутся проблемой самой CRM, а не моего кода. Другие действия в той же сборке по-прежнему работают нормально, поэтому это должно быть проблемой в моей деятельности. Кто-нибудь видел это раньше? Заранее спасибо.

Редактировать:

Таким образом, проблема связана с моим желанием повторно использовать код (как это сделал бы любой хороший разработчик). Что я сделал, так это создал класс обслуживания для обработки отмены и продления контрактов, чтобы я мог вызывать один и тот же код из разных частей действия рабочего процесса. Теперь кажется, что CRM это не очень понравилось. Я попытался переместить методы из класса обслуживания в некоторые частные методы внутри класса действия рабочего процесса, но у меня были те же ошибки. В конце концов я решил посмотреть, что произойдет, если я поместу каждую строку кода внутри фактического метода Execute действия рабочего процесса и альта! Больше ошибок нет. Это кажется немного странным для меня, потому что с того места, где я сижу, создаю экземпляры и вызываю другие классы, они должны нормально работать в той же сборке, пока классы создаются внутри метода execute и не определены глобально. Есть мысли о том, почему это может быть?

1 ответ

Изменяете ли вы код пользовательского действия (особенно входы / выходы?). Если это так, вам нужно обязательно увеличить номер сборки пользовательской сборки, прежде чем перерегистрировать его в CRM. Когда вы обновляете номер сборки, это говорит асинхронным службам CRM перезагрузить вашу пользовательскую сборку.

Попробуйте отменить регистрацию рабочего процесса в CRM, а затем перерегистрировать его. К сожалению, вам придется удалить пользовательский шаг из любых операций рабочего процесса, прежде чем отменить его регистрацию. Если вы когда-либо измените входные / выходные данные пользовательского рабочего процесса, вам придется пройти тот же процесс отмены регистрации / регистрации.

Другие вопросы по тегам