概述

目前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. zip-gzip-bzip2_压缩文件

    问:为什么要压缩文件? 答:方便传输,因为压缩的文件容量会比较小        存储所使用的空间也会比较小 ---> 备份   Windows里的压缩软件:WinRAR.Zip.好压.2345 ...

  2. Java经典编程题50道之二十四

    有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁. 问第三个人,他说比第2人大两岁.问第2个人, 说比第一个人大两岁.最后问第一个人,他说是10岁. 请问 ...

  3. 【前端开发】解决ios设备上fixed浮动的input输入框兼容问题

    我们在开发移动端页面时,经常会存在这种需求,在页面顶部或底部有一个输入框,一直浮动在顶部或底部位置,中间部分的内容是可以滚动的.比如底部输入框的搜索功能,或底部输入框的写评论功能. 这种问题,我们一般 ...

  4. Java集合框架(一)—— Collection、Iterator和Foreach的用法

    1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...

  5. web 参考网址

    https://w3c.github.io/ https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket#%E7%A4%BA%E4%BE%8B ...

  6. vector动态数组

    vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...

  7. Java线程的六种状态

    java线程有很多种状态,最主要的有六种,被创建.运行.睡眠.等待.阻塞以及消亡六种,也有很多归结为5种,把睡眠以及等待归结为冻结: 被创建:就是线程被创建,就是new thread()之后就是创建一 ...

  8. POJ - 1426 暴力枚举+同余模定理 [kuangbin带你飞]专题一

    完全想不到啊,同余模定理没学过啊,想起上学期期末考试我问好多同学'≡'这个符号什么意思,都说不知道,你们不是上了离散可的吗?不过看了别人的解法我现在会了,同余模定理介绍及运用点这里点击打开链接 简单说 ...

  9. PHPstudy端口占用的问题

    phpStudy很多同学下好了 用localhost可能不能读取到WWW目录下的文件,这个是因为端口被占用,打开其他选项菜单 =>打开配置文件=>httpd-conf=>修改端口号如 ...

  10. JVM笔记3-java内存区域之运行时常量池

    1.运行时常量池属于线程共享区中的方法区. 2.运行时常量池用于编译期生成的各种自变量,符号引用,这部分内用将在类加载后接入方法区的运行时常量池中存放. 看如下代码所示,如图: public clas ...