Fiori Fundamentals和SAP UI5 Web Components

article/2025/9/14 6:21:11

这周有位同事邀请我给团队讲一讲SAP技术的演进历史,所以我准备了下面几个主题来介绍。

其中SAP的技术回顾和演进,我的思路就是从前后台两方面分别介绍。

我画了一张非常简单的图:

去年5月我写过一篇文章:SAP UI和Salesforce UI开发漫谈,简要回顾了SAPUI技术的发展,从最古老的SAP GUI绘制界面,到Webdynpro / WebUI再到现在广泛使用的Fiori UX。当时这篇文章介绍到Fiori(UI5)就嘎然而止了,如今大半年过去了,我们继续聊聊Fiori的发展动向。

根据Jerry从SAP社区上已经发布的信息来看,Fiori的两个发展方向,我个人概括为:

1. 兼容并蓄,即通过Fiori Fundamentals,让使用非UI5开发框架的前端开发人员,用其喜爱的技术,也能开发出符合Fiori UX的应用。

2. 轻装上阵,即通过SAP UI5 Web Components,既能继续提供像之前UI5控件库那些开箱即用的众多UI控件,又避免了前端应用对UI5框架的依赖。

我们来分别了解一下这两个新概念。

Fiori Fundamentals

看看SAP官网上的权威定义:

https://experience.sap.com/news/democratizing-sap-fiori-with-fiori-fundamentals/

Jerry在上图把最关键的信息都用红色高亮出来了。重点:

1. Fiori Fundamentals在前端应用里扮演着一个轻量级展现层的角色,可配合Angular, React和Vue等前端框架一起使用。

2. Fiori Fundamentals不是一项新的UI技术,更不会取代UI5,而是一个CSS和HTML标签的集合,使得开发人员能使用其偏爱的UI框架去开发具有Fiori UX风格的应用。

同样,Jerry去年年底写的另一篇文章 SAP Fiori + Vue = ?,介绍的其实就是Fiori Fundamentals针对于Vue的实现。

刚刚提到的重点2,Fiori Fundamentals是一系列CSS和HTML标签页的集合,那么我们到Jerry的这篇文章里介绍的例子去找找。

这是例子里引用的CSS:

这是SAP Fiori Fundamentals帮助文档里提到的绘制表格的标签:

在我的Vue应用里如何消费这些标签:

至于为这个标签绘制而成的表格添加事件处理机制,其方法和纯粹的Vue应用完全一致,因此一个传统的Vue开发人员,借助Fiori Fundamentals的帮助,几乎不需要任何额外的学习就能够进行SAP Fiori应用的前台界面开发。

SAP UI5 Web Components

SAP德国的UI5开发人员Peter Muessig最近在SAP社区上发表了一篇博客:UI5 Web Components - the Beta is there,大家可以通过本文末尾的"阅读原文"来阅读他的原文。

如Peter文章题目所说,SAP最近发布了UI5 Web Components的Beta版本,并邀请广大SAP生态圈的开发人员试用并提出意见。

Peter的文章不长,但是为了方便不喜欢读英文的朋友们也能快速了解这个UI5 Web Components是个什么东东,Jerry还是把里面一些要点用我自己的语言表述出来。下面的部分并非Peter文章内容的简单翻译,而是Jerry阅读了之后,基于自己的理解再加上自己的扩充。大家如果对我文章的内容有质疑,欢迎留言讨论。

SAP UI5 Web Components,是SAP将之前SAP UI5控件库里的控件,按照Web Components标准规范重新实现后的产物。

相信了解SAP UI5的朋友们,看了我上面这句描述,脑子里会冒出这些问题:

1. 什么是Web Components标准?

2. SAP为什么要做这个重新实现的事情?

3. 重新实现后的产物到底是个什么东东?

关于第一个问题,直接访问Web Components的官网即可找到答案。程序猿们都懂的,org结尾的网站最喜欢定义各种几百页甚至上千页的技术规范,Web Components也不例外:

https://www.webcomponents.org/introduction

