SAP 产品 UI 里的容器组件的概念和开发概述

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: SAP 产品 UI 里的容器组件的概念和开发概述

这是 Jerry 2021 年的第 68 篇文章,也是汪子熙公众号总共第 345 篇原创文章。


Jerry 之前的文章,谈谈 SAP 产品 UI 开发中的组件概念,曾经提到,无论基于何等开发技术的 SAP 产品 UI,其呈现在最终用户面前的视觉效果,都是通过若干逻辑意义上的组件(Component)实现的。这些逻辑意义上的组件,代表了 SAP 产品提供给最终用户交互功能的细粒度的封装,比如查询订单的界面,和创建订单的界面,开发时通常放置于两个不同的组件内实现。


这些 UI 组件通常都包含模型层,视图层和控制器层,通过开源或者 SAP 自研的 UI 框架彼此交互,协同工作。image.png不少 SAP 产品的 UI 开发,组件的定义和边界非常清晰,比如 SAP UI5 里的 Component.js, SAP ABAP Webdynpro 和 WebClient UI 的 Component,SAP Commerce Cloud Accelerator UI 里的 JSP Component 和 Spartacus UI 里的 Angular Component.这些产品的 UI 开发工作,主要就是进行这些 Component 的代码编写。


下图所示的 SAP Cloud for Customer UI Designer 里这些类型各异的 UI 模型,如 OWL,QAF, FS 等等,更是典型的 UI 组件的例子。


image.png另外一些早期的 SAP 产品,比如运行在 SAPGUI 里的 SAP ERP,其界面采用 ABAP Dynpro 实现,后者没有明确提出 UI 组件的概念。但 ABAP Dynpro Screen 和 PAI/PBO 逻辑组合在一起,从设计和功能角度来说,也形成了一个逻辑意义上的 UI 组件。


本文通过一系列 SAP 产品 UI 为例,介绍 SAP 产品 UI 开发领域里另一种重要的组件类型,我称其为容器组件。


同前文描述的包含了具体界面和业务功能的 UI 组件相比,容器组件自身并不存在呈现给最终用户的界面,而是单纯地充当容器的角色,它们是容纳其他 UI 组件的组件。部分容器组件可能支持一些简单的控制逻辑编写,运行时能够根据开发人员指定的条件,动态地决定应该显示其包含的哪些 UI 组件。


下面通过 Jerry 参与过的一些 SAP 产品 UI 开发工作中的具体例子,来介绍 SAP UI 容器组件的概念和作用。


SAP WebClient UI

下图是基于 SAP WebClient UI 开发的 SAP CRM 产品明细页面。红色区域代表一个个普通的 UI 组件,绿色区域是一个容器组件,后者决定运行时,到底应该显示其容纳的哪些 UI 组件。image.png启动事物码 BSP_WD_CMPWB, 打开 UI 组件开发环境,查看 ID 为 PRD01OV 的产品明细页面的容器组件。下图是该容器组件容纳的 UI 组件列表。运行时产品明细页面显示的实际内容,是这个列表的子集。

image.pngSAP Cloud for Customer / SAP Business ByDesign

SAP Cloud for Customer 同 SAP CRM 一样,都借助了工作中心(Work Center)和工作中心视图(Work Center View)的概念来实现权限管控。用户只能看到分配给其的工作中心视图包含的具体界面。对开发人员来说,SAP CRM 的工作中心只是配置表里的一些条目,而 SAP Cloud for Customer 里的工作中心和工作中心视图,成为开发工具里能实实在在看到和编辑的 UI 模型。一个工作中心包含若干个工作中心视图,下图是一个例子:

image.pngOWL 是 Object Work List 的缩写,即下图所示的给最终用户提供搜索界面的 UI 组件。这体现了 SAP 产品关于 Transaction 处理的一贯思路:客户一般都是从 SAP 产品 UI 提供的事务数据搜索页面开始,从搜索结果里选中一条,浏览明细页面。SAP Cloud for Customer 和 SAP Business ByDesign 的搜索页面,就是由类型为 OWL 的 UI 组件实现的,而这些 OWL 组件,又被放置到工作中心视图这个容器组件内image.pngSAP Cloud for Customer 还存在另一类使用广泛,功能强大的容器组件 EC Component,即 Embedded Component,嵌入式组件。EC Component 作为容器控件,本身能够容纳其他的 UI 组件,同时其本身能够以紧耦合和松耦合的方式,嵌入到另一个父组件中,通过多种方式使其内部容纳的 UI Component 同嵌入的父组件之间进行数据传递和通信。


