2013-08-30 3 views
0

Я работаю над плагином CRM 2011, который меняет значение одного поля на объект учетной записи, если пользователь деактивирует учетную запись. Я потратил много времени на то, что не так, потому что я получил следующую ошибку каждый раз, когда я отключил какую-то учетную запись.Плагин CRM 2011 работает, но дает ошибку

Ошибка. Произошла ошибка. Повторите попытку. Если проблема не исчезнет, ​​проверьте сообщество Microsoft Dynamics CRM на наличие решения или обратитесь к администратору Microsoft Dynamics CRM вашей организации. Наконец, вы можете обратиться в службу поддержки Microsoft »

Но через некоторое время я заметил, что даже если ошибка моего плагина действительно работает отлично. Мой код находится ниже только в случае, если (заметьте, что мы называем наши счета в качестве клиентов)

Entity client = (Entity)context.InputParameters["Target"]; 

OptionSetValue state = (OptionSetValue)client["statecode"]; 

if (state.Value == 1) 
{ 
    OptionSetValue clientStatus = new OptionSetValue(100000000); 
    client["customertypecode"] = clientStatus;     
    service.Update(client); 
} 

Так ли кто-нибудь имеет какую-либо мысль, что может привести к этой проблеме? Если я отключу свой плагин и отключу любую учетную запись, он отлично работает без ошибок.

Мой плагин зарегистрирован на этапе предварительной операции синхронно.

Спасибо заранее!

+0

Невозможно увидеть что-то не так с вашим кодом. Можете ли вы поместить весь код плагина? Даже его стоит попробовать зарегистрировать плагин снова. – Scorpion

ответ

0

Когда ваш плагин подписался на сообщение SetState или SetStateDynamicEntity, предприятие не в IPluginExecutionContext.InputParameters["Target"].
Эти сообщения имеют три InputParameters:

  • "EntityMoniker" (EntityReference)
  • "Государство" (OptionSetValue)
  • "Статус" (OptionSetValue)

Так нет «Target ».

EntityReference clientRef = context.InputParameters["EntityMoniker"] as EntityReference; 
OptionSetValue newStateCode = context.InputParameters["State"] as OptionSetValue; 

if (newStateCode.Value == 1) 
{ 
    Entity updateClient = new Entity(clientRef.LogicalName); 
    updateClient.Id = clientRef.Id; 
    updateClient["customertypecode"] = new OptionSetValue(100000000); 

    service.Update(updateClient); 
} 

Когда ваш плагин подписался на Update сообщение:

Поскольку вы находитесь в стадии предварительной работы и целевой объект является фактическим Entity вы хотите обновить, почему вы называете service.Update? Просто добавьте свойство к целевому объекту и сделайте с ним ...

Entity client = (Entity)context.InputParameters["Target"]; 

OptionSetValue state = (OptionSetValue)client["statecode"]; 

if (state.Value == 1) 
{ 
    OptionSetValue clientStatus = new OptionSetValue(100000000); 
    client["customertypecode"] = clientStatus; 
} 
0

Итак, ваш плагин зарегистрирован в Pre-Operation сообщения SetStateDynamic? И все, что вы пытаетесь сделать, это обновить идентификатор customertypecode? Мое предположение, поскольку вы не показали свой код, заключается в том, что вы не получаете IOrganizationService из контекста плагина.

Смежные вопросы