首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈HANA中XS应用的后台服务-OData

通过HTTP访问SAP HANA数据库表中的数据主要有两种方法:ODATA方式和XSJS方式。

1.ODATA方式

ODATA是一种基于数据资源对象的WEB协议,可以用来查询数据和对数据进行更新操作。

2.XSJS方式

XSJX是“XS服务器端JavaScript”的缩写,在XS应用中也可以直接使用JavaScript编程语言对数据库中的数据进行读取等操作,其语法与Java使用JDBC API去连接数据库,然后执行SQL的方式类似。

用户在浏览器中使用XS的应用发起一个HTTP的GET请求时,可以将参数和值放在请求中,直接发送给这个XSJS程序。这个XSJS程序从数据库取得数据之后,可以使用JSON.stringfy()函数直接将SQL查询返回的结果集转换成JSON格式。接着将其放入repsonse中,从而返回给UI5前端进行解析,最后展现在浏览器中。

01

ODATA服务——数据读取

发布之后的OData是运行在XS服务器之中的。SAP HANA支持使用HTTP命令(PUT、DELETE、POST、GET)对数据进行增删改查。

示例:

新建设计期对象:订单抬头表OHEAD,订单行项目表OITEM,商品文本表OGOODTEXT,并激活。

插入一写数据:

创建ODATA服务:

在SAP HANA的官方开发指导文档中明确提及,尽量不要使用Catalog中的数据库对象直接发布为一个ODATA服务,最好使用设计期的对象来发布ODATA服务。

发布的ODATA服务默认支持CRUD(Create、Read、Update、Delete)操作,可以使用关键字(create/update/deleteforbidden)对服务进行限制。

在一个ODATA FILE中,我定义了2个ODATA服务,作为示例。

这个OData文件中有两个OData服务,都是使用设计期对象OHEAD表作为数据源,给外部应用程序提供数据访问。第一个OData的别名为TBOHEAD1,提供了OHEAD表所有字段,支持CRUD操作。第二个OData的别名为TBOHEAD2,提供了OHEAD表的OID和CREATEBY字段,不支持删除操作。

1.访问ODATA服务:

打开ODATA文件单击运行按钮右边的小箭头→run as→XS Server,即可快速通过浏览器访问这个ODATA服务的URL。

2.Key主键指定:

在OData服务中,如果引用的数据库对象是数据库表,那么OData服务无需指定Key,会使用该数据库表的主键(Primary Key)作为服务的Key(可以参考上面的例子)。

若OData服务引用的是视图,则需要为其指定主键,或使用generate local自动生成一个列作为主键。

经测试,HANA1.0 SP12版本即使在计算视图中指定了Key,在定义OData服务时仍需要为其指定Key,否则激活OData服务时会报错。

generatelocal自动生成的这个列中的值和数据库的记录值无关,也不会作为一个隐含的字段存储在数据库中,所以不能通过这个值在数据库中查询数据。generate local自动生成的这个列每次调用OData服务时生成的值都不同,且该键在返回的结果集是唯一的,因此仅仅可以让用户在结果集中浏览数据和直接定位。

3.投影

对于投影(Projection)操作来说,在OData中对数据库对象的信息进行投影是非常简单和方便的。通常有以下两种操作方式:

CAL000101:排除CAL_0001视图中TIME字段。

CAL000102:选择CAL_0001视图中CREATEBY和TIME进行发布。

4.对象关联

如果需要将两个数据对象合并起来发布成一个OData服务,并且两只之间的数据请求和查询还存在着一定一览关系,那么这里就会用到OData定义的Associations(关联)功能了。

这个例子仅仅定义了TBOHEAD和TBOITEM之间的关系,不能实现结果集数据导航跳转。

如果要在用户界面上实现以下功能:

单击OID(订单ID)字段的值,在详细的table控件中显示该order相关的所有的ITEM(行项目)信息列表。

除了用代码方式从OData所返回的两个集合中自己进行解析后关联,还可以使用【导航属性】。

访问这个OData的Url为:https://:

//ODATA_0003.xsodata/TBOHEAD?$expand=OID_MANY_ITEM&$format=json

结果:

添加多个导航属性:

5.聚合计算

聚合计算在OData服务定义中也是支持的,只不过用的比较少,因为一般以HANA的计算视图来发布OData,HANA计算视图默认聚合。当基于一个普通数据库Table发布OData服务时,可以使用聚合计算。

6.OData访问操作

对于OData数据访问操作来说,不同的编程语言有自己的实现方式,这里简单介绍URL的部分标准操作符。

02

ODATA服务——数据修改(CUD操作)

前端的UI发起了对数据进行修改的请求,OData可以将这些数据通过创建、删除、更新等操作反映到数据库表中。

当XS应用在访问一个基于数据库表发布的OData时,可以直接使用OData默认的PUT、DELETE、POST方法实现对数据的增、删、改操作。

但通常情况下我们会基于视图发布OData,这个时候我们就需要OData的Custom Exist(简称自定义出口)来实现数据修改操作。OData服务的自定义出口是通过一些关键字来定义的。

数据修改的关键字为:using;数据校验的关键字为before、after、precommit、postcommit。可以在这些关键字后面指定一个存储过程或JavaScript函数。这5种关键字对CREATE、UPDATE、DELETE操作有效,下面是一个例子:

当这些OData出口被前端UI5调用时,分为以下两种模式:

1.非批量提交模式

①执行before后的存储过程

②执行using后的存储过程

③执行after后的存储过程

⑤执行precommit后的存储过程

⑥执行postcommit后的存储过程

2.批量提交模式(以两条记录为例)

①执行before后的存储过程(第1条记录)

②执行using后的存储过程(第1条记录)

③执行after后的存储过程(第1条记录)

④执行before后的存储过程(第2条记录)

⑤执行using后的存储过程(第2条记录)

⑥执行after后的存储过程(第2条记录)

⑦执行precommit(第1条记录)

⑧执行precommit(第2条记录)

⑨执行postcommit(第1条记录)

⑩执行postcommit(第2条记录)

具体的应用方式需要按照实际项目的标准,本篇文章仅供参考。

本文章仅代表作者个人看法。

欢迎长按以下二维码关注

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G0JTXG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券