Запрос OData CRM: какие-либо открытые возможности с заданной целью?

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

я знаю, как предотвратить обновление; вернуть false из OnSave() в JavaScript. Я не смог узнать, когда это было так. Лучшая идея, которая пришла мне в голову, — это сделать SOAP-вызов конечной точке OData в CRM, но на последнем шаге я столкнулся с камнем преткновения. (Если у вас есть идея получше, я полностью открыт для нее.)

Вот что у меня есть. Я могу получить указанную программу:
programset(guid'thisone')
.../OrganizationData.svc/uwkc_programSet(guid'F4D75E9D-3A79-E611-80DA- C4346BACAAC0')

Я могу получить соответствующие обозначения:
programset(guid'thisone')/program-desig
.../OrganizationData.svc/uwkc_programSet(guid'F0D75E9D-3A79-E611-80DA-C4346BACAAC0')/uwkc_uwkc_program_uwkc_opportunitydesignation< /под>

и связанные возможности для следующих:
programset(guid'thisone')/program-desig?$expand=desig-opportunity ...OrganizationData.svc/uwkc_programSet(guid'F0D75E9D-3A79-E611-80DA-C4346BACAAC0')/uwkc_uwkc_program_uwkc_opportunityобозначение?$expand=uwkc_opportunity_uwkc_opportunityобозначение

... но теперь я немного застрял.

Я могу отфильтровать примитивное значение возможности (ссылка + поле)
...$filter=opp-oppdesig/EstimatedCloseDate gt DateTime('2016-07-01')
...OrganizationData.svc/uwkc_programSet(guid'F0D75E9D-3A79-E611-80DA-C4346BACAAC0') /uwkc_uwkc_program_uwkc_opportunityобозначение?$expand=uwkc_opportunity_uwkc_opportunityобозначение&$filter=uwkc_opportunity_uwkc_opportunityобозначение/EstimatedCloseDate%20gt%20DateTime%272016-07-01%27

и я могу отфильтровать сложное значение в Обозначении (поле + значение)
...$filter=statecode/Value gt 0
...OrganizationData.svc/uwkc_programSet(guid'F0D75E9D-3A79-E611-80DA-C4346BACAAC0' )/uwkc_uwkc_program_uwkc_opportunityобозначение?$expand=uwkc_opportunity_uwkc_opportunityобозначение&$filter=statecode/Value%20gt%200

но я не могу заставить фильтр работать со сложным значением возможности (соединение + поле + значение) ...$filter=opp-oppdesig/statecode/Value gt 0
...OrganizationData.svc/uwkc_programSet(guid'F0D75E9D-3A79-E611- 80DA-C4346BACAAC0')/uwkc_uwkc_program_uwkc_opportunityобозначение?$expand=uwkc_opportunity_uwkc_opportunityобозначение&$filter=uwkc_opportunity_uwkc_opportunityобозначение/код состояния/Value%20gt%200

Не существует свойства statecode в типе Microsoft.Xrm.Sdk.Entity в позиции 45.

Как я могу отфильтровать состояние объекта на два расстояния от того, на что я смотрю? Или, если есть лучший способ, как лучше всего предотвратить деактивацию используемых программ?


person Einstein X. Mystery    schedule 18.11.2016    source источник


Ответы (1)


Первая проблема заключается в том, что вы должны использовать имя схемы атрибута (StateCode), а не логическое имя (statecode).

Однако я считаю, что тогда он просто вернет еще одно сообщение об ошибке:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code>-2147220989</code>
  <message xml:lang="en-US">attributeName</message>
</error>

По какой-то причине кажется, что фильтрация сложных типов в расширенной сущности не работает должным образом для конечной точки SOAP. И из того, что я тестировал, новый веб-API еще не поддерживает такую ​​​​глубину в запросе.

Одним из решений вашей проблемы является получение всех результатов, а затем выполнение фильтрации вручную в коде. Это, конечно, работает лучше всего, если вы можете предположить, что в таком запросе не слишком много связанных сущностей. Также обязательно используйте $select для получения только необходимых атрибутов, так как это значительно сокращает время, необходимое для завершения запроса.

Другим решением является выполнение запроса с использованием FetchXML. Это можно сделать либо через веб-API, либо через SOAP. просьба построить самостоятельно.

Третье решение состоит в том, чтобы разбить ваш запрос на несколько запросов, чтобы вам не приходилось фильтровать состояние, находящееся за двумя объектами в запросе.

person mktange    schedule 19.11.2016