查看: 3266|回复: 2

[原创] S/4HANA for Customer Management里的搜索分页处理

[复制链接]
认证徽章
论坛徽章:
0
发表于 2018-3-30 10:04 | 显示全部楼层 |阅读模式
本帖最后由 i042416 于 2018-3-30 10:08 编辑

这篇文章的英文版我发在了SAP Community上:Paging Implementation in S/4HANA for Customer Management
按照我的公众号文章里介绍的,S/4HANA for Customer Management 1.0里的Service Request UI仍然是采用CRM Webclient UI技术来开发的。
假设我在UI上指定max hit值为200:
clipboard1.png
每页默认显示20条数据,因此这200条搜索结果总共分10页显示。
clipboard2.png
关于CRM WebClient UI的分页机制,有两个要点:
1. 搜索按钮点击后,会有max hit的值指定条数的记录从数据库取出,存储于WebClient UI的应用的内存区域中。在我的例子里,我指定的max hit为200,因此有200条Service Request从数据库里取出。
2. WebClient UI是一项服务器端渲染的技术,意味着所有WebClient UI页面对应的html源代码都是在ABAP服务器里渲染的,然后直接在浏览器显示。在搜索这个场景里,任意时间段里,ABAP后台只会生成默认20条搜索结果的html源代码。
clipboard3-20.png
例如我点了搜索按钮之后,只有第1条道第20条记录的html源代码在后台生成,然后返回给浏览器由其渲染。当了我点了第二页的超链接"2"时,第21条到第40条的源代码相应在后台生成。
下面是一些技术细节。
1. 可以使用事务码ST05找到S4CRM的Service Request搜索查询的CDS view的名称CRMS4_SERVHSRCH
clipboard3.png

第201条记录被丢弃:
clipboard4.png

在视图ICCMP_INBOX/INBOXRESULTVIEW.HTM里设置断点, 在调试器里检查变量"me":
clipboard5.png
通过这个路径能找到存储在内存中的200条搜索结果:
{O:5768*\CLASS-POOL=CL_BSP_WD_COLLECTION_WRAPPER\CLASS=LCL_COLLECTION_REF}-IF_BSP_WD_COLLECTION_REF~COLLECTION
clipboard6.png
2. 当我点第二页的超链接后:
clipboard7.png
后台生成好的针对从第21行到第40行记录的html源代码可以在Chrome开发者工具中观察到,如下图所示:
clipboard8.png
那么后台如何得知应该从第21行开始准备其html源代码呢?这个索引信息是从前台传到后台的,通过http请求头部的字段:ItemTree_visibleFirstRow.
如果您搞不清楚类似下图这种前缀C36_W138_V139_的生成逻辑,请参考我的博客 WebClient UI element ID generation logic
clipboard9.png
在方法CL_THTMLB_CELLERATOR~GET_REQUEST_PARAMETERS设置断点,找到后台是在何处解析该前台请求传入的visibleFirstRow:
clipboard10.png
在BSP渲染类CL_THTMLB_CELLERATOR里,这个变量gv_visible_first_row被用于渲染的起始索引:lv_current_row_index:
clipboard11.png
每一行的每一个单元的源代码在循环里依次生成好。循环基于表的列定义,当前我系统里默认的配置,搜索结果有8列:

file:///C:/Users/i042416/AppData/Local/YNote/data/cle.ee@163.com/59b928aa7dff4589b243ae83f8ad1277/2b0ffa1e_hd.jpeg
file:///C:/Users/i042416/AppData/Local/YNote/data/cle.ee@163.com/0fc873184a6b4033b793576e9dea7001/6ad55dd8_hd.jpeg
出于调试目的,您可以在变量GT_TABLE_ENTRIES里查看生成好的用于当前页面显示的html源代码:

file:///C:/Users/i042416/AppData/Local/YNote/data/cle.ee@163.com/18dc3d0ee8654e61abe52b8244950185/70c4a205_hd.jpeg
比如对于第二页,索引从21开始:

file:///C:/Users/i042416/AppData/Local/YNote/data/cle.ee@163.com/70be5721edf14a6a86eba91e6a08561f/10991d75_hd.jpeg
以40结束:

file:///C:/Users/i042416/AppData/Local/YNote/data/cle.ee@163.com/9cf516bbd50d4dcf904384da3a90679d/a9d9717e_hd.jpeg
为什么变量gt_table_entries有168条记录?
每页默认显示20条记录,加上1行表头,每条记录8列,所以最后是( 20 + 1 ) * 8 = 168
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙":
公众号logo.png
file:///C:/Users/i042416/AppData/Local/YNote/data/cle.ee@163.com/bfdf67fa2c91434db1d9de6456ceffb6/1845c8b1_hd.jpeg



clipboard2.png
clipboard3.png
clipboard12.png
clipboard13.png
clipboard14.png
clipboard15.png
clipboard16.png
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2018-4-2 08:26 | 显示全部楼层
没看明白,继续学习中。。。非常感谢!
Thank you so much!

使用道具 举报

回复
认证徽章
论坛徽章:
93
 2014年世界杯参赛球队: 德国
日期:2014-06-18 18:46:432013数据库大会纪念章
日期:2015-04-23 10:33:192014数据库大会纪念章
日期:2015-04-23 10:33:192015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24ITPUB长老会成员
日期:2015-05-07 15:11:10秀才
日期:2015-07-06 10:38:32秀才
日期:2015-07-06 10:38:32秀才
日期:2015-07-15 13:06:49秀才
日期:2015-07-30 08:48:442012数据库大会纪念章
日期:2015-04-23 10:33:19
发表于 2018-4-27 20:34 | 显示全部楼层
支持一下

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

【有奖讨论】解决存储挑战了解一下
奖品:米家车载空气净化器 、米家声波电动牙刷 、小米运动蓝牙耳机

在数字经济时代,井喷式增长的数据,在释放大量商业价值的同时,也随之对企业的IT基础设施带来了不容忽视的挑战!如何存储、管理、使用这些数据呢?这是一条比以往更艰难的路~

活动时间:9月20日-10月11日

参与讨论>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表