CRM 2011 Pre-Operation Update поле поиска связанных объектов - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь обновить связанную запись в подключаемом модуле обновления перед операцией CRM 2011. Простой запрос извлекает набор связанных объектов на основе пары параметров, а затем каждый объект из результирующего запроса выполняет поиск в наборе связанных объектов. Тем не менее, при возникновении исключения генерируется предложение InvalidCastException. Пройдя по коду, каждое из значений выглядит корректно, Руководства, где ожидается, и т. Д. Я отключил другие плагины, которые могут включать в себя цель и связанные объекты, но проблема все еще сохраняется. Соотношение между targetEntity и relatedEntity равно 1: N. Я подтвердил, что эта проблема не в том, что атрибут ожидает EntityReference, а не Guid во время прохождения.

Ниже приведен код для плагина, в котором я заменил имена реальных сущностей / атрибутов на более очевидные прокси (он использует файл класса плагина для разработчика): -

Entity targetEntity = (Entity)localContext.PluginExecutionContext.InputParameters["Target"];

        QueryExpression query = new QueryExpression
        {
            EntityName = "relatedEntity",
            Criteria =
            {
                Conditions =
                {
                    new ConditionExpression("testOptionSetAttribute", ConditionOperator.Equal, 100000004),
                    new ConditionExpression("parentEntityId", ConditionOperator.Null)
                }
            }
        };

        EntityCollection resultsCollection = localContext.OrganizationService.RetrieveMultiple(query);

        foreach (Entity result in resultsCollection.Entities)
        {
            result.Attributes["parentEntityId"] = targetEntity.Id;
            localContext.OrganizationService.Update(result);
        }

Любая помощь будет оценена.

Спасибо.

1 Ответ

2 голосов
/ 10 февраля 2012

Я согласен с Питером.

Это должно быть EntityReference, более того, это должно быть new EntityReference.

Попробуйте это:

result.Attributes["parentEntityId"] = new EntityReference(targetEntity.EntityLogicalName, targetEntity.Id);
...