Javascript 自定义筛选器在UCI中无法正常工作的查找字段

Javascript 自定义筛选器在UCI中无法正常工作的查找字段,javascript,dynamics-crm,microsoft-dynamics,dynamics-crm-365-v9,dynamics-crm-uci,Javascript,Dynamics Crm,Microsoft Dynamics,Dynamics Crm 365 V9,Dynamics Crm Uci,我这里有一些JS代码,它使用一些条件创建一个自定义过滤器,然后将其添加到表单上的查找字段中。当此代码在第一次正常工作时触发并运行时;将显示正确的结果。但是,如果更改自定义筛选器的条件(更改createCustomFilter命令用于创建fetchxml的表单上的一个字段),则在应该有结果时,不会在查找中显示结果 此问题仅在新的统一接口中发生。我已经在Web界面中测试了相同的代码,但没有出现此问题;代码运行正常 我猜之前应用的过滤器没有被移除?这就是为什么没有结果出现。在UCI中是否有任何解决方法

我这里有一些JS代码,它使用一些条件创建一个自定义过滤器,然后将其添加到表单上的查找字段中。当此代码在第一次正常工作时触发并运行时;将显示正确的结果。但是,如果更改自定义筛选器的条件(更改createCustomFilter命令用于创建fetchxml的表单上的一个字段),则在应该有结果时,不会在查找中显示结果

此问题仅在新的统一接口中发生。我已经在Web界面中测试了相同的代码,但没有出现此问题;代码运行正常

我猜之前应用的过滤器没有被移除?这就是为什么没有结果出现。在UCI中是否有任何解决方法可以使其起作用

请告知

var filter;

function OnFieldChange(executionContext) {
    var formContext = executionContext.getFormContext();
    if (filter != "" && filter != null) {
        formContext.getControl("test_lookupfield").removePreSearch(lookupCustomFilter);
    }
    filter = createCustomFilter(executionContext);
    formContext.getControl("test_lookupfield").addPreSearch(lookupCustomFilter);
}

function lookupCustomFilter(executionContext) {
    var formContext = executionContext.getFormContext();
    formContext.getControl("test_lookupfield").addCustomFilter(filter);
}

function createCustomFilter(executionContext) {
    //creates a custom fetchxml filter that has been tested and is correct
}

以下是我们如何在v9.1系统中过滤UCI和遗留UI中的查找的要点:

//Legacy UI uses custom views, UCI only custom filters
views.push({
    id: '{' + getRandomGuid().toUpperCase() + '}',
    fetchXml: '' +
        '<fetch mapping="logical" distinct="true" version="1.0">' +
            '<entity name="product">' +
                '<attribute name="productid" />' +
                '<attribute name="productnumber" />' +
                '<attribute name="name" />' +
                '<attribute name="description" />' +
                '<order attribute="productnumber" descending="false" />' +          
                '<filter type="and">' +
                    '<condition attribute="new_pricelevelid" operator="eq" value="' + myGuid + '" />' +
                '</filter>';
            '</entity>' +
        '</fetch>',
    layoutXml: '' +
        '<grid name="resultset" object="' + productTypeCode + '" jump="name" select="0" icon="0" preview="0">' +
        '<row name="result" id="productid">' +
        '<cell name="name" width="125" />' +
        '<cell name="description" width="400" />' +
        '</row>' +
        '</grid>',
    name: 'Custom Product View',
    recordType: productTypeCode,
    Type: "0"
});        
var CustomFilter =  '<filter type="and">' +
                        '<condition attribute="new_pricelevelid" operator="eq" value="' + myGuid + '" />' +
                    '</filter>';
try {

    var lookupParameters = {};
    lookupParameters.entityTypes = ['quote'];
    lookupParameters.defaultEntityType = 'quote';
    //lookupParameters.defaultViewId = views[0].id;
    lookupParameters.allowMultiSelect = false;

    //Xrm.Internal.isUci() is unsupported!
    if (Xrm.Internal.isUci() ) {
        //Filter on UCI
        if (CustomFilter != null) {
            lookupParameters.filters = [{ filterXml: CustomFilter }];
        }
    }
    else {
        //Filter on Legacy UI
        lookupParameters.customViews = [views[0]];
        lookupParameters.viewIds = [views[0].id];
        lookupParameters.defaultViewId = views[0].id;
    }

    //Use OOB CRM lookup w/ Custom Filter.
    Xrm.Utility.lookupObjects(lookupParameters).then(
        function (selectedItems) {
            callback.call(scope, ifNull(selectedItems, []));
        },
        function (error) {
            if (error != null) {
                Xrm.Utility.alertDialog(error.message);
            }
        });
} 
catch (e) {
    Xrm.Utility.alertDialog(e.message);
}
//遗留UI使用自定义视图,仅限UCI自定义筛选器
视图。推({
id:“{'+getRandomGuid().toUpperCase()+'}”,
获取XML:“”+
'' +
'' +
'' +
'' +
'' +
'' +
'' +          
'' +
'' +
'';
'' +
'',
layoutXml:“”+
'' +
'' +
'' +
'' +
'' +
'',
名称:“自定义产品视图”,
recordType:productTypeCode,
类型:“0”
});        
var CustomFilter=''+
'' +
'';
试一试{
var lookupParameters={};
lookupParameters.entityTypes=['quote'];
lookupParameters.defaultEntityType='quote';
//lookupParameters.defaultViewId=视图[0].id;
lookupParameters.allowMultiSelect=false;
//不支持Xrm.Internal.isUci()!
if(Xrm.Internal.isUci()){
//UCI上的过滤器
if(CustomFilter!=null){
lookupParameters.filters=[{filterXml:CustomFilter}];
}
}
否则{
//基于遗留用户界面的过滤器
lookupParameters.customViews=[views[0]];
lookupParameters.viewIds=[views[0].id];
lookupParameters.defaultViewId=视图[0].id;
}
//使用OOB CRM查找和自定义筛选器。
实用工具。lookupObjects(lookupParameters)。然后(
功能(selectedItems){
callback.call(scope,ifNull(selectedItems,[]);
},
函数(错误){
if(错误!=null){
Xrm.Utility.alertDialog(错误消息);
}
});
} 
捕获(e){
Xrm.Utility.alertDialog(e.message);
}
请注意,为了简单和隐私,我修改了此代码。我没有测试它的当前形式