借助 SAP C4C 的 Mashup 技术,EC Component 无论是在 SAP C4C 标准开发,还是合作伙伴二次开发领域,都有着广泛的用途。比如下图所示 SAP C4C 的地图集成功能:

image.png以及我之前的文章 如何在SAP Cloud for Customer页面嵌入自定义UI 介绍的场景,比如我们可以把第三方网站或者自开发的部署在 SAP BTP 平台上的页面,通过 EC Component 嵌入到 SAP C4C 标准 UI 上去。

image.png

SAP 电商云 Spartacus UI

作为基于无头电商(Headless Commerce)架构解决方案的代表之一,SAP Commerce Cloud Spartacus UI 页面的展示,采取纯 CMS 驱动的思路来完成。image.pngCMS(Content Management System)管理员,在 SAP Commerce Cloud Backoffice 里定义电商云前台需要显示的页面内容。这些页面内容定义,通过暴露成 OCC(Omni Commerce Connect) API 的方式,提供给 SAP Spartacus UI 消费。后者拿到需要显示的页面内容之后,负责具体的视觉效果(Visual Effect)渲染。


以 SAP 电商云的主页 homepage 为例,CMS 管理员在 homepage 里,维护该页面容纳的 Content Slots(内容插槽)。 一个页面可以容纳多个内容插槽,每个页面插槽对应屏幕一个区域。image.png每个内容插槽里能够放置一到多个 CMS Component,这里的 CMS Component 起的是占位符的作用—— CMS 管理员不关心每个 CMS Component 具体显示的视觉效果,甚至不关心这些 CMS Component,到底是由 JSP 还是用 Angular 来实现。


下图展示的是 Section1Slot 这个内容插槽,放置的两个 CMS Component 的名称。SAP 电商云 Accelerator UI 和 Spartacus UI,会分别使用 JSP Component 和 Angular Component 技术实现这些 CMS Component. 大家可以把下图 Backoffice 所示的放置在内容插槽中的 CMS Component,与其和在 Accelerator UI 和 Spartacus UI 中的 Component 之间的关系,类比成面向对象编程中接口和其具体实现类的关系。

image.pngSpartacus 解析上图 API 响应结果,拿到 name 属性为 Electronics Homepage Splash Banner Component 的组件,得知其 typeCode 为 SimpleResponsiveBannerComponent,然后在其维护的映射表里,查找到该 CMS Component 对应的 Angular Component 名称为 BannerComponent,于是就会渲染 BannerComponent 对应的模板文件。image.png下图是 SAP 电商云 Spartacus 页面的 homepage 渲染完毕的界面,其中黄色高亮区域就是内容插槽 Section1Slot 的起始位置,而两片绿色高亮区域,分别就是该内容插槽里放置的两个 CMS Component,对应到 Spartacus UI 里通过 Angular Component 形式渲染的起始位置。

image.png虽然从最终用户的视角出发,觉察不到容器组件的存在,但对于 Spartacus UI 的标准开发人员和需要进行二次开发的合作伙伴来说,Spartacus UI 的容器组件是一个比较重要的概念。


SAP Spartacus UI 的入口页面,实现代码位于 storefront.component.html 模板文件。不到30行的代码,把这个基于 Angular 的 UI 界面,划分成了 header,main 和 footer 三大区域。

image.png在运行时,客户访问任何 Spartacus UI,我们都将会将渲染出的 HTML 原生代码对应的 DOM 元素,放置在上图第 21 行 Angular 路由指令 router-outlet 的正下方,成为其兄弟节点。


以客户访问 homepage 的场景为例,最后生成的 HTML 源代码如下

image.png上图是理解 SAP 电商云 Spartacus UI 运行时渲染原理的关键所在,展示了 SAP Spartacus 两个重要的容器组件。


