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

https://blogs.sap.com/2018/03/28/paging-implementation-in-s4hana-for-customer-management/

按照我的公众号文章里介绍的,S/4HANA for Customer Management 1.0里的Service Request UI仍然是采用CRM Webclient UI技术来开发的。

假设我在UI上指定max hit值为200:

每页默认显示20条数据,因此这200条搜索结果总共分10页显示。

关于CRM WebClient UI的分页机制,有两个要点:

1. 搜索按钮点击后,会有max hit的值指定条数的记录从数据库取出,存储于WebClient UI的应用的内存区域中。在我的例子里,我指定的max hit为200,因此有200条Service Request从数据库里取出。

2. WebClient UI是一项服务器端渲染的技术,意味着所有WebClient UI页面对应的html源代码都是在ABAP服务器里渲染的,然后直接在浏览器显示。在搜索这个场景里,任意时间段里,ABAP后台只会生成默认20条搜索结果的html源代码。

例如我点了搜索按钮之后,只有第1条道第20条记录的html源代码在后台生成,然后返回给浏览器由其渲染。当了我点了第二页的超链接"2"时,第21条到第40条的源代码相应在后台生成。

下面是一些技术细节。

1. 可以使用事务码ST05找到S4CRM的Service Request搜索查询的CDS view的名称CRMS4_SERVHSRCH

第201条记录被丢弃:

在视图ICCMP_INBOX/INBOXRESULTVIEW.HTM里设置断点, 在调试器里检查变量"me":

通过这个路径能找到存储在内存中的200条搜索结果:

{O:5768*CLASS-POOL=CL_BSP_WD_COLLECTION_WRAPPERCLASS=LCL_COLLECTION_REF}-IF_BSP_WD_COLLECTION_REF~COLLECTION

2. 当我点第二页的超链接后:

后台生成好的针对从第21行到第40行记录的html源代码可以在Chrome开发者工具中观察到,如下图所示:

那么后台如何得知应该从第21行开始准备其html源代码呢?这个索引信息是从前台传到后台的,通过http请求头部的字段:ItemTree_visibleFirstRow.

如果您搞不清楚类似下图这种前缀C36_W138_V139_的生成逻辑,请参考我的博客 WebClient UI element ID generation logic

在方法CL_THTMLB_CELLERATOR~GET_REQUEST_PARAMETERS设置断点,找到后台是在何处解析该前台请求传入的visibleFirstRow:

在BSP渲染类CL_THTMLB_CELLERATOR里,这个变量gv_visible_first_row被用于渲染的起始索引:lv_current_row_index:

每一行的每一个单元的源代码在循环里依次生成好。循环基于表的列定义,当前我系统里默认的配置,搜索结果有8列:

出于调试目的,您可以在变量GT_TABLE_ENTRIES里查看生成好的用于当前页面显示的html源代码:

比如对于第二页,索引从21开始:

以40结束:

为什么变量gt_table_entries有168条记录?

每页默认显示20条记录,加上1行表头,每条记录8列,所以最后是( 20 + 1 ) * 8 = 168

S/4HANA for Customer Management里的搜索分页处理相关推荐

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

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

  2. Hello World, S/4HANA for Customer Management 1.0

    SAP CRM的前世今生 在我之前的微信公众号文章 SAP的这三款CRM解决方案,您能区分清楚么我曾经提到过我作为成都SAP研究院CRM产品开发团队的一员工作过一段时间. 我向在SAP德国总部工作的德 ...

  3. Hello World, S/4HANA for Customer Management 1.0 1

    SAP CRM的前世今生 在我之前的微信公众号文章 SAP的这三款CRM解决方案,您能区分清楚么我曾经提到过我作为成都SAP研究院CRM产品开发团队的一员工作过一段时间. 我向在SAP德国总部工作的德 ...

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

    在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Customer Management里采用 ...

  5. SAP S/4HANA Customer Management(CRM)模块的扩展性设计

    标题:One order extensibility in S4HANA for Customer Management In SAP CRM we use Application Enhanceme ...

  6. SAP UI 搜索分页技术

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

  7. ExtJs 备忘录(6)—— GirdPanl表格(二) [ 搜索分页 ]

    前言 近些天对于厚积薄发有深刻的理解,尤其是月末那两天,很想再写两篇文章,保持每周一篇--每月至少四篇以上的文章.写文章分两种情况:一种情况是已经积累了许多经验,写起来轻松且得心应手,内容和系列文章容 ...

  8. 订单搜索分页失效的教训:怠惰必受惩罚

    背景 2018年8月21日,订单搜索发布导致订单搜索分页失效.该发布有三个变更:1. 新增一个带详情的订单列表接口:2. 按照订单状态搜索的索引分流: 3. 支持自定义的from传参. 第三个变更只有 ...

  9. jquery插件dataTables(dataTables在显示表格的时候,果然是个好东西,支持排序/搜索/分页/...)

    jquery插件dataTables dataTables在显示表格的时候,支持排序/搜索/分页/... 官网:http://www.datatables.net/ demo: [javascript ...

最新文章

  1. node mongoose_如何使用Express,Mongoose和Socket.io在Node.js中构建实时聊天应用程序
  2. MyBatis包含这9种设计模式,你知道几个?
  3. promise then err_Promise 原理解析与实现(遵循Promise/A+规范)
  4. centos 程序 mysql数据库文件位置,CentOS 更改MySQL数据库目录位置
  5. 文献学习(part7)--A strategy to incorporate prior knowledge into correlation network cutoff selection
  6. 白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
  7. spring4+struts2+hibernate5整合出现spring异常
  8. java类静态初始化_Java静态代码块和类初始化、实例初始化过程
  9. Apache Jackrabbit Oak 1.12.0 发布,可扩展、高性能分层存储库
  10. 绘图添加网格_Stata绘图: 添加虚线网格线
  11. python数组增加维度_python – 为xarray DataArray添加维度
  12. muduo实现finger服务
  13. Redis string和hash数据类型
  14. python pip什么意思_python中的pip是什么意思
  15. gsoc 任务_gsoc 2020最终报告wikimedia transferpy改进
  16. 八位彻底改变App Store的iOS开发者
  17. arm对应hex_ARM 经典问答总结
  18. C语言的按位取反符号~(详解)
  19. S5PV210 PWM定时器
  20. 网络服务-DCHP原理与配置

热门文章

  1. dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)
  2. 智能安防新时代:用户、SI、设备制造商要做什么?
  3. JAVA微信开发:[17]如何获取所有关注用户
  4. 会场安排问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=14
  5. VS2008非托管c++访问webservice服务(以WeatherWS 天气服务 为例)
  6. SQL:将查询结果插入到另一个表的三种情况
  7. 网络中工作组与域的解释
  8. linux指向域同步时间,linux在局域网下设置时间同步
  9. matlab 对三维图像旋转,求助,二维图像如何绕轴旋转成为三维图像
  10. 搭建K8s集群(kubeadm方式)-部署master节点