点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我正在使用CAP创建OData服务。
目标是使以下网址正常工作。
/analytics-output/ApplicationUsage?select = application,count&$ orderby = count
这是服务模型。
@readonly 实体ApplicationUsage { 关键应用:String(80); 计数:十进制; timestamp:DateTime null; }
这是自定义逻辑(js文件)的实现
srv.on('READ','ApplicationUsage',(req)=> { selectQuery ='选择'+ "将关键的app.application作为应用程序," + 'COUNT(app.application)as count:十进制'+ '来自cis.fiorianalytics。动作作为动作'+ '将action.applicationID = app.id内加入cis.fiorianalytics.Apps作为应用程序'+ '按应用程序分组'; 让查询= cds.parse.cql(selectQuery); //附加时间戳记WHERE和ORDERBY条件 query.SELECT.orderBy = req.query.SELECT.orderBy; query.SELECT.where = req.query.SELECT.where; 返回cds.run(query); });
这在本地部署中效果很好,我得到了数据。 但是它无法在HANA中工作(在部署到试用版CF之后)。
我最终在浏览器中得到了一个不太有用的错误。
<错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">500
内部服务器错误
当我查看SCP上的"日志"时,我看到下面的行似乎与之相关。
任何帮助将不胜感激。
(34.0 kB)
克里希纳,你好
" req.query.SELECT.orderBy"中的order by子句不适合您的SQL,因为该模型不知道您正在使用的联接(该模型是OData查询处理的基础)。 您需要手动调整模型或构建子句,而不是从" req.query.SELECT"中提取。
最好,
塞巴斯蒂安
克里希纳,你好
解析后的查询是什么样的?
最好,
塞巴斯蒂安
在本地和CF上,它们看起来都一样,看起来也不错。
您好,克里希纳,
您已使用属性计数定义了实体ApplicationUsage。 如果现在在请求中执行" $ orderby = count",则这将转换为" req.query.SELECT.orderBy"中的" order by ApplicationUsage.count asc",即列上的order by。 但是,在您的SQL中,您联接了两个表,而创建别名CAP不知道,而count实际上是一个聚合,而CAP也不知道。 因此," req.query.SELECT.orderBy"的内容不适合您的SQL。
顺便说一句,SQLite只是忽略了这样的错误,这就是为什么您不在本地遇到它们的原因。
最佳,
塞巴斯蒂安
一周热门 更多>