Dynamics crm 2011 将联系人添加到CRM2011上的营销列表中

Dynamics crm 2011 将联系人添加到CRM2011上的营销列表中,dynamics-crm-2011,crm,Dynamics Crm 2011,Crm,我正在尝试建立一个工作流,将联系人添加到营销列表中 一切似乎都很好,但当代码触发完毕,我进入营销列表->成员,联系人不在列表中 公共类联系人列表:CodeActivity { [输入(“Contatto”)] [参考目标(“联系”)] 公共InArgument联系人{get;set;} [输入(“营销列表”)] [参考目标(“列表”)] 公共InArgument MList{get;set;} [输入(“插入”)] 公共InArgument插入{get;set;} 布尔动作=假; 私有静态IOR

我正在尝试建立一个工作流,将联系人添加到营销列表中

一切似乎都很好,但当代码触发完毕,我进入营销列表->成员,联系人不在列表中

公共类联系人列表:CodeActivity
{
[输入(“Contatto”)]
[参考目标(“联系”)]
公共InArgument联系人{get;set;}
[输入(“营销列表”)]
[参考目标(“列表”)]
公共InArgument MList{get;set;}
[输入(“插入”)]
公共InArgument插入{get;set;}
布尔动作=假;
私有静态IOR组织服务myService=null;
私有静态日志\实体日志=新日志\实体(string.Empty,myService);
受保护的覆盖无效执行(CodeActivityContext executionContext)
{
尝试
{
ITracingService tracingService=executionContext.GetExtension();
//创建上下文
IWorkflowContext=executionContext.GetExtension();
IOOrganizationServiceFactory服务工厂=executionContext.GetExtension();
//创建组织服务
IOOrganizationService=serviceFactory.CreateOrganizationService(context.UserId);
myService=服务;
log.WriteLog(“”);
//从上下文中获取目标实体
实体目标=(实体)上下文。输入参数[“目标”];
Guid contactiId=contact.Get(executionContext).Id;
Guid ListId=MList.Get(executionContext.Id);
bool insert=inserimento.Get(executionContext);
//使用自动生成的cs文件准备DataContext
XrmDataContext=新的XrmDataContext(服务);
var MyContact=(来自datacontext.ContactSet中的c,其中c.ContactId==contactiId选择c.Id).ToArray();
var MyList=(从datacontext.ListSet中的l开始,其中l.Id==ListId选择l);
//市场营销部
var members=(从datacontext.ListMemberSet中的m开始,其中m.ListId.Id==MyList.ListId选择m.EntityId.Id).ToArray();
foreach(成员中的Guid id)
if(MyContact.FirstOrDefault()==id)
行动=正确;
如果(插入&&!操作)
{
AddListMembersListRequest AddMemberRequest=新的AddListMembersListRequest();
AddMemberRequest.ListId=ListId;
AddMemberRequest.MemberId=MyContact;
//使用AddListMembersListResponse获取有关请求执行的信息
AddListMembersResponse AddMemberResponse=服务。作为AddListMembersResponse执行(AddMemberRequest);
//服务更新(MyList);
}
else if(!插入和操作)
{
RemoveMemberListRequest RemoveMemberRequest=新RemoveMemberListRequest();
RemoveMemberRequest.ListId=ListId;
RemoveMemberRequest.EntityId=MyContact.FirstOrDefault();
//使用AddListMembersListResponse获取有关请求执行的信息
RemoveMemberListResponse RemoveMemberResponse=服务。作为RemoveMemberListResponse执行(RemoveMemberRequest);
//服务更新(MyList);
}
}
捕获(例外情况除外)
{
log.WriteLog(例如消息);
}
}
}

设置
AddMemberRequest.MemberIds
后,您是否正在擦除它的值

编辑: 好的,我想这次我找到了。你的
public-inagrament-inserimento{get;set;}
很可能是罪魁祸首

在这种情况下,您的工作流活动希望在调用此工作流的上游定义此工作流。对于Insert和Remove实例,它很可能是静态设置的,并且从未更改过。如果这是真的,那么它基本上是针对Insert案例进行硬编码的,这使得
else If(!Insert&&action)
对于Remove求值为true,而
If(Insert&&action)
对于Insert求值为False

由于代码确实可以用于删除,因此可以合理地假设
bool操作
正在工作;因此,我将首先研究另一个bool变量


如果我错过了,请告诉我。(或者,如果我是对的,我不介意绿色复选标记。)

设置后,您是否正在删除
AddMemberRequest.MemberIds
的值

编辑: 好的,我想这次我找到了。你的
public-inagrament-inserimento{get;set;}
很可能是罪魁祸首

在这种情况下,您的工作流活动希望在调用此工作流的上游定义此工作流。对于Insert和Remove实例,它很可能是静态设置的,并且从未更改过。如果这是真的,那么它基本上是针对Insert案例进行硬编码的,这使得
else If(!Insert&&action)
对于Remove求值为true,而
If(Insert&&action)
对于Insert求值为False

由于代码确实可以用于删除,因此可以合理地假设
bool操作
正在工作;因此,我将首先研究另一个bool变量


如果我错过了,请告诉我。(或者如果我是对的,我不会介意绿色的复选标记。)

不!对不起,我的复制/粘贴错误!这就是好代码。:)不对不起,我的复制/粘贴错误!这就是好代码。:)这段代码可以用更多的Linq语句进行优化……但是,它看起来也很容易调试。您是否浏览了代码以查看值是否正确