this.getView().getModel().read("/QualificationProficiencySet", {
filters: [new sap.ui.model.Filter({
path: "Qobjid",
operator: sap.ui.model.FilterOperator.EQ,
value1: nQObjid
})],
success: function(data) {
that._profData = data.results;
that._oQuickView.setModel(new sap.ui.model.json.JSONModel(that._profData), "proficiencyModel");
// delay because addDependent will do a async rerendering and the actionSheet will immediately close without it.
jQuery.sap.delayedCall(200, that, function() {
that._oQuickView.openBy(oLink);
});
},
error: function(evt) {}
});
nQObjid
始终是字符串类型。
昨天在我们的开发系统上我看到了错误
“函数‘eq’(位置:8)使用的参数类型无效”
我注意到过滤器附加在 URL 中,nQObjid
的值周围没有单引号。奇怪,因为目前它被添加为过滤器运算符的值,它显然是一个字符串。我找不到任何相关问题,但我通过执行 value1: "'"+nQObjid+"'"
来解决(肮脏的)解决方法。
这一直有效,直到今天,同一个系统,没有更改代码,但突然引号成为网关内值的一部分。所以我再次删除了 "'"
并进行了测试,有效。然后我将解决方案传输到生产环境,发现我现在在生产环境中遇到了同样的问题 "Invalid parametertype used at function 'eq'..
生产环境中的另一个用户没有这个问题,所以我有点迷路了。
类似问题:new SAPUI5 updat to 1.42 has odata bug "Invalid Parameters...
最佳答案
这可能无法解决您的问题,但对于评论来说太长了,这就是我在这里发布它的原因:
在执行读取请求时,框架正在调用辅助类:V2 ODataModel.js Line #4231
aUrlParams = ODataUtils._createUrlParamsArray(mUrlParams);
辅助类然后调用私有(private)方法:ODataUtils.js Line #72
return "$filter=" + this._createFilterParams(aFilters, oMetadata, oEntityType);
这个私有(private)方法做了很多事情,最重要的是调用了另一个私有(private)方法,它实际上正在构建字符串 ODataUtils.js Line #128
sFilterParam = that._createFilterSegment(oFilter.sPath, oMetadata, oEntityType, oFilterSegment.operator, oFilterSegment.value1, oFilterSegment.value2, sFilterParam);
此方法所做的第一件事就是格式化您的值,我想这就是您的问题所在:ODataUtils.js Line #393
oValue1 = this.formatValue(oValue1, sType);
formatValue
函数获取您的值及其 Edm.Type,并根据该类型执行不同的操作。如果您的 objectId 是一个字符串,那么它应该在开头和结尾加上单引号:ODataUtils.js Line #468
sValue = "'" + String(vValue).replace(/'/g, "''") + "'";
如果类型未定义或一些 UI5 不知道的奇怪值,那么您的值将简单地转换为字符串(您的情况可能就是这种情况)。
为什么类型未定义或奇怪?那就是你进来的地方......你必须做一些调试才能找出实际值是什么。如果 UI5 代码不可读,您可以将 sap-ui-debug=true
作为 URL 参数:
my.sap.system.com:8000/sap/bc/ui5_ui5/sap/ztest/index.html?sap-ui-debug=true
如果是时间问题(无论出于何种原因未加载元数据),那么将您的代码包装在 Promise
中可能会有所帮助:
var oModel = this.getView().getModel();
oModel.metadataLoaded().then(function() {
oModel.read("/QualificationProficiencySet", {
// ...
});
}
关于sapui5 - FilterOperator 在使用引号时出现错误,相同的代码在系统/时间上有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338613/