概述

目前SAPUI5 SDK 提供了两种方式来开发一个SAPUI5 App。一种方式是传统的SAPUI5开发方式,一种是利用SAP Fiori Elements通过模板快速构建应用的方式。

本文简单介绍这两种方式如何实现,并进行对比,使读者更清楚这两种方式的优缺点以及适合的开发场景。

SAPUI5 SDK的官方网站在这里。我采用的开发工具是SAP Web IDE。


简介

SAPUI5 freestyle 就是SAPUI5 提供的最普通的最基本的开发方式,之所以给它起名字叫freestyle,就是为了区别于SAP Fiori Elements的开发方式。

freestyle方式的开发,前端由开发人员使用SAPUI5 API提供的控件自行编写所有页面View和前端逻辑Controller。自行通过OData Model进行数据绑定。自行通过编码的方式灵活的与后端进行交互。后端可采用SAP Gateway暴露Odata Service,在Runtime Artifacts中编写业务逻辑。

Fiori Elements方式的开发,前端只能选择SAP提供的Template模板生成特定样式的几种页面(模板数量在持续增加以支持更多样的业务)。这些页面基本满足SAP 自有的各种业务的需求。如果页面有特殊需求超出了模板提供的范围,可以利用template暴露的接口对模板进行扩展。后端一般采用CDS View自动生成Odata Service。并且通过CDS View生成的BOPF来实现业务逻辑。

不过前后端采用的技术并不是绑定的。freestyle的方式同样可以访问CDS View生成的Odata Service,只是不能利用BOPF的一些特性(目前来说)。Fiori Elements一样可以绑定到普通的SAP Gateway发布的Odata Service,但是要自己写OData Annotation来绑定数据和UI控件。


SAPUI5 freestyle App

详细的基于freestyle开发的基础教程在这里。

freestyle的开发,前后端逻辑分的比较清楚,基本无耦合。前端是典型的MVC框架。我们这里重点关注前端的实现。前端实现主要包括View,Controller和Model的实现。

基本步骤

1. 创建project。

2. 项目结构如下。

3. 项目的配置主要在manifest.json文件,组件的配置(model,router之类)在Component.js文件。

4. 在View中需要注意几点:配置controller控制页面逻辑,引入需要用到的lib的命名空间,使用model进行数据展示,注册事件触发controller逻辑。

5. Controller中,采用AMD的方式进行模块定义,并且注意利用onInit(),onExit()等7个基本方法,注意利用console.log()debug。

6. 前端可以自己mock数据,构建JSONModel进行测试,也可以配置OData数据源,通过OData JSONModel与后端进行数据交互。

7. 在SAP Gateway server上,使用T-code SEGW 进入SAP Gateway Service Builder界面,构建后端服务。关于后端OData Service的构建本文不做讨论。

8. 一个freestyle的project最简单也需要以上的操作。


SAP Fiori Elements

详细的基于Fiori Elements开发的基础教程在这里和这里(这个链接可能需要SAP内部员工权限)。

基于Fiori Elements的开发,前后端概念比较模糊,前端是模板化的,而模板的渲染需要很多后端注解的支持,前后端耦合较高,且对CDS View有一定要求。如果不使用CDS View和注解,就需要使用OData注解,我个人并不推荐这种方式。

我花了一个粗浅的个人理解架构图。

基本步骤

1. 创建CDS View。CDS View中既要包含你要展示的数据,也要包含这些数据关于UI的注解。这些注解将告诉UI Template的组件如何展示你的数据。关于UI的注解推荐采用annotation extension的方式实现。

@ODate.publish: true注解将自动生成OData Service。

2. 创建project。

这里的project类型选择SAP Fiori Elements。目前提供了五种,基本SAP的界面类型都包含了,还可以写自己的扩展。

创建project的时候需要选用第一步中发布的OData Service作为数据源。

3. 创建好的project就可以直接访问了,Fiori Elements会自动根据你CDS View中的UI注解去渲染和展示数据。

项目的目录结构如下。

4. 可以通过在本地覆盖external Annotations的方式来overwirte CDS View的UI注解。注意这里注解都已经转化成了OData Annotation。

5. 如有需要,可以增加自己的扩展。但是只能是在template暴露的API范围内。在manifest.json中配置扩展信息。

6. 一个Fiori Elements的project,最复杂的部分就是CDS View的实现,而前端只需要选择合适的Template,连接到数据源就好了。如果没有自己的样式调整和扩展,基本不需要任何代码工作。


关于Smart Control

Smart Control是一些能够根据注解自动生成完成很多工作的组件,比如用Smart Field根据注解能自动生成value help,Smart Filter Bar + Smart Table生成的带有Filter Bar的Data Table

能省去很多配置和编码工作就能展示后端数据,完成search,filter,sort等很多功能。使用SAP Fiori Elements的限制在于,Templates只有五种,并且里边的组件都是封装好的,我们能做的扩展也很有限。

如果在freestyle的project中,使用各种Smart Control控件配合注解,我们能享受到一些UI注解带来的方便,类似于Fiori Elements的局部快速构建。但是不知道出于何种原因,SAP不再推荐使用Smart Control,

虽然我们依然能使用,但是在SAP的一些文档中已经把Smart Control的使用方法部分删除了。


总结

