我有一个要在其中添加自定义过滤器的字段。该过滤器将基于链接实体的值。
但是,我发现使用addCustomFilter()方法不能进行复杂的查询。
还有什么其他方法可以做到这一点?
答案 0 :(得分:1)
是的,您可以进行复杂的查询。使用FetchXml构建查询。好的,这里是我使用过的JS。我会解释。我有一个用户查询,该查询基于另一个在称为“区域”的查询中选择的值,使用自定义视图进行过滤。
以所需的形式在下面创建javascript函数。
fetchXml是您创建查询的地方。如您所见,我正在查询系统用户实体,然后越过AreaUserLink实体(在tes_user = systemuserid上加入),然后在tes_area字段=从表单字段插入的值上进行过滤。
layoutXml是您定义当用户单击查找并转到查找详细信息屏幕时显示的屏幕布局的位置。您将需要修改这些内容以适合您的新方案。
viewId只是您需要提供的随机GUID,以便CRM可以存储它。它必须是唯一的。
在下面的代码中...
function AttachReviewByCustomView() {
var areaLookup = Xrm.Page.getAttribute('tes_area').getValue();
if (areaLookup == null) {
return;
}
var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>" +
"<entity name='systemuser'><attribute name='fullname' /><attribute name='systemuserid' />" +
"<order attribute='fullname' descending='false' />" +
"<filter type='and'>" +
"<condition attribute='isdisabled' value='0' operator='eq'/></filter>" +
"<link-entity name='tes_userarealink' from='tes_user' to='systemuserid' alias='ak'>" +
"<filter type='and'>" +
"<condition attribute='tes_area' operator='eq' uitype='tes_area' value='" + areaLookup[0].id + "' />" +
"</filter></link-entity></entity></fetch>";
var layoutXml = "<grid name='resultset' object='1' jump='systemuserid' select='1' icon='1' preview='1'>" +
"<row name='result' id='systemuserid'>" +
"<cell name='fullname' width='150' />" +
"</row></grid>";
var viewId = "{00000000-0000-0000-0000-000000000003}";
var viewDisplayName = "Active Users In Selected User-Area";
Xrm.Page.getControl("tes_operative").addCustomView(viewId, "systemuser", viewDisplayName, fetchXml, layoutXml, true);
}
最后,您需要从两个地方调用它。
1.加载表单时。
2.当人员从下拉字段中选择一个值时,该值将在fetchXml变量中用于过滤。
希望这会有所帮助。