C# 从Dynamics CRM 4和2011中的列表中排除成员

C# 从Dynamics CRM 4和2011中的列表中排除成员,c#,list,dynamics-crm-4,crm,dynamics-crm-2011,C#,List,Dynamics Crm 4,Crm,Dynamics Crm 2011,正如标题所说,我需要从列表中排除成员。我曾尝试使用AdvancedFind来实现xml查询,但没有取得多大进展 我试图做的是,根据用户是否希望该操作发生在那些明确接受该协议的人身上,以及仅那些成员身上,来处理列表上的操作,或者第二个选项来处理那些没有明确拒绝该协议的人身上的操作,无论他们是否接受该协议 我需要的是寻找所有拒绝协议的人,然后从列表中选择其他人。当成员拒绝该协议时,将创建一个实体来反映该协议。这对那些接受协议的人来说很有效。但是,我很难选择与此实体没有关联的所有人 我希望这不会太让人

正如标题所说,我需要从列表中排除成员。我曾尝试使用AdvancedFind来实现xml查询,但没有取得多大进展

我试图做的是,根据用户是否希望该操作发生在那些明确接受该协议的人身上,以及仅那些成员身上,来处理列表上的操作,或者第二个选项来处理那些没有明确拒绝该协议的人身上的操作,无论他们是否接受该协议

我需要的是寻找所有拒绝协议的人,然后从列表中选择其他人。当成员拒绝该协议时,将创建一个实体来反映该协议。这对那些接受协议的人来说很有效。但是,我很难选择与此实体没有关联的所有人


我希望这不会太让人困惑…

要在SQL中实现这一点,您通常会使用左外连接将具有协议的人员组合在一起,然后使用非空协议过滤掉所有人

当我告诉你这在Dynamics CRM中不可能时,你不会相信我的

虽然需要通过导出/导入手动编辑XML查询,但也可以进行外部联接。但是,由于FetchXML无法在顶级
子句中从
内部引用项,因此外部联接几乎毫无用处。如果您在
中执行
,则这将转换为联接的ON子句,而ON子句与外部联接的WHERE子句不等效

这是Dynamics CRM发出的令人震惊的指令


本文底部的神秘注释试图解释这一点:

首先。。。我很奇怪为什么他们不包括一种从列表中排除成员的方法。。。有什么原因我就是看不见?我无法想象会有,但我知道的仍然很少

经过几次重新设计后,我成功地实现了这一目标。我们抓取了所有的人,并与那些拒绝的人进行了一次外部连接,并将拒绝的日期添加到其中

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);
然后服务器端已经遍历了列表中的所有成员,所以我们只需要设置一个条件,如果它有一个拒绝日期的值,我们就会忽略它