通过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条记录)
具体的应用方式需要按照实际项目的标准,本篇文章仅供参考。
本文章仅代表作者个人看法。
欢迎长按以下二维码关注
领取专属 10元无门槛券
私享最新 技术干货