标注2 显示的 cx-page-layout, 以及其若干个子节点 cx-page-slot, 分别对应了 SAP Spartacus 两大容器组件 PageLayoutComponent 和 PageSlotComponent 的选择器。


从 PageLayoutComponent 容器组件的模板文件实现能够看出,每个 PageLayoutComponent 的实例,实际就是 CMS 管理员在 Backoffice 里维护的一个 Page 在 Angular 端的具体呈现形式。

image.png当最终用户访问 SAP 电商云 Spartacus UI 时,后者调用 OCC API,将对应 Page 在 Backoffice CMS 中的模型数据取回来,该 Page 分配的内容插槽信息,存储在上图第 16 行的 slots$ 变量里。PageLayoutComponent 使用 Angular 结构型指令 *ngFor, 遍历这个 slots$ 变量,将每条内容插槽记录的数据,传递给另一个容器组件 PageSlotComponent,其选择器为第 15 行所示的 cx-page-slot.


PageSlotComponent 根据 PageLayoutComponent 传入的内容插槽信息,解析出该插槽分配的 CMS Components 信息。因为单个内容插槽可以分配多个 CMS Components,因此在第 10 行同样使用结构型指令 *ngFor, 遍历该内容插槽需要显示的每一个 CMS 组件信息,将该信息传递给第 19 行我们团队自定义的 Angular 指令 cxComponentWrapper.image.png这个带有我们部门名称前缀 cx - Customer Experience 的自定义指令,会根据传入的 CMS Component 类型,解析出对应的 Angular Component 元数据,然后调用 Angular Component creation API,动态创建 Component 实例并触发渲染流程。


采取这种 CMS 驱动的设计思路,通过 PayLayoutComponent 和 PageSlotComponent 两大容器组件的配合,无论 CMS 管理员在 Backoffice 对一个 Page 待显示的内容进行何种修改,Spartacus UI 端的代码均能够自动应对这些修改,做到以不变应万变。


本文概述了 SAP WebClient UI,SAP Cloud for Customer 和 SAP Commerce Cloud Spartacus UI 中容器组件的设计和运行原理。个人认为,学习 SAP 某个产品的 UI 开发,只要掌握了其普通 UI 组件(参考我的文章:谈谈 SAP 产品 UI 开发中的组件概念)和容器组件的概念和开发方式,就足以胜任大多数场合下的工作需求了。


Jerry 后续将带来更多关于 SAP UI 开发技术的分享,敬请期待。


更多阅读


SAP UI和Salesforce UI开发漫谈


SAP 产品一脉相承的 UI 增强思路,在 SAP Commerce Cloud(电商云) UI 增强实现中的体现


响应式编程在 SAP 标准产品 UI 开发中的一个实践


谈谈 SAP 产品 UI 开发中的组件概念


关于 SAP 产品 UI 的搜索引擎优化 SEO - Search Engine Optimization


聊聊 SAP 产品 UI 上的消息显示机制


image.png

相关文章
|
5月前
|
存储 监控 安全
【专栏】探讨Docker Compose的核心概念、使用方法及最佳实践,助你轻松驾驭容器编排的世界
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
394 2
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
2月前
|
Linux 持续交付 虚拟化
在Linux中,Docker和容器虚拟概念是什么?
在Linux中,Docker和容器虚拟概念是什么?
|
2月前
|
消息中间件 Kubernetes 数据库
在k8S中,初始化容器(init container)概念原理是什么?
在k8S中,初始化容器(init container)概念原理是什么?
|
4月前
|
机器学习/深度学习 移动开发 文字识别
视觉智能开放平台产品使用合集之h5页面使用人脸活体检测,是否需要自己开发UI
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
4月前
|
机器学习/深度学习 运维 Serverless
函数计算产品使用问题之打开SD web UI域名时显示resource throttled,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
监控 测试技术
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
|
5月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
5月前
|
存储 供应链
什么是 SAP 产品主数据里的 Sales Unit 概念
什么是 SAP 产品主数据里的 Sales Unit 概念
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
下一篇
无影云桌面