2013-08-14 5 views
0

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

Благодаря

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 
using System.Collections.ObjectModel; 

using System.Activities; 
using Microsoft.Xrm.Sdk; 
using Microsoft.Xrm.Sdk.Workflow; 
using Microsoft.Xrm.Sdk.Query; 
using Microsoft.Xrm.Sdk.Messages; 

using System.Diagnostics; 


namespace TestWflow 
{ 

    public class SampleCustomActivity : CodeActivity 
    { 


     protected override void Execute(CodeActivityContext executionContext) 
     { 
      //Activity code 

      // Get the context service. 
      IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>(); 
      IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>(); 

      // Use the context service to create an instance of IOrganizationService. 
      IOrganizationService service = serviceFactory.CreateOrganizationService(context.InitiatingUserId); 

      if (context.Depth == 1) 
      { 

       Entity targetCont = null; 
       targetCont = (Entity)context.InputParameters["Target"]; 
       Guid contID = targetCont.Id; 
       ColumnSet contCols = new ColumnSet("jobtitle"); 

       targetCont = service.Retrieve("contact", contID, contCols); 

       targetCont.Attributes["jobtitle"] = "test jobtitle here"; 
       service.Update(targetCont); 


      } 



     } 



    } 


} 
+0

Как обжиг рабочий процесс? – Bvrce

+0

Я запускаю его вручную в минуту. – user2463758

+0

Попробуйте новый ColumnSet (true) – Bvrce

ответ

1

Я думаю, что ваш код дует на: targetCont = (Entity) context.InputParameters [ "Target"];

Мой код плагина всегда отличался от моего кода рабочего процесса тем, как он получает данные.

Так попытайтесь добавить код:

context.PrimaryEntityId

В конце концов ваш код должен выглядеть следующим образом:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 
using System.Collections.ObjectModel; 

using System.Activities; 
using Microsoft.Xrm.Sdk; 
using Microsoft.Xrm.Sdk.Workflow; 
using Microsoft.Xrm.Sdk.Query; 
using Microsoft.Xrm.Sdk.Messages; 

using System.Diagnostics; 


namespace TestWflow 
{ 

    public class SampleCustomActivity : CodeActivity 
    { 
     protected override void Execute(CodeActivityContext executionContext) 
     { 
      //Activity code 

      // Get the context service. 
      IWorkflowContext context = executionContext.GetExtension<IWorkflowContext> (); 
      IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>(); 

      // Use the context service to create an instance of IOrganizationService. 
      IOrganizationService service = serviceFactory.CreateOrganizationService(context.InitiatingUserId); 

      if (context.Depth == 1) 
      { 
       Guid contID = context.PrimaryEntityId; 
       ColumnSet contCols = new ColumnSet("jobtitle"); 

       var entity = service.Retrieve("contact", contID, contCols); 

       entity.Attributes["jobtitle"] = "test jobtitle here"; 
       service.Update(entity); 


      } 



     } 



    } 


} 
+0

Благодарим за код, но когда я попытаюсь зарегистрировать плагин, я получаю следующую ошибку: Необработанное исключение: System.ServiceModel.FaultException'1 [[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35]]: Свойство Target имеет тип EntityReference, но не содержит атрибута ReferenceTarget – user2463758

+0

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

+0

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

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