OData是一种基于REST的开放数据协议
REST通用操作包括:GET、POST、PUT、DELETE、PATCH
OData相关事务码:
SEGW OData的创建
/N/IWFND/MAINT_SERVICE 在Gateway上注册,激活OData service
/N/IWFND/GW_CLIENT 在SAP Gateway Client上直接进行OData测试
/N/IWFND/ERROR_LOG 查看OData使用过程中产生的错误信息
OData服务结构:
官方测试URL:http://services.odata.org/V3/OData/OData.svc/
有一个或多个 collection(集)
collection href= 后跟的是实体集名称(区分大小写)
(1)服务文档(相当于概览类里有几种方法):
以JSON格式显示:
http://services.odata.org/V3/OData/OData.svc/?$format=json
以XML格式显示:
http://services.odata.org/V3/OData/OData.svc/?$format=xml
(2)服务元结构文档(相当于显示方法参数):
http://services.odata.org/V3/OData/OData.svc/$metadata
标签解释:
<EntityType> 实体包含属性的详细展示
<EntityContainer>此服务中所有的实体集合
<Association>关联(类似于外键)
<NavigationProperty>导航属性 ?暂时搞不懂
OData操作(参数):
1)创建:
POST 只能是新增,如果操作成功则会返回新增加的条目信息,返回201消息。
2)更新:
PUT 更改,需要提供主键信息来唯一确认要调整的条目,返回204消息。
PATCH局部更新,首先调用GET DETAIL方法来获取不会进行更新的所有属性,然后将这些值与通过PATCH请求发送的属性合并,最后使用实体集的标准更新方法执行更新。
3)删除:
DELETE删除,需要提供主键信息来唯一确认要调整的条目,返回204消息。(可以通过sap:deletable来指定该实体是否允许被删除)
4)查询:
GET查询,返回200。
多条查询时,sap:addressable控制是否可以查询,
对 REQUIRES FILTER 进行设置 设置必须提供过滤器。
单条查询(Single Read) 时,需要指定实体的主键,主键放在代表实体集合名字后边的括号中。
如果主键只包含一个属性,那么无须指定属性名称。
查询选项:选择($select)、筛选($filter)、排序($orderby)、限定范围($top)、($skip)、($inlinecount)、
统计($count)、选区层级($expand)、格式化($format)
① 选择 $select:查询选项可以指定查询的属性信息,不指定的话返回所有属性值。
例:https://services.odata.org/V3/OData/OData.svc/Products?$select=Name
只查询ID属性信息
② 筛选 $filter:查询符合filter条件的数据。
可用的过滤操作符:eq、ne、gt、ge、lt、le、and、or、not 等
可用的字符串函数:contains(包含某个子字符串)、not contains(不包含某个子字符串)、
startswith(以某个子字符串开头)、endswith(以某个子字符串结尾)、length(字符串的长度)、
indexof(某个子字符串首次出现的位置)、replace(替换某个子字符串)、substring(提取某个子字符串)、tolower(转换字符串为小写)、toupper(转换字符串为大写)、trim(去掉字符串中的空格) 等
例:https://services.odata.org/V3/OData/OData.svc/Products?$filter=Name eq 'Milk'
③ 排序 $orderby:根据实体集中的任何属性进行排序,OData不会默认排序。默认是升序(asc升序 / desc降序);指定多个属性排序时,属性与属性之间要用逗号隔开,导航属性(NavigationProperty)不能排序。
例:https://services.odata.org/V3/OData/OData.svc/Products?$orderby=ID desc
④ 限定范围
$skip 指定跳过前几条
$top 获取实体集的前几条
例:https://services.odata.org/V3/OData/OData.svc/Products?$skip=2&$top=1
$inlinecount 返回当前查询条件的所有记录数+内容;有allpages和none两个参数,前者返回查询数据集的数量,后者返回结果不包含数据集的数量
例:https://services.odata.org/V3/OData/OData.svc/Products?$inlinecount=allpages
⑤ 统计
$count 返回符合条件的条目数(数目)
例:https://services.odata.org/V3/OData/OData.svc/Products/$count
⑥ 选取层级 ?
$expand 相当于外键查询 可以从多个实体类型读取数据,要使用$expand,必须在模型中定义相应的导航属性。
例:
⑦ 格式化
$format 定义了OData调用及返回的响应格式,可以指定XML、JSON
例:https://services.odata.org/V3/OData/OData.svc/Products/?$format=json
建议使用JSON
OData Project
① Data Model
导入数据库表,定义Entity(实体)
② Service Implementation
CRUD增删改查
③ Runtime Artifacts
重定义类方法:
Data Provider Base Class ( suffix_DPC ) 属于ABAP类,是基于OData模型的CRUD操作,搜索操作和function import的实现;
Data Provider Extension Class ( suffix_DPC_EXT ) 属于DPC的扩展类,重定义实现自定义逻辑;
Model Provider Base Class ( suffix_MPC ) 属于ABAP基类,一般不干预这个类,如有需求要修改OData模型,点击Generate后,MPC代码会重新生成;
Model Provider Extension Class ( suffix_MPC_EXT ) 属于MPC的子类,可以用于在模型上添加额外一些数据,Generate后不会覆盖代码。
两个模型
Registered Model ( suffix_MDL ) 是OData服务模型的技术名称;
Registered Service ( suffix_SRV ) 是OData服务的技术名称。
④ Service Maintenance
服务注册(Register)
/N/IWFND/MAINT_SERVICE
进行Gateway Add Service 添加服务操作