我正在尝试删除PreSearch文件管理器,我的代码如下所示。我怎样才能实现同样的目标?
Xrm.Page.getControl("productid").removePreSearch(function () {
Object
});
Xrm.Page.getControl("productid").addPreSearch(function () {
fetchxml2();
});
function fetchxml2() {
var fetchXml1 = "<filter type='and'>"
fetchXml1 += "<condition attribute='productid' operator='in' >";
for (var i = 0; i < Itemid.length; i++) {
fetchXml1 += "<value>" + Itemid[i] + "</value>";
}
fetchXml1 += "</condition>";
fetchXml1 += "</filter>";
Xrm.Page.getControl("productid").addCustomFilter(fetchXml1);
//Xrm.Page.getControl("productid").removePreSearch(fetchXml1);
};
答案 0 :(得分:7)
为了能够通过removePreSearch
删除处理程序,请通过创建命名函数并在addPreSearch
和removePreSearch
中使用匿名函数来避免使用匿名函数:
function preSearchHandler(){
fetchxml2();
}
Xrm.Page.getControl("productid").removePreSearch(preSearchHandler);
Xrm.Page.getControl("productid").addPreSearch(preSearchHandler);
答案 1 :(得分:0)
只想将其添加到讨论中:
例如,如果您在查找字段上具有三个不同的自定义过滤器,则当您应用新的过滤器时,该功能将会堆叠。
例如,如果您有一个在字段上调用addPreSearch()的选项集,则如果选择所有三个不同的选项,则会将所有三个过滤器同时应用于该字段。
说选项集有三个选项[选项A,选项B,选项C],
为简单起见,相应的功能为[filterA,filterB,filterC]
对于选项集的change事件,对于您应用的每个过滤器,只需删除其他两个过滤器(在这种情况下)。
if (optionSet == 810500000) {//option A
Xrm.Page.getControl('lookup').addPreSearch(filterA);
Xrm.Page.getControl('lookup').removePreSearch(filterB);
Xrm.Page.getControl('lookup').removePreSearch(filterC);
}
else if (optionSet == 810500001) {//option B
Xrm.Page.getControl('lookup').addPreSearch(filterB);
Xrm.Page.getControl('lookup').removePreSearch(filterA);
Xrm.Page.getControl('lookup').removePreSearch(filterC);
}//so on and so forth
我希望这对某人有帮助,我能够将自定义过滤器应用于基于四个不同选择的查找,并通过这种方式添加和删除“可堆叠”过滤器。这有点难看,但是,嘿,它有效。归根结底,有时最优雅的解决方案是仅仅赢,赢双赢。
如果您需要更多上下文(fetchXml)等,我也可以发布它...但是它与我试图提出的观点并不一致。这些过滤器可以同时应用!这是我想在这里传达的主要思想。