javascript - Ui5 SearchField - 来自多个属性名称的建议?
问题描述
我已将搜索帮助O2USERNAME
作为 ABAP 中的 oData 服务导入。我想在 UI5 中有一个实时建议字段,但我一次只能让一个过滤器工作。目标是从Bname
和NameLast
获得建议NameFirst
。
在 SAP Note 1671893 ODATA - convert $filter to ABAP select option中,它说:
'or_expression' 中的所有属性必须具有相同的名称。
有效:“name eq 'Sven' 或 name eq 'Hugo'”
无效:“姓名 eq 'Sven' 或年龄 eq 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 request failed500,Internal Server Error,{"error":{ "code":"/IWBEP/CM_MGW_RT/032", "message":{ "lang":"de", "value":" Inner Fehler aufgetreten. Wenden Sie sich an den Systemadministrator" }, "innererror":{ "application":{ "component_id":" removedByMe ", "service_namespace":" MY_NAMESPACE ", "service_id":" MY_SERVICE", "service_version":"0001" }, "transactionid":"0BE63D492E4D0210E005CF86AE1FC269", "timestamp":"20190621120505.9381020", "Error_Resolution":{ "SAP_Transaction":"对于后端管理员:在 SAP 网关上运行事务 /IWFND/ERROR_LOG集线器系统并搜索带有上述时间戳的条目以了解更多详细信息", "SAP_Note":"请参阅 SAP Note 1797736 进行错误分析 ( https://service.sap.com/sap/support/notes/1797736 )" }, " errordetails":[{ "code":"/IWBEP/CX_MGW_TECH_EXCEPTION", "message":"Interner Fehler aufgetreten.Wenden Sie sich an den Systemadministrator", "propertyref":"", "severity":"error", "target":""} ]} } }
/IWFND/ERROR_LOG 揭示了上面提到的注释
解决方案
每种类型的过滤器是否可以有多个文本片段?我的意思是你可以说 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
})
);
推荐阅读
- css - 无效的属性值 CSS fit-content
- excel - 我可以评估两个工作簿的工作表名称,如果它们具有相同的名称,然后转到下一个工作表吗?
- android - 媒体播放器在使用 Recyclerview 时不会停止播放
- javascript - 处理 JSON 响应时出错。意外的字符
- php - 在php中提交后保留选择框数据
- ios - ld: SDK.framework 使用旧版本的 Swift 语言 (XX) 编译,而不是 ObjC 框架的先前文件(未知 ABI 版本 YYY)
- visual-studio-code - 如何判断 Visual Studio Code 扩展是本地安装还是全局安装?
- javascript - 预取 javascript 文件不执行它
- jade-platform - 从 JADE 中的集合中删除无效引用
- javascript - 单击按钮时隐藏 DIVS