如何在CAP中使用外部OData v2服务实现$ count = true支持?

2020-08-15 18:27发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)在由外部OData v2服务提供...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在由外部OData v2服务提供服务的实体上运行Fiori预览时,页面显示错误"不支持功能:fluent API的方法.count"。 在服务实现中有什么方法可以解决?

这将在查询中支持$ filter(因此不是我要的解决方案),但是出于测试目的,我尝试检查req.query.cqn.count是否为真,然后执行显式的OData v2 $ count 要求:

等待返回ext.tx(req).get("/img/User/$ count")

这确实得到了计数,但是在服务实现中返回数字会导致以下错误:

 [2020-07-06T19:41:42.970Z | 错误|  [1773773]:在实体集合的序列化期间发生错误。
 
5条回答
蓋茨
2020-08-15 18:56

嗨,奥琳娜,

谢谢,它肯定有用。 但是,即使看起来我返回的结构正确,数据也不会显示在Fiori预览中。 "找不到数据。请尝试调整过滤器设置。"

服务实施:

 srv.on('READ',User,async req => {
         让结果= {}
         如果(req.query.cqn.count){
             删除req.query.count
             删除req.query.cqn.count
             const queryObject = cqnToQuery(req.query,{
                 种类:" odata"
               })
             const count =等待ext.tx(req).get("/img/User/$ count")
             结果=等待ext.tx(req).get(queryObject.path +"&$ inlinecount = allpages")
             req.query.count = true
             req.query.cqn.count = true
             result。$ count =计数
         }
         其他{
             结果=等待ext.tx(req).run(req.query)
         }

         result.map(实体=> convertDatesv2Tov4(要求,实体))
         返回结果;
     })
 

显然,SuccessFactors不支持$ inlinecount,因此除了查询之外,我还获得了显式的$ count。 (这打破了我认为的$ filter和$ inlinecount的组合)

返回的数据:

 {
   " @ odata.context":" $ metadata#User",
   " @ odata.count":" 90",
   "值":[
     {
       " userId":" 1",
       " defaultFullName":" AA BB"
     },
     {
       " userId":" 23",
       " defaultFullName":" XX YY"
     }
   ]
 } 

一周热门 更多>