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
4,289

            在前一篇文章中,笔者介绍了在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关键字来修改命名空间,修改原product.xsodata,内容如下:

service namespace "test.namesp"{

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

}

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

刷新原页面就可以看到修改之后的命名空间为“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");

}

例用without排除属性

service namespace "test.namesp"{

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

}

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

然后我们访问CATEGORY实体,

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


通过这个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%...

请勿用于商业用途

1 Comment