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