我正在使用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;
}
}
}
}
答案 0 :(得分:0)
关于您的代码的几点注释。
您应该检查_context.PostEntityImages包含“ct_marketvalue”的代码。可能忘记注册或在图像名称中出错。
可能更好用.ToEntity而不是使用.Attributes [“ct_valuedate”]访问属性。
我不确定你编写的插件的目的是什么,但它看起来是post stage插件,它更新了InputParameters中的同一实体实例。可能更好地使这个插件前期并直接在InputParameters中更新值。因为,如果没有“给定的密钥不存在于字典中”异常,它将导致无限循环。您需要检查context.Depth。