如何使用 SAP HANA 上的 ODATA 接口?

在阅读本文前,请确保:
1.你拥有一个 HANA 账户,没有的话可以访问 http://hanatrial.ondemand.com/ 申请免费体验账户;
2.新建一个 HANA Instance,参考 tutorial :Getting your free Trial HANA Instance on SAP HANA Cloud Platform
3.新建一个 HANA XS Application,参考 tutorial :Hello World! Develop your first SAP HANA Application using the SAP HANA Web-based Development Workbench

How to use ODATA interface on SAP HANA?

在 SAP HANA 中,我们通常意义上的 database 是以 schema 的形式呈现给开发者的。

对数据库中的数据进行直观的操作有两种方法:
1.一种是官方比较推荐的,也是我们内部开发中比较推崇的方法:Cloud。
在云端做相关的编辑和修改。具体是通过 SAP HANA Cloud Cockpit 中的 SAP HANA Web-based Development Workbench 进入 catalog 中打开 SQL console 进行操作;
2.另外一种则是通过安装了 HANA 插件的 Eclipse ,连接到 HANA Cloud System 中进行相关的操作。

我们都知道,每个 HANA System 上都会跑若干个 Instance, 每个 Instance 相当于一个节点,你可以在这个 Instance 上建立若干个 XS Application, Java Application 和 HTML5 Application。
这些 Application 要从后台的数据库对数据进行增删改查有很多方法,例如我们熟知的 JDBC,ODBC 和 ODATA 等等。
我们这次重点要说的是 ODATA,是一种描述如何创建和访问Restful服务的OASIS标准。SAP 在 HANA 相关的开发中极力推崇使用这个标准,并在 HANA 中有相关的实现。
在 HANA 的 Hello World 中,官方用一个简单的例子,演示了如何从一个 table(’SYS’.’DUMMY’)中取出数据在前端进行呈现,用的就是 ODATA。

在 SAP HANA 上使用 ODATA 接口读取数据库中的数据其实就两步:

Step1:配置 ODATA Service

在 HANA 的 Hello World 中,ODATA Service 的定义文件在 https://github.com/SAP/cloud-hana-helloworld/helloworld/dummy.xsodata
我们来看下具体内容:

SYS是指名为“SYS”的 schema ,DUMMY则是其中的table,很简单的一句话就定义了一个 ODATA Service,访问这个 *.xsodata 就能使用这个 ODATA 接口,从 SYS 中的 DUMMY 获取数据。

当然如果你这个时候直接访问的话,会提示你没有权限,因为你的当前用户没有访问这个 Application 的权限。

Step2:允许 user 访问 application

于是我们进入 Step2,我们来看跟用户权限相关的三个文件,分别是 .xsaccess,.xsprivileges 和 *.hdrole, 分别是 入口文件,权限文件和规则文件。

首先建立权限文件 .xsprivileges,application 通过这个文件进行权限请求,内容是:

然后建立入口文件 .xsaccess:

再然后是规则文件 *.hdrole:

在我们定义后这三个文件以后,我们需要用一句 SQL 进行权限更新,这样我们用户才有了对这个 application 的权限。

{{USER_NAME}} 是你的用户ID,我们可以多次运行该语句为多个的用户添加访问这个application的权限。

成功执行后,我们就可以通过访问这个 *.xsodata 文件,来进行相关的数据操作。

以上内容在 SAP HANA 的 tutorial :Hello User! Authorize your first User to access a SAP HANA Application using the SAP HANA Web-based Development Workbench 中可以找到

我们在这个基础上再扩展一下,如果是访问其他数据库中的table呢?是不是直接修改Service里面的内容就可以呢?其实并没有这么简单,因为你要解决不同schema的权限问题。

在 catalog 中,我们可以看到有这么几个 schema: HCP,SYS,多个 DEV_* 和多个 NEO_* 。其中 DEV_* 的 schema 是开发用户的 private schema,是不暴露给 application, NEO_* 才是 application/development schema。

我们在其中一个 NEO schema 中新建一个简单的 table,如 PEOPLE,COLUMNS 有 NAME 和 AGE:
在 catalog 中的 NEO_* 一项右键打开 SQL Console,执行:

在原 application 中我们定义一个新的 .xsodata,为 people.xsodata ,内容为:

成功保存,没有报错,说明我们是访问的到这个 table 的,但是当我们接下来用 application 访问这个 xsodata 文件从 table 中取数据的时候,并没有数据出来。

因为我们没有对数据库进行增删改查的权限。

Step3:获取 SELECT,UPDATE,INSERT,DELETE权限

我们需要在 *.hdrole 中加上这么一句,添加增删改查的权限:

在该 NEO_* schema 中打开 SQL Console,执行:

成功执行后,就可以通过 people.xsodata 获取 table 中的数据了。

如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: 如何使用 SAP HANA 上的 ODATA 接口?

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
支付宝捐赠
anyShare分享到:

发表评论