2011-06-20 96 views
2

正如标题所示,我需要从列表中排除成员。我已经尝试使用高级查找来提出XML查询,但我没有取得很大进展。从Dynamics CRM 4和2011中的列表中排除成员

我想要做的是根据用户是否想要发生的行为发生在那些谁已经明确接受了协议,只有那些成员或第二个选项来处理该行动每个没有特别拒绝协议的人,不管他们是否接受或不接受。

我需要的是寻找拒绝协议的所有人并从列表中选择其他人。当成员拒绝协议时,创建一个实体来反映这一点。这对那些接受协议的人很有效。不过,我无法选择所有没有与其关联的实体的人。

我希望这不是太混乱...

回答

2

在SQL实现这一点,你通常做一个LEFT OUTER JOIN给人以协议相结合,然后筛选出大家一个非空的协议。

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

虽然它需要通过导出/导入手动编辑XML查询,但可以执行外连接。但是,由于FetchXML无法在顶级<filter>子句中引用来自<linked-entity>内部的项目,因此外部联接是无用的。如果在<link-entity>之内,则将其转换为Join的ON子句,该子句不等于外连接的WHERE子句。

这是来自Dynamics CRM的令人震惊的遗漏。

在这篇文章底部的神秘音符试图解释这一点:http://msdn.microsoft.com/en-us/library/ms936574.aspx

0

嗯,首先......他们为什么不包括一种方法来从列表中排除成员这博格尔斯我的心..有什么理由让我只是没有看到?我无法想象有,但我仍然知道这么少...

虽然经过几次重新设计,我已经设法使这项工作。我们抓住所有人的名单,并与拒绝的人加入,并将拒绝的日期添加到其中。

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); 

然后服务器端已经通过列表中的所有成员循环,所以我们只是把一个条件,如果它已经为我们忽略了它的下降日期的值。