前端组件化一直是前端生态圈很火热的讨论话题之一,像前端三驾马车Angular,React和Vue都有自己的组件化实现,而webcomponents.org上定义的规范,其实就是给出了一个标准,只有满足这个标准里的实现,才能算是一个通用的组件化实现,才能被所有现代浏览器支持。

这个规范的内容也托管在github上的:

https://github.com/w3c/webcomponents

里面包含四大标准Shadow DOM,Custom Elements,HTML Templates和CSS changes,SAP UI5 Web Components的实现当然也满足这些标准。

第二个问题,SAP开发UI5 Web Components的动机。

Jerry个人的看法:给客户和Partners提供一种更灵活的使用UI5控件的方式,避免对UI5框架的依赖。

举个例子,如果我们想使用UI5控件库里提供的button控件,就算只在XML视图里写简单的一行定义,

最后运行时的UI5框架也会执行许多很复杂的逻辑,Jerry在四年前写的UI5框架自学教程里曾详细描述过:

https://blogs.sap.com/2015/10/23/how-i-do-self-study-on-a-given-fiori-control-part-1/

而借助SAP UI5 Web Components,开发人员根本不需要导入UI5框架,就能直接使用UI5里的控件。按照Peter文章的描述,SAP UI5 Web Components能用于任何前端框架中,即下图中高亮的最后一句话。

此时自然需要回答第三个问题了。SAP UI5 Web Components到底是个什么东东?上图传达的重点:

1. SAP UI5 Web Components并不是基于UI5框架的。换句话说,和UI5框架没有任何依赖关系,可以独立使用。

2. SAP UI5 Web Components并不是SAP UI5框架的接替者,而应看作后者的一种补充。

3. 将UI5控件库提供的控件在HTML层级暴露给消费者,而非传统方式下的API层面暴露方式。如此一来,UI5 Web Components可以不依赖于UI5框架,能直接用于其他的前端框架。

看个具体的例子:

在浏览器里打开下面的HTML页面,

会看到一个UI5按钮。点击后弹出这个按钮实例的innerHTML属性的值。这是一个最简单的SAP UI5 Web Components的Hello World例子。

例子里我们使用了SAP UI5 Web Components自定义的标签。对于前端应用开发人员来说,这个自定义的标签和W3C里的button标签没有任何不同,至少从消费方式上来说完全一致。

关于UI5 Web Components里诸如这类自定义标签的详细说明,可以查看SAP帮助文档:

https://sap.github.io/ui5-webcomponents/playground.html

运行时,和在UI5框架里使用控件一样,仍然有一个专门的ButtonRenderer负责生成按钮原生的HTML代码:

从运行时生成的HTML源代码我们不难发现,UI5 Web Components自定义的HTML标签只是起着占位符(place holder)的作用,真正承载运行时用户可以与之交互的实际按钮,还是通过上图ButtonRenderer生成的HTML原生button标签。

需要强调的是,通过上述ButtonRenderer生成的运行时按钮实例,仍然满足使用UI5框架的传统方式绘制的控件一样的特性,比如传统方式下SAP保证的所有产品标准,像Accessibility,Internationalization这些,在SAP UI5 Web Components里仍然继续支持,无需应用开发人员额外的编程实现。

本地用npm install @ui5/webcomponents命令安装UI5 Web Components之后,

就可以找出里面最简单的组件实现,Button.js, 来学习SAP是如何基于Web Components标准,采用ES6支持的mobule和class等特性实现一个自定义标签的。将来Jerry或许可以邀请SAP成都研究院的一些专职做前端开发的同事来分享这里面的技术细节。

最后,SAP UI5 Web Components的使用场景是什么?

以上是照搬Peter的文字。适用场景有二:

1. 在没有使用前端框架开发而成的简单静态页面里,如果想添加一些能够提供用户交互的控件,可以考虑SAP UI5 Web Components。

2. 在已有的基于其他前端开发框架的Web应用里,如果需要一些能与用户交互的控件而又不想重复造轮子,那么可以到SAP UI5 Web Component官网上去找找。

