Исключить участников из списка в Dynamics CRM 4 и 2011 - PullRequest
2 голосов
/ 20 июня 2011

Как и в заголовке, мне нужно исключить участников из списка. Я пытался использовать расширенный поиск для поиска XML-запроса, однако я не добился большого прогресса.

То, что я пытаюсь сделать, - это обработать действие в списке на основе того, хочет ли пользователь выполнить действие с теми, кто конкретно принял соглашение, и только с теми участниками или вторым вариантом для обработки этого действия все, кто конкретно не отклонил соглашение, независимо от того, приняли они это или нет.

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

Надеюсь, это не слишком смущает ...

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Чтобы достичь этого в SQL, вы обычно делаете левое внешнее соединение, чтобы объединить людей с соглашениями, а затем отфильтровать всех с ненулевым соглашением.

Вы не поверите мне, когда я скажу, что это невозможно в Dynamics CRM .

Можно выполнить внешнее соединение, хотя для этого требуется ручное редактирование XML-запроса через экспорт / импорт. Тем не менее, благодаря неспособности FetchXML ссылаться на элементы внутри <linked-entity> в предложении верхнего уровня <filter>, Outer Join практически бесполезен. Если вы <filter> внутри <link-entity>, это переводится в предложение ON для Join, которое не эквивалентно предложению WHERE для внешних соединений.

Это шокирующее упущение из Dynamics CRM.

Загадочная заметка внизу этой статьи пытается объяснить это: http://msdn.microsoft.com/en-us/library/ms936574.aspx

0 голосов
/ 21 июня 2011

Ну, во-первых ... Меня поражает, почему они не включают способ исключения участников из списка ... Есть ли какая-то причина, по которой я этого просто не вижу?Я не могу представить, что есть, но я все еще знаю так мало ...

Мне удалось сделать эту работу, хотя после нескольких редизайнов.Мы берем весь список людей и делаем внешнее объединение с теми, кто отказался, и добавляем к нему дату отклонения.

declinedNode = entityNode.GetChildNode("link-entity", "link-entity[@name='xx_decline_{0}']".FormatWith(memberType));
declinedNode.SetAttribute("name", "xx_decline_{0}".FormatWith(memberType));
declinedNode.SetAttribute("from", "xx_parent_{0}id".FormatWith(memberType));
declinedNode.SetAttribute("to", "{0}id".FormatWith(memberType));
declinedNode.SetAttribute("link-type", "outer");
declinedNode.SetAttribute("alias", "declined");

var declinedDateNode = fetchXmlDoc.CreateNode(XmlNodeType.Element, "attribute", string.Empty);
declinedDateNode .SetAttribute("name", "xx_declineddate");
declinedNode.AppendChild(declinedDateNode);

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

...