Пользовательский рабочий процесс CRM 2011 постоянно находится в состоянии «Ожидание»

Я работаю над настраиваемым рабочим процессом в CRM 2011. Я создал рабочий процесс для создания пары записей (счет-фактура и счет-фактура), как только я получаю определенный тип действия (настраиваемое действие). Во время тестирования я передал конкретный GUID объекта, с которым я буду работать (создание указанного объекта будет триггером для рабочего процесса). Рабочий процесс работает нормально, когда я передаю GUID для записи, с которой хочу работать. Однако, как только я загружаю файл dll в CRM и пытаюсь запустить рабочий процесс, он переходит в состояние ожидания и остается там. Я попытался поймать блоки для всех своих функций с помощью throw new InvalidPluginExecutionException("Error occurred in MethodName:" + ex.Message);. Он не выходит из строя и не останавливается, а просто продолжает работу в состоянии ожидания.

Я попытался сбросить:

  • ИИС
  • асинхронный сервис
  • Службы синхронизации (пробовали редактировать:
  • Добавление контроля версий
  • Удалите/переустановите сборку)

В настоящее время я пытаюсь получить идентификатор активности PrimaryEntityId, поскольку мой основной объект — это запись, которую мне нужно использовать для рабочего процесса. Единственное, что мне нужно от этой записи, это ID.

public String GetFeeId(WorkFlowHelper workFlowHelper, CodeActivityContext executionContext)
    {
        String feeRecordId = string.Empty;
        try
        {
            var primaryEntity = workFlowHelper.workFlowContext.PrimaryEntityId;
            if (primaryEntity != null)
            {
                feeRecordId = workFlowHelper.workFlowContext.PrimaryEntityId.ToString();
            }
            if (primaryEntity == null)
            {
                workFlowHelper.WorkFlowError("Primary Entity is null");
            }
        }
        catch (Exception ex)
        {
            if (workFlowHelper.debugMessagesOn == true)
            {
                Console.WriteLine("Id is blank!");
            }
            workFlowHelper.WorkFlowError(ex.ToString());
            throw new InvalidPluginExecutionException("Error occured in ConnectionInfo Method:" + ex.Message);
        }
        return feeRecordId;

Любые идеи о том, что может быть причиной этого?

Спасибо,


person Bactos    schedule 14.02.2014    source источник


Ответы (2)


Похоже, что у CRM могут быть проблемы с загрузкой вашей сборки или ее путают с более старой версией той же сборки.

Проверяете ли вы версии своей сборки рабочего процесса во время ее разработки и развертывания, и подписывается ли сборка ключом строгого имени?

В Visual Studio на вкладке «Проект» убедитесь, что вы увеличили номер сборки/редакции. См. эту статью: http://gonzaloruizcrm.blogspot.com/2011/08/assembly-versioning-in-crm-2011.html

Если вы не увеличите сборку/редакцию, CRM может не увидеть вашу обновленную сборку как «обновление» и может попытаться использовать более старую кэшированную версию, что может вызвать всевозможные проблемы.

Вы также можете попробовать полностью отменить регистрацию сборки, а затем зарегистрировать последнюю версию. Возможно, вам также потребуется обновить рабочие процессы.

person Josh Painter    schedule 14.02.2014
comment
Я не использовал номера ревизий, попробую и посмотрю, поможет ли это. Однако я удалил и переустановил сборку; Я подписал сборку. Возможно, имеет смысл путать версии моей сборки, но даже после того, как я удалил и снова зарегистрировал сборку? - person Bactos; 15.02.2014
comment
Я добавил номера ревизий, удалил сборку и переустановил ее, и она все еще не меняется: статус все еще находится на «Ожидание» и остается там. Любые другие предложения? - person Bactos; 18.02.2014
comment
Пробовали ли вы включить трассировку для асинхронной службы и посмотреть, появится ли ошибка в журнале трассировки? - person Josh Painter; 19.02.2014
comment
Я включил трассировку, но не знал, как ее посмотреть. Я только что обнаружил, что могу просматривать все системные задания и сообщения, которые у него были. Спасибо! Вы должны добавить это к своему ответу, поскольку именно это позволило мне увидеть, что происходит. - person Bactos; 19.02.2014

Вот самый простой способ (вынул свой WorkFlowHelper)..

public String GetFeeId(CodeActivityContext executionContext)
{
    // Create the context
    var context = executionContext.GetExtension<IWorkflowContext>();
    var feeRecordId = context.PrimaryEntityId
}
person Shane_Yo    schedule 09.04.2015