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

在我的博客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请求的参数$skip=0&top=25实现的。而总共命中条数140的显示通过另一个参数$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和$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和$top定义的参数之内的都被DELETE丢弃:

该实现或许不如S/4HANA采用OFFSET方式实现得直接,但是因为从数据库返回的仅仅是命中opportunity的GUID,因此也不会有太多额外的开销。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原文地址:https://www.cnblogs.com/sap-jerry/p/8683479.html

时间: 2024-10-05 03:47:04

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

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仍然是采用CR

SAP UI 搜索分页技术

搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院菜园子小哥王聪向您介绍Twitter的懒加载实现. 关于王聪的背景介绍,您可以参考他的前一篇文章:SAP成都研究院非典型程序猿,菜园子小哥:当我用UI5诊断工具时我用些什么. S/4HANA Fiori应用搜索分页实现原理 以S/4HANA Product Master Fiori应用为例,如果什么

SSM框架——实现分页和搜索分页

登录|注册     在路上 在路上,要懂得积累:在路上,要学会放下:我在路上!Stay hungry,Stay foolish. 目录视图 摘要视图 订阅 [公告]博客系统优化升级     [收藏]Html5 精品资源汇集     博乐招募开始啦 SSM框架——实现分页和搜索分页 标签: springMVC分页搜索分页mybatisssm 2014-05-21 11:09 5517人阅读 评论(9) 收藏 举报 分类: J2EE(9) 版权声明:本文为博主原创文章,欢迎转载,请注明地址. 目录(

SpringMVC分页和搜索分页

分页使我们经常需要使用的功能,昨天在Spring MVC中实现了简单的分页操作和搜索分页,在此记录一下.使用的框架为(MyBatis+SpringMVC+Spring). 首先我们需要一个分页的工具类: 1.分页 import java.io.Serializable; /** * 分页 */ public class Page implements Serializable { private static final long serialVersionUID = -319804844964

02 - Unit08:搜索笔记功能、搜索分页、处理插入数据库乱码问题

搜索笔记功能 按键监听事件 $("#search_note").keydown(function(event){ var code=event.keyCode; if(code==13){ 请求发送 } }) select * from cnshare cnshare_title like '%' 发送Ajax请求 事件绑定:键盘监听事件(keydown) 获取参数:keyword,作为模糊查询的基础 发送请求:/share/find.do 服务器处理 ShareController.

AJAX实现分页--模拟百度搜索分页

第一部分:效果与分析 1.百度分页组件: 2.自己实现的分页: 3.分析: 百度搜索分页,如果总页数大于10,用户最多只能看到10页内容,不足10页显示全部,当点击下一页时,数字页标向前移动一个单位,当点击上一页时向后移动一个单位. 第二部分:后台实现: 1.实现思路: 后台的处理思想是这样的,通过AJAX向后台发送请求,携带一个分页对象PageBean传过去,查询完毕后返回一个新的PageBean对象. 前台传入的PageBean对象参数: 属性 名称 是否必须 默认值 pageSize 每页

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

背景 2018年8月21日,订单搜索发布导致订单搜索分页失效.该发布有三个变更:1. 新增一个带详情的订单列表接口:2. 按照订单状态搜索的索引分流: 3. 支持自定义的from传参. 第三个变更只有一行代码,更像是搭了个顺风车, 但正是这行代码,导致搜索分页失效,整个发布失败,最终回滚. BUG分析 主要代码BUG 如下所示: 只是增加了一个 from 是否为空的判断. 看上去没有问题,可是如果构造器里初始化了 from ,再设置 page,那么新的 page 就不会生效. 反思 为什么没有检

如何让SAP S/4HANA的Material Fiori应用配置到Fiori Launchpad里

The PFCG role SAP_BR_PRODMASTER_SPECIALIST in UXT/928 is for S4 on premise usage and does not exist in some sandbox system. In this case, in order to test Product Master application in those system, you need to create a new PFCG role and assign to yo

如何用WebIDE打开并运行CRM Fiori应用

访问Web IDE url 在Web IDE里进行项目clone操作: https:// 选择clone完毕的项目,点击Run: 选择noShellIndex.html: 在项目根目录下添加一个文件: neo-app.json 之后即可成功运行: neo-app.json的源代码: { "routes": [ { "path": "/sap/opu/odata", "wattUsage": "odata_abap&q