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) {}
});
Run Code Online (Sandbox Code Playgroud)
nQObjid是字符串类型 - 总是.昨天在我们的开发系统上,我看到了错误
"Invalid parametertype used at function 'eq' (Position: 8)"
我注意到过滤器附加在URL中,没有围绕值的单引号nQObjid.很奇怪,因为此时它被添加为过滤器运算符的值,它显然是一个字符串.我找不到任何相关的问题,但我做了一个(脏的)解决方法value1: "'"+nQObjid+"'".
直到今天,这个工作一直没有改变代码,但突然引号是网关内部价值的一部分.所以我"'"再次删除并测试,工作.然后我将解决方案转移到生产中,以发现我现在"Invalid parametertype used at function 'eq'..在生产中遇到了同样的问题.生产中的另一个用户没有这个问题,所以我有点迷失了.
这可能无法解决您的问题,但评论时间太长,这就是我在此发布的原因:
在执行读取请求时,框架正在调用辅助类:V2 ODataModel.js Line#4231
aUrlParams = ODataUtils._createUrlParamsArray(mUrlParams);
Run Code Online (Sandbox Code Playgroud)
然后助手类调用私有方法:ODataUtils.js Line#72
return "$filter=" + this._createFilterParams(aFilters, oMetadata, oEntityType);
Run Code Online (Sandbox Code Playgroud)
这个私有方法正在做一堆东西,最重要的是调用另一个实际构建字符串的私有方法ODataUtils.js Line#128
sFilterParam = that._createFilterSegment(oFilter.sPath, oMetadata, oEntityType, oFilterSegment.operator, oFilterSegment.value1, oFilterSegment.value2, sFilterParam);
Run Code Online (Sandbox Code Playgroud)
这种方法的第一件事就是格式化你的价值,我想这里是你的问题所在:ODataUtils.js Line#393
oValue1 = this.formatValue(oValue1, sType);
Run Code Online (Sandbox Code Playgroud)
该formatValue函数将获取您的值及其Edm.Type,并根据该类型执行不同的操作.如果你的objectId是一个字符串,那么它应该在开头和结尾放置单引号:ODataUtils.js Line#468
sValue = "'" + String(vValue).replace(/'/g, "''") + "'";
Run Code Online (Sandbox Code Playgroud)
如果类型未定义或UI5不知道的某些奇怪的值,那么您的值只是强制转换为String(这可能是您的情况).
为什么类型未定义或奇怪?这就是你进来的地方......你必须做一些调试才能找出实际值.如果UI5代码不可读,您可以将其sap-ui-debug=true作为URL参数:
my.sap.system.com:8000/sap/bc/ui5_ui5/sap/ztest/index.html?sap-ui-debug=true
Run Code Online (Sandbox Code Playgroud)
如果这是一个计时问题(由于某种原因没有加载元数据),那么将代码包装在一个Promise可能有帮助的地方:
var oModel = this.getView().getModel();
oModel.metadataLoaded().then(function() {
oModel.read("/QualificationProficiencySet", {
// ...
});
}
Run Code Online (Sandbox Code Playgroud)