给定的密​​钥不在字典中

时间:2012-01-24 21:44:50

标签: plugins dynamics-crm crm

我正在使用crm 5.0开发一个插件,从名为“ct_marketvalue”的实体中检索日期“ct_valuedate”,并在名为“ct_dateserial”的字段中格式化并保存

我在调试时遇到错误“字典中没有给定的密钥”

public class MarketValueDateFormatting : PluginBase
{
    protected override void ExecutePlugin()
    {

        try
        {

            switch (_crmMessage)
            {
                case CrmPluginMessageEnum.Create:


                    if (_context.InputParameters.Contains("ct_marketvalue"))
                    {
                        //Obtain the logical name of the entity
                        string moniker1 = ((EntityReference)_context.InputParameters["EntityMoniker"]).LogicalName;
                        //Verify that the target entity represents an Account.
                        //If not, this plug-in was not registered correctly.
                        if (moniker1.Equals("ct_marketvalue"))
                        {
                            Entity marketvalueimage = (Entity)_context.PostEntityImages["ct_marketvalue"];
                            Guid marketvalueid = marketvalueimage.Id;
                            if (marketvalueimage.Contains("ct_valuedate"))
                            {
                                DateTime dateserial = (DateTime)marketvalueimage.Attributes["ct_valuedate"];
                                String dateserialstring = dateserial.ToString("YYYYMMdd");


                                Ct_marketvalue marketvalue = new Ct_marketvalue();
                                marketvalue.Ct_dateserial = dateserialstring;
                                marketvalue.Id = marketvalueid;

                                _serviceContext.UpdateObject(marketvalue);

                            }
                        }
                    }

                    break;
                            }
        catch (Exception ex)
        {
            throw ex;
        }

    }

}

}

1 个答案:

答案 0 :(得分:0)

关于您的代码的几点注释。

  1. 您应该检查_context.PostEntityImages包含“ct_marketvalue”的代码。可能忘记注册或在图像名称中出错。

  2. 可能更好用.ToEntity而不是使用.Attributes [“ct_valuedate”]访问属性。

  3. 我不确定你编写的插件的目的是什么,但它看起来是post stage插件,它更新了InputParameters中的同一实体实例。可能更好地使这个插件前期并直接在InputParameters中更新值。因为,如果没有“给定的密钥不存在于字典中”异常,它将导致无限循环。您需要检查context.Depth。