Skip to Content

SAP River简介

    目前,开发SAP HANA应用程序通常采用图1所示的程序开发架构/wp-content/uploads/2014/04/1_427720.png

1. 传统SAP HANA应用程序开发架构

    在图1中,后台程序开发人员需要负责数据库层数据模型的建立和XS Engine层控制逻辑的开发。对于数据库层数据模型的建立,开发人员需要掌握SQL语句和SAP HANASQL Script开发语言;对于XS engine层,开发人员需要掌握xsjs技术开发相关的控制逻辑。这就需要SAP HANA的后台应用程序开发人员至少掌握两项技术,有时甚至需要不同的开发人员合作才能完成SAP HANA应用程序的开发。今天我们要介绍的SAP River可以解决这个问题。

        SAP River是一种全新的开发SAP HANA本地应用程序(Native Application)的方法。SAP River由一门编程语言,一个 编程模型和一套开发工具组成。 利用SAP River,开发人员可以专注于应用程序业务意图的设计和开发,而不需要关心程序的实现和优化。SAP Riverdesign-time而非run-time的编程语言和工具,当被激活时,SAP River程序会被编译成SQL Script代码或XS JS程序,再交由XS engineindexserver运行。也就是说,SAP River程序只存在于应用程序的设计阶段,而不存在于运行阶段。

/wp-content/uploads/2014/04/2_427727.png

2. SAP River的功能模型

    图2展示了SAP River的功能模型。SAP River集成了SAP HANA应用程序开发的数据模型,业务逻辑和访问控制各个环节,使得开发人员掌握一门统一的技术就可以完成完整的SAP HANA应用程序开发。首先,利用SAP River编程语言,开发人员可以设计应用程序的数据模型,SAP River会在编译阶段创建相关的数据库对象(比如在SAP HANA中为SAP River中的entity创建对应的table);其次,SAP River可以针对数据对象定义方法,在方法中可以实现业务逻辑;最后,在SAP River程序中可以实现对数据和方法的访问控制。

SAP River Language

       作为新一代SAP HANA后台应用程序开发方法,SAP River提供了一门强类型的声明式编程语言。使用SAP River Language开发应用程序简单直观,即使是没有计算机背景的领域专家也可以很快上手编写应用程序。此外,对于比较复杂的,用声明式语句无法表达的逻辑,SAP River提供内嵌SQL ScriptXS JS代码的方式供程序开发人员使用。

SAP River Language主要由以下对象组成:

  1. 应用程序(Applications):每个SAP River应用程序都必须以一个application对象开始,所有其他对象均在此application中声明和定义。一个application中的对象可以通过某些方式(OData)暴露给外部程序,未暴露的对象不能被外部程序访问。
  2. 实体(Entities):实体是存储在SAP HANA数据库中的数据,通常一个entity对应一张表。实体包含一个或多个元素(elements),元素可以看成数据表中的列,这些元素都有各自的类型,可以是基本类型,如integerstring等,也可以是自定义的Type或者Entity
  3. 类型(Types)Type定义对象可存储数据的大小和有效性。SAP River支持不同种类的Type包括基本类型,结构化类型和流式类型。每个实体都会隐式地定义一个同名的结构化Type
  4. 动作(Actions)SAP River中的Action就相当于许多编程语言中的functionmethodSAP RiverAction中定义应用程序的业务逻辑。
  5. 视图(Views):利用视图可以通过select语句创建一个数据流(stream),该数据流是目标数据集的一个子集。并且,每次使用该视图时都会动态地从目标数据集中获取数据流的数据。
  6. 角色(Roles):使用SAP River,程序开发人员可以在代码中创建role,并指定访问某些对象需要role,从而实现SAP River对象的访问控制。

/wp-content/uploads/2014/04/3_427728.png

3. SAP River Hello World”示例程序


      SAP River作为一门编程语言,除了语言本身的特性外,同样提供了相应的函数供开发人员使用。SAP River的函数库实现了常用的功能函数,按功能可分为以下几组:

  1. Math Functions:负责数学计算的函数,如absoluteceilfloor等;
  2. Integer Functions:操作整型数据的函数,如toDecimalFloattoString等;
  3. String Functions:字符串函数,如lengthsubstring等;
  4. Date Functions:日期函数,如daymonth等;
  5. Session Functions:会话函数,如getUserName
  6. Logging Functions:日志函数,如log
  7. Utility Functions:实用函数,如parseDecimalFloatparseInt等;
  8. HTTP CallsHTTP库用于在SAP River代码中发送HTTP请求,如请求ODataREST等服务。

OData Calls

      SAP River应用程序的数据和业务逻辑可以通过OData协议暴露给客户端,使客户端可以访问后台数据。SAP River可以在namespace层次或者application层次通过OData暴露数据,如果暴露namespace,那么在这个namespace里的所有实体,视图,和动作都将暴露给客户端;如果暴露application,那么只有application中做了标注的对象才会暴露给客户端。下面以application为例,讲述如何通过OData暴露数据。

      默认情况下,SAP River 代码中的各种对象,如实体,视图等,是没有通过OData暴露出去的。为例暴露对象给客户端,你必须指定哪些对象,通过什么方式暴露给什么样的用户。图4是如何在SAP River代码中通过OData暴露对象的示例。

/wp-content/uploads/2014/04/4_427729.png

4. 通过OData暴露SAP River application

① 在application层次上暴露对象时,必须用export关键字指定哪些对象是要暴露给客户端的,比如这里指定把应用程序TestSyntax中的Employee实体暴露给客户端;

② 暴露对象有多种方式,比如通过OData的方式。为此,需要在applicationnamespace前添加前缀@OData。这样,SAP River就会为applicationnamespace中所有需要暴露的对象创建一个服务;

③ 默认情况下,SAP River的对象是private的,为了让指定用户可以访问这些对象,需要用accessible by关键字指定哪些对象能够被拥有哪个权限的用户访问。如果所有用户都可以访问,就使用accessible by sap.hana.All进行标注。

如何学习SAP River

        SAP HANASPS07起开始支持SAP River,作为一门新技术,我们需要更多的资源进行学习。以下是一些学习材料:

  1. SAP River Datasheet:这是一篇该属性文章,介绍了SAP River的基本架构和组件,让读者对SAP River有一个全面的认识;
  2. SAP River帮助文档:此主页上有SAP River相关的各种文档,包括语言介绍,开发指南等;
  3. 介绍SAP Riverppt视频
  4. SAP Academy上介绍SAP River的系列视频

总结

        本文概述性地介绍了SAP River的功能,优势和组成结构,包括SAP River相较于传统开发架构的优势,SAP River Language的主要特性,以及如何通过OData暴露SAP River中的数据和方法。本系列后续文章将逐一地介绍SAP River的安装,配置与程序开发等各方面的知识,敬请关注!

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

        转载本文章请注明作者和出处http://scn.sap.com/community/chinese/hana/blog/2014/04/08/sap-river-%E4%B8%80-sap-river%E6%A6%82%E8%BF%B0,请勿用于任何商业用途。

参考文献

  1. SAP River Language Reference
  2. SAP River Developer Guide
  3. SAP River Datasheet
To report this post you need to login first.

Be the first to leave a comment

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

Leave a Reply