另一方面,SAP UI5框架仍然是SAP推荐的开发具有企业级复杂度和响应式前端应用的方案。

最后,有朋友可能会有疑问,Jerry前一篇文章 SAP Fiori + Vue = ?里介绍的fundamental-vue,里面不是也存在SAP自定义的用于Vue应用的HTML标签吗?

https://github.com/SAP/fundamental-vue

那么fundamental-vue到底算Fiori Fundamentals还是Web Component?

一张图来回答:

关于这两个概念大家如果有疑问,请直接留言给我,或者点击“阅读原文”,跳转到SAP社区上给Peter留言,感谢阅读。

相关阅读

  • SAP UI5和微信小程序对比之我见

  • 当我用UI5诊断工具时我用些什么

  • 在Kubernetes上运行SAP UI5应用(上)

  • 在Kubernetes上运行SAP UI5应用(下)

  • SAP Fiori + Vue = ?

  • SAP Fiori应用的三种部署方式

  • Jerry的Fiori原创文章合集

  • SAP成都C4C小李探花:浅谈Fiori Design Guidelines

  • Jerry和您聊聊Chrome开发者工具

  • Jerry的UI5框架代码自学教程

  • Jerry的碎碎念:SAPUI5, Angular, React和Vue

  • SAP Cloud for Customer 使用SAP UI5的独特之处

要获取更多Jerry的原创文章,请关注公众号"汪子熙":


http://chatgpt.dhexx.cn/article/ApSYMCx3.shtml

相关文章

C++Prime Plus(3)

目录 51.抽象和类52.类的使用53.对象构造54.对象析构55.const与类56.this指针57.类作用域58.运算符重载59.运算符重载的实例60.友元61.运算符重载-成员或非成员62.类的类型转换63.拷贝构造函数与赋值运算符重载64.静态数据成员65.静态成员函数 51.抽象和类 类型的构成 1.数据占…

C++Prime Plus(6)

目录 92.STL(1)容器93.STL(2)迭代器94.STL(3)函数对象95.STL(4)算法 92.STL(1)容器 标准模板库 STL(Standard Template Library),是 C 标准库的一部分,不需要单独安装,只需要#include 头文件。STL提供了容器&#xff…

C++Prime Plus(5)

目录 85.异常(1)异常处理机制86.异常(2)exception类87.RTTI(1)88.RTTI(2)89.类型转换运算符90.string类91.智能指针 85.异常(1)异常处理机制 异常:运行错误(比如无法打开文件,动态内存申请失败),导致程序无法继续正常…

SAP Fiori学习笔记

资料链接:有些是需要自带梯子的哦~ Fiori Design Guidelines​experience.sap.com戴团长:SAP Fiori Design​zhuanlan.zhihu.com如何评价 SAP Fiori Design Guidelines?​www.zhihu.comhttps://mp.weixin.qq.com/s?__bizMzIyNjY…

C++Prime Plus(2)

目录 21.for循环(1)22.for循环(2)23.while循环24.do while循环25.二维数组与嵌套循环26.if语句27.逻辑表达式28.条件表达式29.switch语句30.文件概念31.文本文件的输入输出32.函数详解(1)回顾33.函数详解(2)参数传递34.函数详解(3)数组传递35.函数详解(4)C风格字符串36.递归概念…

C++Prime Plus(1)

目录 1.C简介2.程序生成(创建源码,编译和链接)3.进入C4.C语句5.函数入门6.整型7.char,bool(小整数)8.const与符号常量9.浮点数10.算术表达式11.数组12.C风格字符串13.C风格字符串14.结构15.指针16.动态内存…

C++Prime Plus(7)

目录 96.输入输出概述97.使用cout输出(1)ostream基本功能98.使用cout输出(2)格式化输出99.使用cin输入100.文件(1)简单的文件IO101.文件打开的进一步讨论102.二进制文件访问103.随机读写 96.输入输出概述 C的输入输出是由库iostream中提供的一组类实现的; 流 C把输…

E-Prime软件包及安装

