2015-09-24 1 views
2

Мы работаем на CRM 2013 по требованию. Я пишу плагин, который срабатывает при обновлении поля в элементе Quote.Записать плагин CRM, который срабатывает при обновлении поля

Итак, я зарегистрировал свой плагин в сообщении «Обновить». Затем событие «Пост-операция». (Я пытался выполнить предварительную операцию, но все равно не повезло)

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

Однако моя проблема в том, когда поле обновляется, мой плагин никогда не срабатывает. Я просто просто помещаю InvalidPluginExecutionException в свой код, но по какой-то причине он никогда не срабатывает .... Любые идеи? Благодарю.

Вот скриншот моего шага плагина:

Plugin step

Вот мой код:

var trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); 

     // The InputParameters collection contains all the data passed in the message request. 
     var targetEntity = context.GetParameterCollection<Entity>(context.InputParameters, "Target"); 

     if (targetEntity == null) 
      throw new InvalidPluginExecutionException(OperationStatus.Failed, "Target Entity cannot be null"); 

     if (!context.OutputParameters.Contains("id")) 
      return; 

     Guid QuoteId = (Guid)targetEntity.Attributes["quoteid"]; 

     var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
     var service = serviceFactory.CreateOrganizationService(context.UserId); 

     var contractShellEntity = new Entity(); 
     contractShellEntity = new Entity("new_); 

     //assign the portfolio 
     if (targetEntity.Attributes.Contains(Schema.Quote.Portfolio)) 
     { 
      var quotePortfolio = (EntityReference)targetEntity.Attributes[Schema.Quote.Portfolio]; 
      contractShellEntity[Schema.new_ContractShell.PortfolioName] = new EntityReference(quotePortfolio.LogicalName, quotePortfolio.Id); 
     } 

     var contractShellId = service.Create(contractShellEntity); 
     throw new InvalidPluginExecutionException(OperationStatus.Failed, "I created New Contract Shell"); 

     //Creating relationship between Contract Shell and the newly created Accounts 
     var quoteContractReferenceCollection = new EntityReferenceCollection(); 
     var quoteContractRelatedEntity = new EntityReference 
     { 
      Id = contractShellId, 
      LogicalName = contractShellEntity.LogicalName 
     }; 
     quoteContractReferenceCollection.Add(quoteContractRelatedEntity); 
     var quoteContractReferenceCollectionRelRelationship = new Relationship 
     { 
      SchemaName = Schema.new_ContractShell.ContractQuoteRelationship 
     }; 
     service.Associate("quote", QuoteId, quoteContractReferenceCollectionRelRelationship, quoteContractReferenceCollection); 
+0

вам будет хорошо, чтобы показать, как выглядит ваша регистрация плагина. Основываясь на том, как вы зарегистрировали его, может быть множество причин, по которым ** появляется **, чтобы не запускать этот плагин. –

+0

Какое сообщение об ошибке? –

+0

Нет сообщения об ошибке. Плагин просто просто не запускается. Я попытался помещать сообщение InvalidPluginExecutionException выше в начале кода, но так и не уволился ... Я попробовал как «пост-операцию», так и «предварительную операцию», но все равно не повезло. – ichachan

ответ

0

Вам нужно зарегистрировать не только плагин, но в SDKMessageProcessingStep. Кроме того, вы должны реализовать метод Execute в своем плагине, чтобы иметь возможность зарегистрировать его, так что либо вам не хватает кода в вашем фрагменте, либо ваш код является проблемой.
Кроме того, ваше InvalidPluginExecutionException вложено после нескольких проверок. Хорошая вероятность того, что у вас нет выходных параметров, если вы не знаете, как зарегистрировать плагин, поэтому ваш код действительно вернется, прежде чем вы ударите исключение.

+0

Спасибо Джозефу. Я действительно добавил в свой код службы «create» и «associate». Я также зарегистрировал шаг в плагине, попробовал как «пост-операцию», так и «предварительную операцию», но все равно не повезло. Я попытался помещать сообщение InvalidPluginExecutionException выше в начале кода, но никогда не запускается ... все еще тупик – ichachan

+0

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

+0

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