SAP OData(三)Query Option

2024-01-13 12:20
文章标签 sap option query odata

本文主要是介绍SAP OData(三)Query Option,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Query option是指客户端在获取EntitySet的URL中后缀的一些指令,在第一篇第四小节我们已经见识了一部分Query指令。在下面表中列出了最重要的QueryOption。注意指令在URL中必须小写。

Operation

Query Option

Filtering and projecting

$filter and $select

Sorting

$orderby

Client-side paging

$top, $skip and $inlinecount

Counting

$count

lnlining

$expand

Formatting

$format


一,$filter

框架不会提供默认Filter,我们必须在service implemenation中自己实现Filter,也就是在Get_entityset方法的重写中自己代码实现Filter,框架会将Filter转化成Select-Option形式以方便ServiceImplementation中代码的处理。

支持以下元素:

由ComplexType形成的多层结构如第一篇中的Item,使用斜杠访问成员【http..ser/Item$filter=DETAIL_INFO/UNIT eq 'KG'】

逻辑运算符【not/and/or】:都必须小写,注意not加单个条件不需要括号,否则要括号明确not的结合方向

关系运算符【eq等于/ne不等/lt小于/le小等/gt大于/ge大等】:都必须小写,=只能出现在filter之后不能当做eq使用

函数 contains(MATNR,'abc')

实例【$filter=(not startswith(MATNR, 'S')) and ITMNO eq '0020'】

框架解析为Select-Option形式【MATNR:E CP S*】和【ITMNO:I EQ 0020】


二,$select

实现projection效果,限定返回实体的property。简化返回字段对接口性能,乃至后端功能都有提升。

实例【$select=DOCNO,MATNR】

注意字段名区分大小写,多字段逗号分隔;

投影由框架自动实现,我们重写DPC时不需要自定义代码,但是可以通过如下代码获取传入的投影字段。

io_tech_request_context->get_select_entity_properties()


三,$orderby

很简单,在第一篇第四节已经说过了,多列逗号分隔,默认asc

实例【$orderby=ITMNO,MATNR desc】


四,$top $skip

客户端分页常用于移动端应用,有限的页面空间要展示大量的实体集必须要分页展示,在页面上有一些显示元素来标识分页信息:实体集的总数量,当前展示的分页数,当前分页展示的行位于实体集的从几行到几行。

比如在UI5页面中放入一个Table控件,绑定了OdataModel(下图红框),并设置为可分页且每页5行(下图蓝框)

在页面加载第一批数据时,我们可以看到浏览器请求地址中$skip=0&$top=5限定了取值范围,inlinecount=allpages用于获取数据总条数(下一小节详述)

我们点击页面上的More获取第二次数据,地址中的$skip=5&$top=5限定了第二批数据取数范围


五,$inlinecount

获取满足filter条件的Entity行数,这样客户端可显示总行数而且能计算出分多少页;该指令有以下两种用法

$inlinecount=allpages 返回数量

$inlinecount=none 不返回数量

在DPC的Get_entityset中我们用如下代码

IF io_tech_request_context->has_inlinecount( ) EQ ABAP_true. //allpages为真,none为假

es_response_context-inlinecount = '3'. //将计算数量放入该返回参数

ELSE.

clear es_response_context-inlinecount.

ENDIF.

在返回的报文中,将多出来一个标签表示entity总数量


六,$count

获取Entity数量;它很特别,

其一URL没有?来引导【https://www.123.com:44301/sap/opu/odata/sap/Y_TEST_ODATA4_SRV/ItemSet/$count】

其二,返回body中只有一个数量,没有其他任何内容

在DPC的Get_entityset中我们可以用如下代码判断是否客户端请求为count

io_tech_request_context->has_count( ) EQ ABAP_true

es_response_context-count = '998'.

如果使用自定义代码直接赋值,最后返回为所赋值,否则系统自动根据所得et_entityset的行数返回,考虑到效率如果只想获取$count我们没必要获取entityset,我们可以使用上面自定义代码直接select count(*)并返回。

$count与$inlinecount的区别:$count返回报文只有数量,而$inlinecount可以跟数据一起返回数量,另外$inlinecount必须自定义代码显式赋值


