Dynamics crm 2011 无法使用插件在CRM 2011 Online中创建联系人
下面是我在CRM 2011 online中创建联系人时使用的代码。它不会抛出任何错误,但也不会创建任何联系人。我已经在电子邮件实体的操作后创建事件上注册了插件。我不知道我是否错过了什么。任何帮助都将不胜感激Dynamics crm 2011 无法使用插件在CRM 2011 Online中创建联系人,dynamics-crm-2011,crm,Dynamics Crm 2011,Crm,下面是我在CRM 2011 online中创建联系人时使用的代码。它不会抛出任何错误,但也不会创建任何联系人。我已经在电子邮件实体的操作后创建事件上注册了插件。我不知道我是否错过了什么。任何帮助都将不胜感激 公共类注册插件:IPlugin { 私人组织服务上下文oContext; public void Execute(IServiceProvider服务提供程序) { Microsoft.Xrm.Sdk.IPluginExecutionContext上下文=(Microsoft.Xrm.Sdk
公共类注册插件:IPlugin
{
私人组织服务上下文oContext;
public void Execute(IServiceProvider服务提供程序)
{
Microsoft.Xrm.Sdk.IPluginExecutionContext上下文=(Microsoft.Xrm.Sdk.IPluginExecutionContext)
GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
IOOrganizationServiceFactory工厂=(IOOrganizationServiceFactory)服务提供者.GetService(类型(IOOrganizationServiceFactory));
IOOrganizationService=factory.CreateOrganizationService(context.UserId);
oContext=新的OrganizationServiceContext(服务);
//service.EnableProxyTypes();
if(context.InputParameters.Contains(“目标”)&&
context.InputParameters[“Target”]是实体)
{
尝试
{
实体=(实体)上下文。输入参数[“目标”];
如果(entity.LogicalName==“电子邮件”)
{
Guid\u联系人ID;
var contact=新联系人()
{
FirstName=“玫琳凯”,
LastName=“安徒生”,
地址1_Line1=“23市场街”,
地址1_City=“Sammamish”,
地址1_StateOrProvince=“MT”,
地址1_PostalCode=“99999”,
电话1=“12345678”,
EMailAddress1=”marykay@contoso.com",
Id=Guid.NewGuid()
};
_contactId=contact.Id;
oContext.AddObject(联系人);
}
}
捕获(异常x)
{
抛出新异常(x.ToString()+“\n”+x.InnerException.ToString());
}
}
}
}
我可以看出您缺少一条语句,即:
oContext.AddObject(联系人);
oContext.SaveChanges();// 它确实解决了问题,但现在抛出了另一个错误:
未处理的异常:System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault,Microsoft.Xrm.Sdk,Version=5.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35]:插件出现意外异常(执行):Microsoft.Crm.Sdk.Samples.RegistrationPlugin:System.Exception:Microsoft.Xrm.Sdk.SaveChangesException:处理此请求时出错。-->System.TypeLoadException:重写成员时违反了继承安全规则:“Microsoft.Crm.Services.Utility.DeviceRegistrationFailedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)”。重写方法的安全可访问性必须与被重写方法的安全可访问性匹配。
位于System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly程序集,ObjectHandleOnStack retTypes)
位于System.Reflection.RuntimeAssembly.GetExportedTypes()处
在Microsoft.Xrm.Sdk.KnownProxyTypesProvider.LoadKnownTypes(程序集)上
在Microsoft.Xrm.Sdk.KnownProxyTypesProvider.RegisterAssembly(程序集)上
在Microsoft.Xrm.Sdk.AssemblyBasedKnownProxyTypesProvider.GetTypeForName(字符串名称,程序集proxyTypesAssembly)
在
在我看来,这似乎是一个权利问题。你能告诉我我现在错过了什么吗
更新:我通过添加OwnerID=new EntityReference(“systemuser”,context.UserId)解决了这个问题。嗯,我认为您不需要填写ID字段,因为当您创建它时,CRM会向您发送ID
我不知道这是否能帮到你,因为我不是在建立联系,而是在制造事故。但我认为过程是一样的。所以我让你看看
私有Guid createCase(IOOrganizationService CrmService,实体电子邮件)
/*创建一个实体:此处为事件,但可以是联系人、帐户*/
Entity incident = new Entity("incident");
incident["title"] = email.Attributes["subject"].ToString();
incident["caseorigincode"] = new OptionSetValue(2);
EntityCollection ec = email.Attributes["from"] as EntityCollection;
Entity from = ec.Entities.FirstOrDefault();
incident["customerid"] = (EntityReference)from.Attributes["partyid"];
/*结束*/
tracingService.Trace("tracing 2.");
tracingService.Trace("tracing 3. ID: "+ caseid.ToString());
return caseid;
}
/*在这里,您可以在CRM中创建记录*/
Guid caseid = CrmService.Create(incident);
/*结束*/
tracingService.Trace("tracing 2.");
tracingService.Trace("tracing 3. ID: "+ caseid.ToString());
return caseid;
}