Данный ключ отсутствует в словаре - PullRequest
1 голос
/ 25 января 2012

Я разрабатываю плагин в crm 5.0 для извлечения даты "ct_valuedate" из сущности с именем "ct_marketvalue", форматирования и сохранения в поле с именем "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 голосов
/ 25 января 2012

Несколько замечаний о вашем коде.

  1. Вы должны проверить в своем коде, что _context.PostEntityImages содержит "ct_marketvalue". Можно либо забыть зарегистрироваться, либо сделать ошибку в названии изображения.

  2. Возможно, лучше использовать .ToEntity, а не обращаться к атрибутам с помощью .Attributes ["ct_valuedate"].

  3. Я не уверен, какова цель написанного вами плагина, но похоже, что это плагин после стадии, и он обновляет тот же экземпляр сущности, который был в InputParameters. Может быть лучше сделать этот плагин предварительным этапом и обновить значение непосредственно в InputParameters. Потому что, если нет исключения «Указанный ключ отсутствует в словаре», оно вызовет бесконечный цикл. Вам нужно будет проверить контекст. Глубина.

...