我已将搜索帮助O2USERNAME
导入为ABAP中的oData服务。
我想在UI5中有一个实时建议字段,但是一次只能使用一个过滤器。目标是从Bname
,NameLast
和NameFirst
那里获得建议。
在SAP注释1671893 ODATA - convert $filter to ABAP select option中,它表示:
“ or_expression”中的所有属性都必须具有相同的名称。
有效:“名称为'Sven'或名称为'Hugo'”
无效:“名称等于'Sven'或年龄等于20”“
但这正是我所需要的。有已知的解决方法吗?
这是我的观点:
<SearchField id="searchField" width="50%" placeholder="search for..." enableSuggestions="true"
search="onSearch" suggest="onSuggest"
suggestionItems="{ path: '/O2usernameSet', sorter: { path: 'NameLast' } }">
<suggestionItems>
<SuggestionItem text="{Bname}" description="{path:'NameLast'} {path:'NameFirst'}"
key="{Bname}"/>
</suggestionItems>
</SearchField>
和我的控制器:
onSuggest: function (oEvent) {
var searchField = oEvent.getSource(),
sQuery = searchField.getProperty("value"),
filters1,filters2 = [],
oBinding = searchField.getBinding("suggestionItems");
filters2 = new Filter({
filters1: [
new Filter("Bname", FilterOperator.Contains, sQuery.toUpperCase())
, new Filter("NameLast", FilterOperator.Contains, sQuery) ,
, new Filter("NameFirst", FilterOperator.Contains, sQuery)
],
and: false
});
oBinding.filter(filters2);
oBinding.attachEventOnce('dataReceived', function (parentEvent) {
searchField.suggest();
}.bind(null, oEvent));
}
使用正确的布尔过滤器的后端错误是:
发生以下问题:HTTP请求失败500,内部服务器错误,{“错误”:{ “代码”:“ / IWBEP / CM_MGW_RT / 032”, “信息”:{ “ lang”:“ de”, “ value”:“内部Fehleraufgetreten。WendenSie sich an den系统管理员” }, “内部错误”:{ “应用”:{ “ component_id”:“ removedByMe ”, “ service_namespace”:“ MY_NAMESPACE ”, “ service_id”:“ MY_SERVICE ”, “ service_version”:“ 0001” }, “ transactionid”:“ 0BE63D492E4D0210E005CF86AE1FC269”, “ timestamp”:“ 20190621120505.9381020”, “ Error_Resolution”:{ “ SAP_Transaction”:“对于后端管理员:在SAP Gateway集线器系统上运行事务/ IWFND / ERROR_LOG并搜索带有上述时间戳的条目以获取更多详细信息”, “ SAP_Note”:“有关错误分析,请参阅SAP Note 1797736(https://service.sap.com/sap/support/notes/1797736)” }, “错误详情”:[{ “代码”:“ / IWBEP / CX_MGW_TECH_EXCEPTION”, “ message”:“ Interner Fehler aufgetreten。Wenden Sie sich an den Systemadministrator”, “ propertyref”:“”, “ severity”:“错误”, “目标”:””} ]} } }
/ IWFND / ERROR_LOG显示上面提到的注释
答案 0 :(得分:0)
每种类型的过滤器是否可能具有多个文本片段? 我的意思是您可以说NameFirst包含“ Sven”或“ Hugo”,还是NameLast包含“ LastName”或“ LastName2”?
如果是,我将不得不调整答案,否则:
您的orFilter1
,orFilter2
,orFilter3
不应是数组,因为它们每个都包含1个Filter对象,
第二,您的filter.push部分中有一个小错误。在创建“最终”过滤器时更为精确。
创建包含多个过滤规则的过滤器时,允许使用以下符号:
new sap.ui.model.Filter(aFilters, bAnd);
请注意,aFilters是此处的过滤器对象数组
但是您提供了4个参数,但我认为这不起作用。
回到代码,将orFilter-arrays更改为对象后,请尝试以下操作:
filter.push(new sap.ui.model.Filter({
filters: [orFilter3, orFilter2, orFilter1], // equals aFilters in previous code sample
and: false // equals bAnd in previous code sample
})
);