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

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

在我的博客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。


image.png

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



image.png

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


image.png


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



image.png

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


image.png


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


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


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


image.png


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



image.png

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


image.png


image.png


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



image.png

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



image.png

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



image.png

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


image.png


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


image.png


CRM Fiori应用的搜索分页实现

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


image.png


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


image.png




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


image.png


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


image.png


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


相关文章
|
1月前
|
存储 数据管理 数据处理
SAP CRM 里 Attachment 搜索的实现逻辑介绍
SAP CRM 里 Attachment 搜索的实现逻辑介绍
19 0
|
6月前
|
JavaScript 前端开发
SAP CRM product 主数据搜索,如何采用 ABAP 代码来实现
SAP CRM product 主数据搜索,如何采用 ABAP 代码来实现
24 0
|
SQL Web App开发 存储
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这两个应用为例来介绍。
112 0
S/4HANA和CRM Fiori应用的搜索分页实现
|
Windows
SAP Fiori 应用无法根据contact搜索的原因分析
SAP Fiori 应用无法根据contact搜索的原因分析
SAP Fiori 应用无法根据contact搜索的原因分析
|
SQL 前端开发 JavaScript
SAP UI 搜索分页技术
搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来。今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理。后半部分由SAP成都研究院菜园子小哥王聪向您介绍Twitter的懒加载实现。 关于王聪的背景介绍,您可以参考他的前一篇文章:SAP成都研究院非典型程序猿,菜园子小哥:当我用UI5诊断工具时我用些什么。
147 0
SAP UI 搜索分页技术
|
前端开发
help.hybris.com和help.sap.com网站的搜索实现
help.hybris.com和help.sap.com网站的搜索实现
help.hybris.com和help.sap.com网站的搜索实现
SAP CRM Fiori应用My Opportunity标题显示不正确的问题分析
这个问题最后的分析结果令人啼笑皆非。 问题的症状:CRM Fiori应用My Oppportunity, 点击任何一个Opportunity进入明细页面,应该看到的标题是Opportunity detail,而不是现在看到的“New Opportunity”- 这应该是点击New之后进入的Opportunity创建页面的标题才对。
SAP CRM Fiori应用My Opportunity标题显示不正确的问题分析