七,$expand

借助Navigation关系,将互相关联的多个Entity以层级方式在报文中返回。

实例【https://xxxxxx:44301/sap/opu/odata/sap/Y_TEST_ODATA4_SRV/HeaderSet('4500000002')?$expand=Association_To_Item】

最终形成的报文在导航Link中加了一个inline标签,而导航目标的EntitySet就包含在这个标签如下图ItemsData

上例中Header的Key可以不指定,多个导航逗号分隔,假设有三个Entity关联为A-B-C

我们以A为URL起点【https://xxxxxx:44301/.._SRV/A('01')?$expand=A_To_B,A_To_B/B_To_C】

我们以B为URL起点【https://xxxxxx:44301/.._SRV/B('01')?$expand=B_To_A,B_To_C】

$expand导航默认会使用get_entity和get_entityset来取数,这可能导致多次取数的性能影响,_DPC_EXT还提供了get_expanded_entityset方法来一次性取出所有关联实体(如果实现了该方法就不会通过get_entityset取数了)


八,$format

格式选项决定了OData调用和响应的格式,OData2.0支持XML和JSON两种格式,其中XML是默认的。用法【$format=json】

【$format=xslx】指明响应是一个二进制excel文件流。注意该格式只支持NetWeaver7.4以上,且有很多限制譬如不支持$expand

这篇关于SAP OData(三)Query Option的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601440

相关文章

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

SAP项目中沟通的几点总结

最近参与的公司SAP RISE项目,由于是国际项目,全程远程实施,所以沟通显得尤为重要,有几点总结跟大家分享。   1.     提前沟通 提前沟通比事后沟通效果好太多。作为项目管理者,需要把下一步的计划等信息提前通过一定的形式(会议、邮件、Teams Channel等)传播出去。而不是等着这个事情发生了,项目组成员来询问,一方面这样很浪费时间,也会对项目进队产生影响,所以作为项目管理者永

构建现代API:FastAPI中Query与Body参数的最佳搭配

在FastAPI中,Query 和 Body 是两种不同的依赖注入器,它们的应用场景取决于你的具体需求。以下是它们各自常见的使用场景: Query 参数 使用场景: 当你需要从URL中获取一些简单的参数时,例如过滤、排序、分页等。 当数据量不大,且可以作为URL的一部分安全传输时。当数据不需要复杂的结构时。 Body 参数 使用场景: 当你需要发送较为复杂的数据结构时,例如包含多个字段

SMIDI-SAP接口配置手册

目录 一、 SAPERP相关接口配置(必要条件) 1. SAP ERP 配置 1.1 配置

【硬刚ES】ES基础(二十) 单字符串多字段查询:Dis Max Query

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。

【硬刚ES】ES基础(十九) Query Filtering 与多字符串多字段查询

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。

[LeetCode] 303. Range Sum Query - Immutable

题:https://leetcode.com/problems/range-sum-query-immutable/description/ 题目 Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. Example: Given nums

SAP HCM 如何计算缺勤实数

导读 INTRODUCTION 缺勤实数:这几天好几个朋友问题有什么办法可以计算出缺勤的时长,因为计算时长需要和排班去匹配,所以逻辑复杂度还是比较高的,希望有标准的函数能完成。其实SAP有个标准的函数可以完成,复杂的时候填充的参数特别多,所以今天介绍一个函数PA30保存2001的时候会调用,这样可以知道标准参数需要填充什么值。 作者:vivi,来源:osinnovation。 一、具体函数

Oracle - ORA-01789: Query block has incorrect number of result columns

一、原因     这个错误一般是在执行表之间的相加(union),相减(minus)等SQL语句时,两个个查询块具有不一致的结果列数所导致的。 二、方案     只要将两段SQL语句的列数调整为一致就可以解决。使用union时,要注意数据库字段的格式要一致,如varchar和nvarchar是不一样的。

D365 query

文章目录 简单查询多个表联接一二二三 简单查询 Query query;QueryBuildDataSource qbds;QueryBuildRange qbr,QueryRun queryRun;query = new Query(); //新建查询对象qbds = query.addDataSource(tableNum(