假设我们在窗体有两个LookUp字段A和B,其中B字段需要根据A字段进行实时的过滤选择,就会需要用到过滤和清除过滤。
我就直接在控制台演示了
如图:
增加过滤很简单,我这里就过滤只显示名称为“卢宝”的联系人
// 声明一个全局变量控制过滤条件是否启用
var isFilterApplied = true;
// 原始预搜索事件处理函数,包含过滤条件
var originalPreSearchHandler = function() {
if (isFilterApplied) {
var filter = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='contact'><attribute name='fullname' /><attribute name='contactid' /><order attribute='fullname' descending='false' /><filter type='and'><condition attribute='fullname' operator='eq' value='卢宝' /></filter></entity></fetch>";
Xrm.Page.getControl("primarycontactid").addCustomFilter(filter);
}
};
// 将原始预搜索事件处理函数绑定到查找字段
Xrm.Page.getControl("primarycontactid").addPreSearch(originalPreSearchHandler);
效果图
清除上边增加的过滤条件
// 定义清除过滤条件的函数
function clearFilter() {
// 置标志变量为false,表示不再应用过滤条件
isFilterApplied = false;
// 触发查找字段的变更事件,以重新执行预搜索
//Xrm.Page.getControl("primarycontactid").fireOnChange();
// 可选步骤:如果有必要,也可以移除原预搜索事件处理函数,再重新绑定(防止之后误触发过滤)
Xrm.Page.getControl("primarycontactid").removePreSearch(originalPreSearchHandler);
Xrm.Page.getControl("primarycontactid").addPreSearch(originalPreSearchHandler);
}
// 当需要清除过滤条件时调用此函数
clearFilter();
查询的就是全部的联系人了,效果图
全部代码:
// 声明一个全局变量控制过滤条件是否启用
var isFilterApplied = true;
// 原始预搜索事件处理函数,包含过滤条件
var originalPreSearchHandler = function() {
if (isFilterApplied) {
var filter = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='contact'><attribute name='fullname' /><attribute name='contactid' /><order attribute='fullname' descending='false' /><filter type='and'><condition attribute='fullname' operator='eq' value='卢宝' /></filter></entity></fetch>";
Xrm.Page.getControl("primarycontactid").addCustomFilter(filter);
}
};
// 将原始预搜索事件处理函数绑定到查找字段
Xrm.Page.getControl("primarycontactid").addPreSearch(originalPreSearchHandler);
// 定义清除过滤条件的函数
function clearFilter() {
// 置标志变量为false,表示不再应用过滤条件
isFilterApplied = false;
// 触发查找字段的变更事件,以重新执行预搜索
//Xrm.Page.getControl("primarycontactid").fireOnChange();
// 可选步骤:如果有必要,也可以移除原预搜索事件处理函数,再重新绑定(防止之后误触发过滤)
Xrm.Page.getControl("primarycontactid").removePreSearch(originalPreSearchHandler);
Xrm.Page.getControl("primarycontactid").addPreSearch(originalPreSearchHandler);
}
// 当需要清除过滤条件时调用此函数
clearFilter();