这两种开发方式各有优缺点。

freestyle的方式,是典型的MVC架构,开发既需要懂JavaScript的前端工程师,也需要懂ABAP的后端工程师。

优点:

  • 灵活,可配置
  • 基于SAPUI5的强大组件库,基本能满足所有UI需求
  • MVC架构,前后端分工明确,可并行开发

缺点:

  • 同时需要前端和后端开发人员
  • SAPUI5对于没接触过JavaScript的Abap开发人员来说,学习成本高
  • 开发周期长
  • 测试复杂

SAP Fiori Elements的方式,是SAP为了让ABAP开发人员能快速构建Fiori应用而开发的一种方式。

优点:

  • 开发速度快且易于维护
  • 在不同developer之间交接容易
  • 前端几乎无代码和测试工作
  • 测试简单。

缺点:

  • 灵活性差
  • 只能支持特定模板样式,扩展性差
  • 对复杂的增删改支持较差

如果你开发的App比较简单,有SAP Fiori Elements对应的模板,并且项目上没有熟悉JavaScript的工程师,那么SAP Fiori ELements无疑是一个好的选择。

如果你要开发一个UI复杂,业务逻辑和UI交互逻辑都需要大量定制化的App,那么还是选择freestyle的更为保险。

总体来说,SAP公司的风格是喜欢把所有的东西都封装进ABAP的开发范围。不管是Webdynpro也好,SAP Fiori Elements也好,SAP都是希望工程师能在ABAP范围内就完成工作,只关注ABAP技术和业务逻辑即可。

这对ABAP工程师来说是一件好事。但是请注意,最好在项目一开始就对所有的页面有一个大概了解,并确定是否能采用SAP Fiori ELements,避免采用了Fiori Elements进行到一半突然发现有很多不支持的界面,

不得不推倒使用freestyle重来的情况。

本文为欣欣念念原创并首发于博客园,转载请注明出处。

SAPUI5 freestyle vs SAP Fiori Elements —— 两种开发SAP UI5 Apps的方式对比的更多相关文章

  1. SAP Fiori里两种锁机制(lock)的实现

    方法1: ETAG机制 SAP CRM Fiori采用了这种机制. 看一个具体的例子来理解.假设我用用户名Jerry选中了这个ID为3456的Opportunity,点击Edit按钮之后: 会触发一个 ...

  2. java web学习总结(二十九) -------------------JavaBean的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  3. ASP.Net的两种开发模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  4. javaweb学习总结(二十一)——JavaWeb的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  5. Android ListView两种长按弹出菜单方式

    转自:http://www.cnblogs.com/yejiurui/p/3247527.html package com.wyl.download_demo; import java.util.Ar ...

  6. 咸鱼入门到放弃10--javaweb的两种开发模式

    (本篇是之前方法的综合使用,新东西不多,其中也涉及三层架构的问题.此处直接引用了大佬blog:https://www.cnblogs.com/xdp-gacl/p/3908610.html) SUN公 ...

  7. JavaWeb学习 (二十)————JavaWeb的两种开发模式

    一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示

  8. javaweb(二十一)——JavaWeb的两种开发模式

    一.JSP+JavaBean开发模式 1.1.jsp+javabean开发模式架构 jsp+javabean开发模式的架构图如下图(图1-1)所示

  9. javaweb基础(21)_两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

随机推荐

  1. iOS实现微信外部H5支付完成后返回原APP

    看到微信最近放开了微信H5支付,公司决定把H5集成到多款APP上.下面记录下了开发过程. 由于是微信新推出的支付方式,在网上搜索到的相关资料并不多,其中有一篇文件(点此跳转)对我的整个开发过程起到了很 ...

  2. Hibernate自动生成实体类注解(转)

    常用的hibernate annotation标签如下: @Entity --注释声明该类为持久类.将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类 ...

  3. Yii2中把路由地址中的%2F改为/

    第一步:找到/vendor/yiisoft/yii2/web/UrlManager.php 第二步:搜索$url = "$baseUrl?{$this->routeParam}=&qu ...

  4. FFMpeg首次使用

    FFMpeg在Windows上的使用.去FFMpeg官网上去下载文件. 把下载好的文件放如下图所示的位置. cmd,调出系统的命令行工具.首先进入d盘. 进入到ffmpeg所在的文件夹. 运行 ffm ...

  5. 有状态InheritableThreadLocal 配合 JDK8 ,异步方法调用

    我们可以把一个类的作用域注解为 @Scope(scopeName = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode. ...

  6. hive:排序分析函数

    基本排序函数 语法: rank()over([partition by col1] order by col2) dense_rank()over([partition by col1] order ...

  7. <CEPH中国-深圳站-技术交流会演讲PPT> YY云平台Ceph Block应用实践 & 我写的书 《CEPH实战》

    YY云平台Ceph Block应用实践 http://s3.yyclouds.com/public/YY%E4%BA%91%E5%B9%B3%E5%8F%B0Ceph%E5%AE%9E%E8%B7%B ...

  8. JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题

    JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...

  9. Struts2实现文件上传报错(一)

    1.具体报错如下 2014-5-1 23:02:38 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service( ...

  10. freemarker报错之一

    freemarker 1.错误描述 java.io.FileNotFoundException: Template user.ftl not found. at freemarker.template ...