E-Prime软件包及安装 1 版本问题2 安装过程3 注意事项4 唠唠叨叨 Hello, 这里是行上行下,我是喵君姐姐~ 众所周知,E-Prime是实验设计的执行者。 当我们提出一个想法,则需要一个具体的软件来实现它。 而E-Prime相对于Matlab和Py…

Prime Sample

又发现了个框架 但没有代码啊~~ 还是搬来了,重要样本关注机制,一种新颖的目标检测框架 上论文 论文地址: https://arxiv.org/pdf/1904.04821.pdf 在目标检测框架中,平等对待所有样本并以平均性能最大化目标是一种常见的范例。在…

Prime Factors

此题需要使用到质因子分解的算法,可以参考以下链接: https://blog.csdn.net/qq_42410605/article/details/100150140 题目描述: Given any positive integer N,you are supposed to find all of prime factors,and write them in the form…

SpringBoot实现分布式锁

SpringBoot实现分布式锁 先了解一下线程数: 线程锁 线程锁:主要用来给类,方法,代码加锁,当某个方法或者某块代码使用synchronize关键字来修饰,那么在同一时刻最多只能有一个线程执行该代码,如…

深入理解ConcurrentHashMap原理分析以及线程安全性问题

在之前的文章提到ConcurrentHashMap是一个线程安全的,那么我么看一下ConcurrentHashMap如何进行操作的。 ConcurrentHashMap与HashTable区别? HashTable put()源代码 我们来看一下put 操作: 方法体 被 同步锁标记,由于同步锁的…

Redis分布式锁到底安全吗?

若有收获,请记得分享和转发哦 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。 Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢? 因为我发现网上 99% 的文章,并没有把这个问题真正…

Java线程安全

前段时间有测试一个后端对账单和话单采集服务,在测试过程中有涉及到数据库读写逻辑和并发的场景,所以结合经验针对系统技术架构设计了部分并发场景结合数据库读写时可能出现的一些问题的用例,也确实出现了一些测试环境容易忽视,线上环境确确实实可能出现的问题,当然最后还是得到…

线程安全之 - ThreadLocal

ThreadLocal的底层原理 ThreadLocal是Java中所提供的线程本地存储机制(线程内共享),可以利⽤该机制将数据缓存在某个线程内部, 该线程可以在任意时刻、任意⽅法中获取缓存的数据;ThreadLocal底层是通过ThreadLocalMap…

线程锁(ReentrantLock、synchronized)为何不能用作分布式锁

为什么使用分布式锁 分布式锁实现目前有三种: 数据库乐观锁;ZooKeeper的分布式锁;Redis的分布式锁; 在以前单体架构Web应用场景下,我们可以使用ReentrantLock或synchronized进行上锁,保证资源安全,现如今大…

Redis分布式锁真的安全吗?

大家好,今天我们来聊一聊Redis分布式锁。 首先大家可以先思考一个简单的问题,为什么要使用分布式锁?普通的jvm锁为什么不可以? 这个时候,大家肯定会吧啦吧啦想到一堆,例如java应用属于进程级,…

ThreadLocal能解决线程安全问题?胡扯!本文教你正确的使用姿势【享学Java】

跟对领导很重要:愿意教你的,并且放手让你做的领导要珍惜。 目录 前言正文ThreadLocal是什么?ThreadLocal怎么用?局限性InheritableThreadLocal向子线程传递数据开源框架使用示例 ThreadLocal不能解决共享变量的线程安全问题Thread…

Java线程安全详细总结

以下是我的PPT文档,不知道怎么复制到博客,只能一个一个插入图片发上来了。感觉总结的不错,分享一下。 文档地址:http://download.csdn.net/detail/csujiangyu/9526641

分布式系统详解--基础知识(线程)

分布式系统详解--基础知识(线程) 一、导读 前面跟大家讲了一下 分布式系统详解--基础知识(概论) ,可以稍微了解一下大体上分布式是怎么一回事了。这片篇文章主要是讲述一下线程的问题分别介绍一下,什么线…