Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

1 OData 介绍

       OData 全称是Open Data Protocol, 即开放数据协议,由微软公司最初提出,它的主要用途便是通过Web来对数据库中的数据进行查询与更新。在SAP HANA XS Engine中提供了OData的实现,所以在开发基于XS Engine的应用程序时,如果使用OData来访问数据,将会十分方便与快捷。另外,OData也可以作为其他应用的数据源,不一定需要ODBC或者JDBC去访问SAP HANA中的数据。

       在当前的SAP HANA XS Engine中只提供OData 2.0 的支持,字符编码限制为UTF-8, 提供的数据以XML或者JSON格式返回,对于修改操作,例如CREATE, UPDATE 只提供JSON格式。

2 OData 基本使用

以下将通过具体的实例来说明OData的使用情况。

2. 1 数据准备

SAP HANA Studio中建立一个PRODUCT(测试用的schema:WEIYY)SQL 语句如下:

CREATE COLUMN TABLE "WEIYY"."PRODUCT" ("id" INTEGER CS_INT NOT NULL ,

      "category_id" INTEGER CS_INT,

      "name" NVARCHAR(50),

      "color" NVARCHAR(50),

      "length" INTEGER CS_INT,

      "width" INTEGER CS_INT,

      "height" INTEGER CS_INT,

      "price" DECIMAL(10,

     2) CS_FIXED,

      "desc" NVARCHAR(500),

      "desc_cn" NVARCHAR(500),

      PRIMARY KEY ("id"));

向其中插入的数据如下:

             我们将利用OData来暴露这个表中的数据,从而通过Web进行访问。

2.2 建立XS Project

因为OData是基于XS Engine的,所有需要建立一个XS Project。打开SAP HANA  Studio, 选择File->new->Project, 如下图所示:

选择XS Project , Next, 输入Project Name :weiyy.testodata,

然后添加两个文件

  • (1) 文件名.xsapp,文件内容为空。
  • (2) 文件名.xsaccess,文件内容如下:

                   {

     "exposed":true

     }

然后新建一个product.xsodata文件,用来暴露我们准备数据表,其中的内容如下:

   service{

     "WEIYY"."PRODUCT" as "product";

}

表示在OData服务中,将暴露"WEIYY"."PRODUCT"这个数据表。

此时项目结构如下:

然后share这个project, commit, 最后选择activate. repository中,能看到对应的项目,

到此,OData最基本的部署就算完成了,打开浏览器,输入如下地址信息:

http://<hana.server.name>:80<HANA_instance_number> /weiyy/testodata/product.xsodata

2.3    OData URI 规范

在此本文只介绍基本的查询规范,更多URI规范见http://www.odata.org/documentation/odata-version-2-0/uri-conventions 这里需要注意的是,这里的约定不是SAP HANA官方规定的,因此有可能不被SAP HANA支持(仅少数,比如endswith函数),但是SAP HANADevelop Guide里面又没有相关的URI介绍,所以此约定仅供参考。

  • (1) 选择product表中id=1的记录,并以json格式返回(默认以XML格式返回)

http://<IP>:8000/weiyy/testodata/product.xsodata/product?$filter=id%20eq%201%20&$format=json

{"d":{"results":[{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(1)","type":"weiyy.testodata.product.productType"},"id":1,"category_id":1,"name":"ABC Table","color":"Black","length":140,"width":80,"height":80,"price":"2000","desc":"This is the ABC Table. It is black.","desc_cn":"这是ABC桌子。它是黑色的。"}]}}

  • (2) 选择product表中前3条记录

http:// <IP>:8000/weiyy/testodata/product.xsodata/product?$top=3

<结果集稍微有点长,此处忽略>

  • (3) 只选择id这一列

http:// <IP>:8000/weiyy/testodata/product.xsodata/product?$select=id&$format=json

{"d":{"results":[{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(1)","type":"weiyy.testodata.product.productType"},"id":1},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(2)","type":"weiyy.testodata.product.productType"},"id":2},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(3)","type":"weiyy.testodata.product.productType"},"id":3},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(4)","type":"weiyy.testodata.product.productType"},"id":4},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(5)","type":"weiyy.testodata.product.productType"},"id":5},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(6)","type":"weiyy.testodata.product.productType"},"id":6},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(7)","type":"weiyy.testodata.product.productType"},"id":7},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(8)","type":"weiyy.testodata.product.productType"},"id":8},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(9)","type":"weiyy.testodata.product.productType"},"id":9},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(10)","type":"weiyy.testodata.product.productType"},"id":10}]}}

            URI的约定还有很多,能够实现一些基本的类似SQL的选择与投影操作,但对于多表join这类复杂的还没有办法单独利用URI来完成,这时可以在SAP HANA中建立查询对应的视图,再用OData对这个视图进行暴露。

参考资料:

http://help.sap.com/hana/SAP_HANA_Developer_Guide_en.pdf

http://www.odata.org/documentation/odata-version-2-0/uri-conventions

[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00]

想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

转载本文章请注明作者和出处http://scn.sap.com/community/chinese/hana/blog/2014/07/23/%E5%9C%A8sap-hana%E4%B8%AD%E4%BD%BF%E7%94%...,请勿用于任何商业用途。

1 Comment