Skip to Content

            在前一篇文章中,笔者介绍了在SAP HANA中使用OData访问SAP HANA中数据的方法,在接下来的本篇文章中,将分享一些OData中服务定义的一些例子。

            通常有两种方式通过OData来暴露SAP HANA中的数据库对象,一是直接使用Database Object,比如前一篇和本篇文章介绍的例子,这种方式针对于数据已经存在于SAP HANA中,在Repository中没有对应的设计时对象(Design-time Object);另一种方式是通过暴露repository中的设计时对象(Design-time Object),这是推荐使用的方式,因为这种方式的优点在于如果Design-time Object变化的话,OData服务会自动更新,如果是直接使用Database Object 如果数据库对象改变,OData服务需要人工维护。但为了便于说明,在本文使用的例子都是直接暴露Database Object.

1  OData命名空间 (Namespace) 定义

           在默认情况之下,通过OData服务生成的Schema的命名空间为项目的package的路径与xsodata文件名的拼接,例如前一篇文章的默认命名空间为weiyy.testodata.product,如图。

namespace.PNG

         我们可以利用namespace关键字来修改命名空间,修改原product.xsodata,内容如下:

service namespace “test.namesp”{

    “WEIYY”.”PRODUCT” as “product”;

}

修改之后提交并激活原来项目,

namespace2.PNG

刷新原页面就可以看到修改之后的命名空间为“test.namesp”。

2 OData中的属性投影(Property Projection)

       如果数据表中有多列但有时候只需要选择其中的某几列暴露出来,一方面可以做一个视图,然后暴露这个视图,另一方面可以直接使用OData中的属性投影语法,with用来选择属性,without用来排除属性。

         比如对于product这个table,我们只暴露其中的id,name这两个列,修改product.osodata

service namespace “test.namesp”{

    “WEIYY”.”PRODUCT” as “product” with(“id”,”name”);

}

prop.PNG

例用without排除属性

service namespace “test.namesp”{

    “WEIYY”.”PRODUCT” as “product” without (“price”,”desc“,”desc_cn”);

}

prop2.PNG

3 OData中的table关联与属性导航(Navigation Properties)

         前面提到过,对于多表join的查询,可以通过把查询结果做成一个视图来进行暴露,笔者也是比较倾向于这种方式,但是SAP HANA 中的OData服务同时提供了另外一种查询的方式,这里也作一个说明,那就是OData中的table关联(Associations)与属性的导航。

      我们新建一个assoc.xsodata文件:

service {

    “WEIYY”.”CATEGORY” as “CATEGORY” navigates(“Product_Category” as “products”);

    “WEIYY”.”PRODUCT” as “PRODUCT” ;

    association “Product_Category” principal “CATEGORY”(“id”) multiplicity “1”

    dependent “PRODUCT”(“category_id”) multiplicity “*”;

}

说明:这里CATEGORY表记录PRODUCT的类别信息, association后面跟关联名称,principal一端指明关联的键,multiplicity指明关联的维度,dependent指关联的另一端。Navigates指明导航的信息。 然后提交激活并访问对应的URI

assoc.PNG

然后我们访问CATEGORY实体,

nav.PNG

products这个属性中,列出了相关联的productsURL


nav2.PNG

通过这个URL获取到category_id=1对应的product

本篇文章只选择一部分的OData服务定义的语法介绍,有关SAP HANA  OData中更多的服务定义语法请参考SAP HANA Develop Guide.

参考资料:

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%A8odata%E4%BA%8C

请勿用于商业用途

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

Leave a Reply