Dynamics crm 2011 工作流上下文系统.NullReferenceException
在我的工作流程中,从营销列表中插入或删除联系人。根据输入的布尔参数值。 正确->插入 ->如果有联系 然后返回 ->否则 错误->删除 ->如果不存在 然后返回 本WFA以事件为基础运行 在第一次点火时,它工作正常,移除或添加触点。但我重新运行更改布尔值,得到以下异常消息: 工作流因错误而暂停:未处理的异常: System.NullReferenceException:对象引用未设置为实例 指一个物体。在 ContactToMList.ContactToMList.Execute(CodeActivityContext 执行上下文)在 System.Activities.CodeActivity.InternalExecute(ActivityInstance 实例、活动执行器执行器、书签管理器书签管理器) 在 System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor 执行者、书签管理器书签管理器、位置结果位置) 这似乎与上下文无关Dynamics crm 2011 工作流上下文系统.NullReferenceException,dynamics-crm-2011,dynamics-crm,Dynamics Crm 2011,Dynamics Crm,在我的工作流程中,从营销列表中插入或删除联系人。根据输入的布尔参数值。 正确->插入 ->如果有联系 然后返回 ->否则 错误->删除 ->如果不存在 然后返回 本WFA以事件为基础运行 在第一次点火时,它工作正常,移除或添加触点。但我重新运行更改布尔值,得到以下异常消息: 工作流因错误而暂停:未处理的异常: System.NullReferenceException:对象引用未设置为实例 指一个物体。在 ContactToMList.ContactToMList.Execute(CodeAct
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using System.Activities;
using ContactToMList;
namespace ContactToMList
{
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 string _logs = string.Empty;
private static IOrganizationService myService = null;
private static string _separataore = "\r\n";
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
// var target = context.InputParameters["EntityId"];
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();
if (MyList.MemberType == 2)
{
if (MyList.Type.Value == false)
{
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);
}
}
else
{
tracingService.Trace("Stai cercando di inserire un contatto in una lista di Marketing che non è statica.");
_logs += "Stai cercando di inserire un contatto in una lista di Marketing che non è statica." + _separataore;
return;
}
}
else
{
tracingService.Trace("Stai cercando di inserire un enittà diversa da un contatto.");
_logs += "Stai cercando di inserire un enittà diversa da un contatto." + _separataore;
return;
}
}
catch (Exception ex)
{
log.WriteLog(ex.Message);
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Microsoft.Crm.Sdk.Messages;
使用Microsoft.Xrm.Sdk;
使用Microsoft.Xrm.Sdk.Workflow;
使用系统活动;
使用联系人列表;
名称空间联系人列表
{
公共类联系人列表:CodeActivity
{
[输入(“Contatto”)]
[参考目标(“联系”)]
公共InArgument联系人{get;set;}
[输入(“营销列表”)]
[参考目标(“列表”)]
公共InArgument MList{get;set;}
[输入(“插入”)]
公共InArgument插入{get;set;}
布尔动作=假;
私有静态字符串_logs=string.Empty;
私有静态IOR组织服务myService=null;
私有静态字符串\u separataore=“\r\n”;
私有静态日志\实体日志=新日志\实体(string.Empty,myService);
受保护的覆盖无效执行(CodeActivityContext executionContext)
{
尝试
{
ITracingService tracingService=executionContext.GetExtension();
//创建上下文
IWorkflowContext=executionContext.GetExtension();
IOOrganizationServiceFactory服务工厂=executionContext.GetExtension();
//创建组织服务
IOOrganizationService=serviceFactory.CreateOrganizationService(context.UserId);
myService=服务;
log.WriteLog(“”);
//从上下文中获取目标实体
//var target=context.InputParameters[“EntityId”];
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();
if(MyList.MemberType==2)
{
if(MyList.Type.Value==false)
{
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);
}
}
其他的
{
tracingService.Trace(“在非静态市场营销中的列表中插入的Stai cercando和contatto”);
_logs+=“在非静态市场营销的列表中插入的内容。”+\u separataore;
返回;
}
}
其他的
{
tracingService.Trace(“水资源管理局”(Stai cercando di inserire un enittádiversa da un contatto.);
_logs+=“水在水中的流动。”+\u separatore;
返回;
}
}
捕获(例外情况除外)
{
CrmConnection connection = CrmConnection.Parse("Url=http://localhost/trainingorg1; Domain=; Username=; Password=;");
OrganizationService service = new OrganizationService(connection);
string template = "http://localhost/main.aspx?etn={0}&pagetype=entityrecord&id=%7B{1}%7D";
using (TrainingContext svc = new TrainingContext(service))
{
svc.MergeOption = Microsoft.Xrm.Sdk.Client.MergeOption.NoTracking;
training_customer customer = svc.training_customerSet.FirstOrDefault(c => c.training_name == "George.Lucas");
customer.training_SocialSecurityNumber = "123-45-6789";
svc.Update(customer);
#region interaction activity
//try
//{
// training_customer customer = new training_customer
// {
// EmailAddress = "George.Lucas@Force.net",
// training_name = "George.Lucas",
// training_UniqueCustomerIdentifier = "George.Lucas"
// };
// customer.Id = svc.Create(customer);
// training_interactiontypemaster typeMaster = new training_interactiontypemaster
// {
// training_Description = "Indicates an Interaction initiated because a Customer needed to update an Address",
// training_InteractionTypeValue = "Address Update"
// };
// typeMaster.Id = svc.Create(typeMaster);
// training_interaction interaction = new training_interaction
// {
// training_name = "Command Prompt",
// training_Customer = customer.ToEntityReference(),
// training_Description = typeMaster.training_Description,
// training_InteractionType = typeMaster.ToEntityReference()
// };
// interaction.Id = svc.Create(interaction);
// EntityReference reference = interaction.ToEntityReference();
// customer.training_Interaction = reference;
// svc.Update(customer);
// training_interactionactivity activity = new training_interactionactivity
// {
// training_ActivityName = "Customer Update",
// training_Description = "Updating Customer: " + customer.training_name,
// training_Interaction = reference,
// training_Entity = string.Format(template, customer.LogicalName, customer.Id)
// };
// activity[customer.LogicalName] = customer.ToEntityReference();
// svc.Create(activity);
// training_address address = new training_address
// {
// training_City = "City",
// training_Country = "Country",
// training_County = "County",
// training_Interaction = reference,
// training_Street1 = "Street 1",
// training_Street2 = "Street 2"
// };
// address.Id = svc.Create(address);
// training_interactionactivity activityTwo = new training_interactionactivity
// {
// training_Address = address.ToEntityReference(),
// training_ActivityName = "Address Update",
// training_Description = "Updating the Address for Customer: " + customer.training_name,
// training_Interaction = reference,
// training_Entity = string.Format(template, address.LogicalName, address.Id)
// };
// //activityTwo[address.LogicalName] = new CrmEntityReference(training_address.EntityLogicalName, addressId);
// svc.Create(activityTwo);
//}
//catch (Exception e)
//{
// Console.WriteLine(e.ToString());
//}
#endregion
}