CRM 2011 KeyNotFoundException异常

Yaq*_*mad 2 keynotfoundexception query-expressions dynamics-crm-2011

我是CRM开发的新手.我有一个自定义实体"客户".该实体有一个名为"defaultcustomer"的字段,可以是TRUE或FALSE.我正在使用插件,我需要为所有"客户"将"defaultcustomer"设置为FALSE.我这样做如下:

事实:

我已经为实体"客户"本身注册了插件.因此,当实体"客户"更新时,插件将触发.

private void MakeAllNonDefault()
{

    try
    {
        QueryExpression query = new QueryExpression("customer");
        query.ColumnSet = new ColumnSet("defaultcustomer");

        EntityCollection retrieved = service.RetrieveMultiple(query);

        foreach (Entity myCustomer in retrieved.Entities)
        {

            myCustomer["defaultcustomer"] = false;
            service.Update(myCustomer);
        }

    }
    catch (Exception ex)
    {
        throw new InvalidPluginExecutionException("An error occurred in MakeAllNonDefault(): " + ex.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

错误: 它会在此行引发错误:

myCustomer["defaultcustomer"] = false;

System.Collections.Generic.KeyNotFoundException: 
The given key was not present in the dictionary. 
Run Code Online (Sandbox Code Playgroud)

glo*_*rob 7

该错误意味着特定字段不存在于属性集合中.在CRM中,仅包括已设置或更新的属性.

尝试类似的东西:

foreach (Entity myCustomer in retrieved.Entities)
{
    if (myCustomer.Attributes.ContainsKey("defaultcustomer"))
    {
        myCustomer["defaultcustomer"] = false;
    }
    else
    {
        myCustomer.Attributes.Add("defaultcustomer", false);
    }
    service.Update(myCustomer);
}
Run Code Online (Sandbox Code Playgroud)

  • @PeterMajeed - 据我所知,如果该字段中没有值,则不会返回. (2认同)