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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp6实现简单定时任务

thinkphp6实现定时任务 创建定时任务文件定义指令编写Test.php代码运行测试 创建定时任务文件 Test类名根据自己的需要修改 php think make:command Test testcommand文件夹在app目录下没有需要自己创建 运行上面的命令后会在command下 多一个Test.php文件 定义指令 在conf…

Java内存模型之原子性

文章目录 1.什么是原子性2.Java中的原子操作有哪些3.long和double的原子性4.原子操作 原子操作 ! 原子操作 1.什么是原子性 一系列的操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分割的。 注意&#x…

探索SQL性能优化之道:实用技巧与最佳实践

SQL性能优化可能是每个数据库管理员和开发者在日常工作中必不可少的一个环节。在大数据时代,为确保数据库系统的响应速度和稳定性,掌握一些实用的SQL优化技巧至关重要。 本文将带着开发人员走进SQL性能优化的世界,深入剖析实用技巧和最佳实践…

深度学习笔记(四)——TF2构建基础网络常用函数+简单ML分类网络实现

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 TF2基础常用函数 1、张量处理类 强制数据类型转换: a1 tf.constant([1,2,3], dtypetf.floa…

装机必看:电脑Bios里的CSM兼容模块是啥?打开有啥用?

前言 最近朋友装了一台新的电脑,用的i5-13490f的CPU。但是由于预算有限,手边只有一块GTX650ti,没办法,只好先这么用着了。 谁知道出现了个大问题:电脑开机居然没办法显示。 由于电脑所有的配件基本上都是全新的&…

随身WiFi选购要点!从此不再踩坑!高性价比高口碑随身wifi推荐,随身WiFi哪个牌子最好用

一、买随身WiFi注意事项 1.随身WiFi常见的芯片高通、马维尔和中兴微,其中高通芯片大部分都是报废手机拆下来的二手芯片,价格相对来说比较低,那种一二十块的随身WiFi,常用这种,优点便宜,缺点设备发烫&#…

视频转码:掌握mp4视频格式转FLV视频的技巧,视频批量剪辑方法

在多媒体时代,视频格式的转换成为一种常见的需求。把MP4格式转换为FLV格式,FLV格式的视频文件通常具有较小的文件大小,同时保持了较好的视频质量。批量剪辑视频的方法能大大提高工作效率。下面来看云炫AI智剪如何进行MP4到FLV的转码&#xff…

轻量化的yolov8部署到安卓Android手机端

一、pytorch环境配置和yolov8源码安装 首先在电脑上需要配置好pytorch环境,和yolov8源码的下载 然后针对yolov8做自己的轻量化改进 二、下载Android Studio和ncnn-android-yolov8 1. Android Studio官网链接: 下载 Android Studio 和应用工具 - And…

企业数据中台整体介绍及建设方案:文件全文51页,附下载

关键词:数据中台解决方案,数据治理,数据中台技术架构,数据中台建设内容,数据中台核心价值 一、什么是数据中台? 数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,…

面试算法119:最长连续序列

题目 输入一个无序的整数数组,请计算最长的连续数值序列的长度。例如,输入数组[10,5,9,2,4,3],则最长的连续数值序列是[2,3,4,5],因此…

2024年前端面试中JavaScript的30个高频面试题之中级知识

基础知识 高级知识 13. 什么是闭包?闭包的用例有哪些? 闭包是一个功能,它允许函数捕获定义该函数的环境(或保留对作用域中变量的访问)即使在该作用域已经关闭后。 我们可以说闭包是函数和词法环境的组合,其中定义了该函数。 换句话说,闭包为函数提供了访问自己的作用域、…

爬虫利器一览

前言 爬虫(英文:spider),可以理解为简单的机器人,如此一个“不为名利而活,只为数据而生,目标单纯,能量充沛,不怕日晒雨淋,不惧寒冬酷暑”的家伙,…

Casper Labs 与 IBM Consulting 合作,AI透明度、审计能力的新方案

​ “全新解决方案,旨在帮助企业更有效地管理训练数据,这些数据由不同的组织通过生成式人工智能系统产生” 企业区块链软件和服务提供商 Casper Labs 与 IBM Consulting 共同宣布,它们将联手推出新的解决方案,以帮助客户在其人工…

VSCode 搭建Java开发环境

笔者使用最多的语言是C,也使用过不少其它语言,像Erlang,Python,Lua,C#等等,目前项目中在使用Go,但是没使用过Java。最近看到C#夺冠,首次荣获 TIOBE 年度编程语言,同时也看…

拯救者y9000p安装linux、windows双系统。

首先需要准备启动盘 我用的是Win32DiskImager来做的。资源使用的是ubuntu-20.04.6-desktop-amd64.iso。别用低版本,失败很多次之后的教训。 磁盘管理-磁盘分区-右键-压缩卷 这边分区出来之后,不要分配。安装时候会自动分配的。 重启之后F2进去BIOS设置…

使用ArduinoMqttClient库连接阿里云,并实现发送接收数据(ESP8266)

文章目录 引言一、MQTT理论部分二、使用MQTT.fx接入物联网设备三、使用ESP8266连接阿里云四、参考例程 引言 阿里云物联网平台的接入方式有很多种,从阿里云提供的开发文档可以看到,支持的接入协议有MQTT、HTTPS、CoAP、JT/808、GB/32960协议等等&#x…

数据库悲观锁 select for update的详解

一 作用 1.1 结论 在mysql中,select ... for update 仅适用于InnoDB,且必须在事务块中才能生效。Innodb引擎默认是行锁。 Select .... from where .... for update 如果在where的查询条件字段使用了【主键|索引】,则此命令上行锁。否…

2024,传统鞋服的“高端梦”该醒了

文 | 螳螂观察 作者 | 图霖 “一千块都不要的波司登,宝贝们还不冲吗?” 入夜,一位身着羽绒服的美女主播在灯火通明的直播间正声嘶力竭地反复呐喊。 一群不知是托还是真实消费者的用户在评论区敲出自己的身高体重,想从主播那得…

【计算机组成原理】IEEE 754 标准定义的浮点数表示格式

IEEE 754 IEEE 754是一种由美国电气和电子工程师协会(IEEE)制定的标准,用于定义浮点数的表示和运算。这个标准定义了浮点数的格式、舍入规则、特殊值的处理以及算术操作的执行方式。 IEEE 754浮点数标准主要定义了两种浮点数格式&#xff1…

基于LVGL编写的windows串口工具: LCOM

LCOM: Serial Port Tools based on LVGL (PC Software) 一直以来我都想用LVGL做一个真正意义上的PC软件,来验证或者表达LVGL出色的特性,现在我用LCOM做到了! LCOM 是一个基于LVGL编写的串口工具,界面简洁,功能出色&a…