在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Customer Management里采用WebClient UI技术实现的UI上的搜索分页实现。

那么S/4HANA和CRM里原生的Fiori应用,其搜索分页又是如何实现的?

这篇博客分别选取S/4HANA里的Product Master,以及CRM里的My Opportunities这两个应用为例来介绍。

S/4HANA Fiori应用的搜索分页实现

点击搜索按钮之后,默认返回前25个命中的product,同时显示总共命中的product数目:140。

这个分页效果通过OData请求的参数KaTeX parse error: Expected 'EOF', got '&' at position 7: skip=0&̲top=25实现的。而总共命中…inlinecount来实现,该参数的后台实现原理类似ABAP Open SQL里的SELECT COUNT(*)。

从Chrome开发者工具里观察该请求的回应,确实只有25条记录返回。

将该搜索结果列表scroll至底部,发现有另一个OData request自动发出:

该请求的头部参数为$skip=25&top=25,因此能够从后台只取从第26到50个product:

在我博客SAP Fiori里的List是如何做到懒加载Lazy load的 我解释了$skip递增的序列值0,25,50,75…是如何在前台生成的。

而在这篇博客里,我会着重介绍分页搜索的后台实现。

假设我重复将搜索结果scroll至底部的动作重复三次,那么能够通过ST05观察到有三个数据库的读请求,每个请求返回25条记录。

点击该按钮,可以查看到具体是哪一行ABAP代码发起的数据库读请求:

skip和skip和skip和top这两个参数的值从前台传入后台,在后台的方法CL_SADL_GW_GENERIC_DPC~_GET_ENTITYSET的输入参数io_query_option能观察到:

开始行的索引值等于$skip参数值加1。

实际的读取分页在后台的实现:通过ABAP关键字OFFSET实现。

该OFFSET的值通过方法CL_SADL_SQL_STATEMENT~GET_SECTIONS_FOR_SELECT内一个较复杂的table表达式来决定出来:

首先得出表达式lt_sections[ type = cl_sadl_sql_statement=>co_type-page ]-from的值:99.

再从内表mt_parts取出第99条记录,从其字段value2得出最终offset值75。

CRM Fiori应用的搜索分页实现

前台的逻辑和S/4HANA的Fiori应用完全一致。

该参数传至后台,存储在参数is_paging里:

至于后台的分页搜索,My opportunities应用并未使用ABAP OPEN SQL里的关键字OFFSET。相反地,所有匹配记录的GUID都通过One Order的搜索API返回:

多余的记录,即那些不在skip和skip和skip和top定义的参数之内的都被DELETE丢弃:

该实现或许不如S/4HANA采用OFFSET方式实现得直接,但是因为从数据库返回的仅仅是命中opportunity的GUID,因此也不会有太多额外的开销。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙":

S/4HANA和CRM Fiori应用的搜索分页实现相关推荐

  1. S/4HANA for Customer Management里的搜索分页处理

    这篇文章的英文版我发在了SAP Community上:Paging Implementation in S/4HANA for Customer Management https://blogs.sa ...

  2. S/4HANA for Customer Management里的搜索分页处理 1

    这篇文章的英文版我发在了SAP Community上:Paging Implementation in S/4HANA for Customer Management https://blogs.sa ...

  3. SAP UI 搜索分页技术

    搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...

  4. 在 SAP CRM Fiori 应用上给 Opportunity 订单添加 note 的后台执行明细

    在 SAP CRM Fiori 应用上给 Opportunity 订单添加 note 的后台执行明细: 修改某些字段之后点击保存按钮: I change "chance of success ...

  5. SAP CRM Fiori Launchpad 登录之后,看不见任何 tile 的解决办法

    我登录 SAP CRM Fiori gateway 系统,发现 Launchpad 里一个 tile 也没有: 解决方法 事物码 PFCG,从标准的 role SAP_CRM_BCR_SALESREP ...

  6. SAP CRM Fiori 应用和 SAP Commerce Cloud (电商云) UI 如何通过调整 CSS 来改变UI显示风格

    这是Jerry 2021年的第 19 篇文章,也是汪子熙公众号总共第 290 篇原创文章. 本文分别针对 SAP CRM Fiori 应用和 SAP Commerce Cloud (电商云) UI,介 ...

  7. OData Console in C4C and Gateway Client in CRM Fiori

    C4C Work center Administrator->OData service explorer: 随便选一个OData service,点Test: 弹出一个新的窗口,就可以用ODa ...

  8. CRM Fiori和Marketing Cloud里的My Account和All Account

    CRM Fiori里的My Account和All Account在这里切换: Marketing Cloud的切换在这里: 要获取更多Jerry的原创文章,请关注公众号"汪子熙" ...

  9. SAP CRM One Order框架搜索条件里,posting date下拉菜单的渲染逻辑

    where does one order posting date search drop down list come from 本文介绍:SAP CRM One Order框架搜索条件里,post ...

最新文章

  1. mysql5.5多实例配置_mysql-5.5.32多实例配置
  2. Opencv实战之图像的基本操作:这效果出来惊艳了众人(附代码解析)
  3. eclipse 搭建Android 开发环境(ADT安装和sdk下载,选择)
  4. 2017.9.24 虔诚的墓主人 思考记录
  5. python 爬取历史天气
  6. svn分支管理的使用与经验
  7. java 车牌号判断
  8. echarts 圆环图渐变
  9. ZKTeco live20R指纹采集识别适配谷歌浏览器
  10. pandas 取每天某个时刻的数据
  11. Ruby / Rails代码气味基础01
  12. 马哥2018linux课程目录,马哥教育2018年Linux第30期视频教程
  13. 网管员必知:常用电脑密码破解
  14. echarts柱状图图例不显示的问题
  15. C++——隐式类型转换
  16. LC谐振电路跟和LC振荡电路
  17. 【59元 第二件1元】SIMEITOL/姿美堂玛卡片 蓝玛咖片MACA 60片
  18. torch.roll 函数的理解
  19. 成功解决需要Xmanager软件来处理X11转发需求
  20. 拍拍关闭:C2C模式走向终结?

热门文章

  1. ps -ef 输出结果的具体含义
  2. html 订阅发布,发布-订阅模式.html
  3. mysql导出bacpac_在 Azure 中备份应用
  4. SAP UI5 应用开发教程之二十三 - 列表控件的排序 Sort 和分组 Group
  5. SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别
  6. Adding Applications for JavaScript Storefronts in SAP 电商云
  7. yarn ngc使用练习
  8. SAP Spartacus开启SSR服务器端渲染之后,和默认客户端渲染的差异比较
  9. SAP云平台Extension Factory和微软Azure上的Lambda Function
  10. how is central js retrieved from ABAP repository