Hanlding $ TOP和$ SKIP服务器端分页以及$ COUNT

2020-08-20 22:32发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 由于从列表报告...

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

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


专家您好,

由于从列表报告中发送了两个Odata请求,当前我面临性能问题

1。 要使用TOP和SKIP获取实体集条目,

2. $ COUNT以获取实体集中的条目数

但是,我已经使用分页处理了TOP和SKIP中的精选查询,并且效果很好。 但是,由于使用$ COUNT来显示整个实体集中的条目数,因此使用UP TO 0 ROWS调用了我的选择查询,并再次产生了问题。

请让我知道如何处理COUNT个请求。

谢谢

维杰

2条回答
xfwsx85
2020-08-20 23:14 .采纳回答

嗨,Vijay,

如果GET_ENTITYSET方法的实现未提供$ count的值,则此值由SAP Gateway框架计算。

这表示SAP Gateway 框架在不应用任何过滤器或不使用其他查询选项的情况下执行对GET_ENTITYSET的调用,并且它对结果集中的条目数进行计数。

如果您检查是否可以对$ count的值进行优化,则可以优化计算 已请求$ count并自己执行计算。

您可以在以下类的方法so_get_entityset中检查该类的实现

/IWBEP/CL_GWSAMPLE_BAS_DPC_EXT ETHOD,该实现属于

代码首先检查$ count或$ inlinecount(提供所有查询选项后的条目数)

 lv_has_count = io_tech_request_context-> has_count()。
 lv_has_inlinecount = io_tech_request_context-> has_inlinecount()。
 

,然后通过在相应表上执行SELECT COUNT语句而不是检索实体集的所有条目来计算这些值。

如果请求$ count,我们只需要计算 过滤记录
  IF(lv_has_count EQ abap_true)。
  选择COUNT(*)INTO(lv_count)
  FROM(snwd_so AS的
  内连接snwd_bpa AS b ON b〜node_key = s〜buyer_guid)
  在(lv_where_clause)。
  es_response_context-count = lv_count。
  其他。
 *我们是否需要提供内联计数以及客户端分页?
  IF(lv_has_inlinecount EQ abap_true)和(lv_top> 0或lv_skip> 0)。
  选择COUNT(*)INTO(lv_count)
  FROM(snwd_so AS的
  内连接snwd_bpa AS b ON b〜node_key = s〜buyer_guid)
  在(lv_where_clause)。
  es_response_context-inlinecount = lv_count。
  ENDIF。

最好的问候,

安德烈

一周热门 更多>