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

SAP River简介

    目前,开发SAP HANA应用程序通常采用图1所示的程序开发架构

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程序只存在于应用程序的设计阶段,而不存在于运行阶段。

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对象的访问控制。

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暴露对象的示例。

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%...,请勿用于任何商业用途。

参考文献

  1. SAP River Language Reference
  2. SAP River Developer Guide
  3. SAP River Datasheet