Dynamics crm 2011 无法使用插件在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

下面是我在CRM 2011 online中创建联系人时使用的代码。它不会抛出任何错误,但也不会创建任何联系人。我已经在电子邮件实体的操作后创建事件上注册了插件。我不知道我是否错过了什么。任何帮助都将不胜感激

公共类注册插件: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;
    }