S/4HANA for Customer Management里的搜索分页处理
这篇文章的英文版我发在了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_WRAPPER\CLASS=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
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:


S/4HANA for Customer Management里的搜索分页处理的更多相关文章
- Hello World, S/4HANA for Customer Management 1.0
SAP CRM的前世今生 在我之前的微信公众号文章 SAP的这三款CRM解决方案,您能区分清楚么我曾经提到过我作为成都SAP研究院CRM产品开发团队的一员工作过一段时间. 我向在SAP德国总部工作的德 ...
- S/4HANA和CRM Fiori应用的搜索分页实现
在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Customer Management里采用 ...
- SAP UI 搜索分页技术
搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...
- Elasticsearch系列---搜索分页和deep paging问题
概要 本篇从介绍搜索分页为起点,简单阐述分页式数据搜索与原有集中式数据搜索思维方式的差异,就分页问题对deep paging问题的现象进行分析,最后介绍分页式系统top N的案例. 搜索分页语法 El ...
- php搜索分页
最近做搜索分页的时候,发现第一页显示正常,点击到下一页的时候,显示结果变成了搜索全部内容. 仔细查看代码,发现当第一次输入关键词,提交到查询控制器的时候,表单提交的关键字不为空,可是点击到下一页的时候 ...
- Yii 框架ajax搜索分页
要想实现ajax搜索分页 其实很简单 第一步:在 Yii 框架自带的搜索和分页正常运行的情况下,在视图层
- 02 - Unit08:搜索笔记功能、搜索分页、处理插入数据库乱码问题
搜索笔记功能 按键监听事件 $("#search_note").keydown(function(event){ var code=event.keyCode; if(code== ...
- SSM框架——实现分页和搜索分页
登录|注册 在路上 在路上,要懂得积累:在路上,要学会放下:我在路上!Stay hungry,Stay foolish. 目录视图 摘要视图 订阅 [公告]博客系统优化升级 ...
- maven仓库里如何搜索三方包?查看流行软件
问题 这个仓库提供了搜索,但是功能比较弱,不支持groupid/artfactid的联合搜索 https://mvnrepository.com/ 解决 直接在搜索的url里添加groupid和art ...
随机推荐
- hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map
题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...
- 微信小程序填坑之旅
一.解决scroll-view的滚动条问题 1.出现场景css. 有些场景下scroll-view是不需要滚动条的,比如顶部导航栏的横向滑动.而在单页的css样式中加入特定代码不能影响到全局的样式 2 ...
- 修改阿里云ESC Centos 7.4 防火墙开放端口
例如系统:Centos 7.4操作如下 1,进入 cd /etc/firewalld/zones/ 目录 2,编辑 vim public.xml 3,按i或insert键进入编辑模式 4,在<z ...
- django ORM 连表查询
db_index=True 如果设置该字段就可以设置索引 auto_now_add 代表设置创建时候的时间 auto_now 每次更新数据记录时会更新该字段 to_field 设置要关联表的字 ...
- mybatis CDATA引起的查询失败
<![CDATA[ ]]> 在被CDATA包围的所有字符串不会被mybatis解析, 直接写入sql了 CDATA应该只用在特殊字符前后,不能用在<if> <foreac ...
- 【ACM】蛇形填数 - 逻辑怪
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 1 ...
- QQ号_保存_20180124
1.1337978907 (密码:33+我的名字全小写全部拼音) 2. 3. 4. 5.
- robotframework使用过程中遇到的一些问题
问题1: 在ride上import library,显示红色解决办法:根据菜单栏tools--view ride log提示依次安装缺少的模块,包括natsort.xlrd.xlwd.xlutils, ...
- [转]jQuery调用ASPX返回json
本文转自:http://www.cnblogs.com/fire-phoenix/archive/2009/11/13/1614146.html 本文介绍如何在ASP.NET(ASP.NET/AJAX ...
- Homebrew 配置
使用ruby脚本安装完成homebrew之后, 需要配置三个源以及添加一些环境变量 1. export HOMEBREW_NO_AUTO_UPDATE=true # 不自动检查更新 2. cd $(b ...