Dynamics crm 2011 字典插件CRM 2011 online中不存在给定的密钥

Dynamics crm 2011 字典插件CRM 2011 online中不存在给定的密钥,dynamics-crm-2011,Dynamics Crm 2011,谁能告诉我我做错了什么,我已经试了一个多星期了 遵循代码 插件出现意外异常(执行): Microsoft.Crm.Sdk.Samples.ProjectTotalAmount: System.Collections.Generic.KeyNotFoundException:未找到给定的密钥 出现在字典里 namespace Microsoft.Crm.Sdk.Samples { 公共类项目总额:IPlugin { public void Execute(IServiceProvider服务提供程

谁能告诉我我做错了什么,我已经试了一个多星期了

遵循代码

插件出现意外异常(执行): Microsoft.Crm.Sdk.Samples.ProjectTotalAmount: System.Collections.Generic.KeyNotFoundException:未找到给定的密钥 出现在字典里

namespace Microsoft.Crm.Sdk.Samples
{
公共类项目总额:IPlugin
{
public void Execute(IServiceProvider服务提供程序)
{
Microsoft.Xrm.Sdk.IPluginExecutionContext上下文=(Microsoft.Xrm.Sdk.IPluginExecutionContext)serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
if(context.InputParameters.Contains(“目标”)&&
context.InputParameters[“Target”]是实体)
{
IOOrganizationServiceFactory serviceFactory=(IOOrganizationServiceFactory)serviceProvider.GetService(类型为(IOOrganizationServiceFactory));
IOOrganizationService=serviceFactory.CreateOrganizationService(context.UserId);
//创建服务上下文
var servicecoxt=新的OrganizationServiceContext(服务);
//ITracingService tracingService=localContext.tracingService;
实体=(实体)上下文。输入参数[“目标”];
if(entity.LogicalName==“新建项目”)
{
Guid projectGUID=((EntityReference)实体[“新项目]).Id;
实体a=service.Retrieve(“new_project”,((EntityReference)Entity[“new_project”]).Id,new ColumnSet(true));
小数总数=0;
尝试
{
//fetchxml以获取estimatedvalue的总和
string new\u amount\u sum=string.Format(@)
“,a.Id);
EntityCollection new_amount_sum_result=service.RetrieveMultiple(新的FetchExpression(new_amount_sum));
foreach(新金额和结果实体中的var c)
{
totalAmount=((Money)((别名Value)c[“新金额”).Value);
}
//更新帐户上的字段
实体acc=新实体(“新_项目”);
acc.Id=a.Id;
根据属性添加(“新金额”,新金额(总金额));
服务更新(acc);
}
捕获(FaultException-ex)
{
抛出新的InvalidPluginExecutionException(“插件中发生错误。”,ex);
}
}
}
}
}   
}
插件的设置:

验证后 同步执行模式
服务器部署

在我们开始查看您的代码之前,有几点建议可以帮助您

  • 此错误通常表示代码引用的属性不存在(或没有值)
  • 你还没有说你的插件注册在哪条消息上。这可能会影响运行时的可用参数
  • 您已经注释掉了
    tracingService
    变量,但这至少可以帮助您了解代码的进展情况。恢复它并添加一些类似这样的行来跟踪失败前的进度。此信息将写入客户端异常对话框中提供给您的错误日志中:

    tracingService.Trace("Project Id is {0}", projectGUID);` 
    

  • 以下行似乎完全多余,因为您只使用了
    a
    中的属性
    Id
    ,并且该属性已作为
    entity.Id
    存在:

    Entity a=service.Retrieve(“new_project”,((EntityReference)Entity[“new_project]”)Id,new ColumnSet(true))

    tracingService.Trace("Number of returned records: {0}", new_amount_sum_result.Entities.Count);`