Отсутствует атрибут FetchXML - PullRequest
0 голосов
/ 27 ноября 2018

При попытке извлечь объект из Dynamics CRM с помощью FetchXML один из атрибутов отсутствует.

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
  <entity name="sb_eventbooking">
    <attribute name="sb_name" />
    <attribute name="sb_bookeridname" />    < problem here
    <attribute name="createdon" />
    <atrribute ........

В файле FetchXML есть 18 атрибутов, но при запуске приложениядоступно только 17:

enter image description here

И sb_bookeridname отсутствует.Если я захожу в файл FetchXML и ввожу атрибут, который, как я знаю, не существует, я получаю сообщение об ошибке:

'sb_eventbooking' entity doesn't contain attribute with Name = 'fakeattribute'.

Таким образом, приложение принимает там это атрибут с именем 'sb_bookeridname'но я не могу получить ценность от этого.Я знаю, что могут быть проблемы со столбцами со значениями null, но другие атрибуты, похоже, не имеют этой проблемы.Я использую эту проверку для всех атрибутов и получаю значения для всех других атрибутов:

if (entity.Attributes.Contains("sb_bookeridname") && entity.GetAttributeValue<String>("sb_bookeridname") != null)
{
     booking.bookeridname = entity.GetAttributeValue<String>("sb_bookeridname");
}

Редактировать 1:

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вот чище:

bookeridname = entity.GetAttributeValue<EntityReference>("sb_bookerid")?.Name;
0 голосов
/ 27 ноября 2018

Я полагаю, у вас есть поле поиска с именем схемы: sb_bookerid .Когда мы создаем поле поиска, CRM автоматически создает столбец в таблице для хранения текстового значения, соответствующего поиску.Поэтому, когда мы создаем поле поиска sb_bookerid , CRM автоматически создает столбец в сущности sb_eventbooking с именем sb_bookeridname .

По этой причине вы не получаете сообщение об ошибке при выполнении запроса FetchXML, поскольку столбец с именем существует, но CRM ограничивает отображение его значения.Поэтому, если вы хотите получить значение в поле sb_bookerid , используйте следующее -

if(entity.Contains("sb_bookerid"))
{
bookeridname=((EntityReference)entity.Attributes["sb_bookerid"]).Name
}

Надеюсь, это поможет.

...