2013-03-12 68 views
1

我正在尝试构建将联系人添加到营销列表的工作流程。将联系人添加到CRM2011上的营销列表

一切似乎都很好,但是当代码完成解雇后,我进入市场营销名单 - >会员联系人不在列表中。

public class ContactToMList : CodeActivity 
    { 
     [Input("Contatto")] 
     [ReferenceTarget("contact")] 
     public InArgument<EntityReference> contact { get; set; } 

     [Input("Marketing List")] 
     [ReferenceTarget("list")] 
     public InArgument<EntityReference> MList { get; set; } 

     [Input("Inserimento")] 
     public InArgument<bool> inserimento { get; set; } 

     bool action = false; 
     private static IOrganizationService myService = null; 
     private static Log_Entity log = new Log_Entity(string.Empty, myService); 
     protected override void Execute(CodeActivityContext executionContext) 
     { 
      try 
      { 
       ITracingService tracingService = executionContext.GetExtension<ITracingService>(); 

       // Create the context 
       IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>(); 

       IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>(); 

       // Create the Organiztion service 
       IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 
       myService = service; 
       log.WriteLog(""); 
       // Get the target entity from the context 
       Entity target = (Entity)context.InputParameters["Target"]; 


       Guid contactiId = contact.Get<EntityReference>(executionContext).Id; 
       Guid ListId = MList.Get<EntityReference>(executionContext).Id; 
       bool insert = inserimento.Get<bool>(executionContext); 


       // Prepare DataContext by using AutoGenerated cs file 
       XrmDataContext datacontext = new XrmDataContext(service); 

       var MyContact = (from c in datacontext.ContactSet where c.ContactId == contactiId select c.Id).ToArray(); 
       var MyList = (from l in datacontext.ListSet where l.Id == ListId select l).ToList().FirstOrDefault(); 
       // tutti i membri della lista di marketing 
       var members = (from m in datacontext.ListMemberSet where m.ListId.Id == MyList.ListId select m.EntityId.Id).ToArray(); 




       foreach (Guid id in members) 
        if (MyContact.FirstOrDefault() == id) 
         action = true; 



       if (insert && !action) 
       { 

        AddListMembersListRequest AddMemberRequest = new AddListMembersListRequest(); 

        AddMemberRequest.ListId = ListId; 
        AddMemberRequest.MemberIds = MyContact; 
        // Use AddListMembersListReponse to get information about the request execution 

        AddListMembersListResponse AddMemberResponse = service.Execute(AddMemberRequest) as AddListMembersListResponse; 
        //service.Update(MyList); 

       } 
       else if (!insert && action) 
       { 

        RemoveMemberListRequest RemoveMemberRequest = new RemoveMemberListRequest(); 
        RemoveMemberRequest.ListId = ListId; 
        RemoveMemberRequest.EntityId = MyContact.FirstOrDefault(); 
        // Use AddListMembersListReponse to get information about the request execution 
        RemoveMemberListResponse RemoveMemberResponse = service.Execute(RemoveMemberRequest) as RemoveMemberListResponse; 
        // service.Update(MyList); 

       } 

      } 
      catch (Exception ex) 
      { 
       log.WriteLog(ex.Message); 

      } 

     } 
    } 
+0

这段代码可以用更多的Linq语句进行改进......但是,它也看起来像是调试非常简单。你有没有看过代码,看看'service.Execute('被调用了吗?' – 2013-03-12 15:31:39

+0

'是否可以移除,但是不要添加任何账号? – user1200566 2013-03-12 16:10:56

+0

如果你对回复感到满意,请检查它是一个答案,否则,请告诉缺少的东西。 – 2013-03-12 19:04:51

回答

1

是不是在设置后删除了AddMemberRequest.MemberIds的值?

编辑: 好吧,我想我这次发现了它。您的public InArgument<bool> inserimento { get; set; }可能是罪魁祸首。

在这种情况下,您的工作流程活动期望在调用此工作流程的上游定义该工作流程活动。对于插入和移除实例,它很可能是静态设置并且永远不会更改。如果这是真的,那么对于插入案例来说,它实质上是硬编码的,这使else if (!insert && action)评估为移除True,并且if (insert && !action)评估为插入的False。

由于代码确实适用于删除,因此假设bool action正在工作是合理的;因此,我会先看看另一个bool变量。

让我知道我是否错过了它。 (或者如果我是对的,我不会介意绿色的复选标记。)

+0

不!对不起,我的错误复制/粘贴!这是好的代码。:) – user1200566 2013-03-12 15:24:30