本文首先快速回顾几种 SAP 产品中的 UI 增强思路,然后具体介绍该思路是如何在 SAP Commerce Cloud(电商云) UI 增强中贯彻实施的。

Jerry 之前的文章:Jerry 在 2020 SAP 全球技术大会的分享:SAP Spartacus 技术介绍的文字版,曾经提到,SAP 电商云的新一代标准 UI,由众多 Angular Component 组成,这些 Component 通过 SAP Spartacus 开源项目,以库文件的方式发布给客户使用。

客户通过在 Angular 应用的 package.json 里,导入 @spartacus/storefront 的依赖,就可以访问到 SAP 电商云的标准 UI Component.

Jerry 之前的文章 从一个实际的例子出发,谈谈 SAP Commerce Cloud(电商云)的 UI 自定义开发,介绍了 SAP 电商云 UI 二次开发的方式之一:基于 UI Component 的替换。

我们假设 SAP 电商云 UI 由 SAP 标准发布的 Angular Component A, B, C, D… 组成,Jerry 文章介绍的二次开发方式,分享了 Partners 如何开发新的 Angular Component A’, B’, C’, D’… ,然后如何通过配置告诉 SAP Commerce Cloud UI,运行时使用 A’, B’, C’, D’ 来渲染 UI.

本文会介绍 SAP 电商云另一种 UI 增强方式,不是通过开发新的 Component A’ 去替换 A,而是直接对 A 做增强,比如添加一个新的字段 a, 嵌入到 Component A 中,这样 A 就成为了 Aa .

这种在原有 UI 基础上添加新字段的增强方式,并非 SAP 电商云特有,在SAP 很多其他产品里也能看到。

Jerry 之前的文章 SAP产品增强技术回顾,曾经回顾过 SAP 产品包括字段和流程在内的增强技术。就界面字段增强而言,比如 SAP CRM 里,我们可以先创建一个数据库表,插入一些数据进去,然后利用 AET( Application Extension Tool),创建一个新的扩展字段 JVM Type,类型为下拉列表,下拉列表中的内容来自我们自定义的数据库表。

在使用 SAP CRM AET 创建扩展字段之前,先要选择基于哪一个 BO 的哪一个节点来创建,即选择 Object Part.

创建好的类型为下拉列表的 CRM 扩展字段如下:

下图则是 SAP Cloud for Customer 增强字段的创建界面。Business Context 是一组能被扩展的 UI 界面的逻辑抽象,针对某个 Business Context 创建的扩展字段,会自动出现在对应的 UI 界面上。这个术语 Business Context 在 SAP Commerce Cloud 里会再次出现,只是换了个称呼,叫做 Outlet.

至此,我们已经了解了 SAP CRM 里的 Object Part,以及 SAP Cloud for Customer 里的 Business Context,这些概念都是用于界定待创建的增强字段的上下文,即增强字段出现在 UI (以及其他模型,比如 BO,接口等) 的具体位置。

到了 SAP CRM Fiori 应用里,增强字段上下文的称呼变成了:Extension Point.

看一个我之前指导 Partners 完成的实际增强需求。

Sales Office 和 Sales Group 是 SAP CRM WebClient UI 上的标准字段:

然而这两个字段并未出现在对应的 CRM Fiori 应用里。

不过,Partners 仍然可以利用该 Fiori 应用 UI 上预留的 ExtensionPoint,即 salesAreaInfoTabContentBottomExtension,来自行将这两个字段添加到 Fiori UI 上:

Partners 自行创建一个 view fragment,里面包含 Sales Office 和 Sales Group 两个字段:

然后将该 view fragment 配置到 salesAreaInfoTabContentBottomExtension 上即可。最后,包含在 view fragment 里的自定义字段,就会出现在 Fiori 应用 Sales Area 面板的对应位置,如下图所示:

至此,我们了解到的 SAP 产品里定义扩展字段上下文的术语罗列如下:

  • SAP CRM:Object Part
  • SAP Cloud for Customer:Business Context
  • SAP CRM Fiori:ExtensionPoint

通过以上方式在 SAP 标准 UI 上创建的增强字段,并不是通过直接修改标准 UI 源代码的方式实现的。增强字段同被增强的 UI 相比,二者物理上是不同的模型,存储逻辑也各不相同,因此这种增强方式是升级安全的,即使标准 UI 发生变化,只要扩展字段上下文保持稳定,则被增强 UI 上的这些扩展字段,不会受到 SAP 标准 UI 升级或者故障修复的影响。

下面是扩展字段上下文概念在 SAP Commerce Cloud 里的称呼:Outlet. 有了前面这么多铺垫,也就不难理解 SAP Commerce Cloud UI 的字段增强方式的工作原理了。

下图黑色区域是 SAP 电商云的 footer 区域,假设我们需要在 footer 区域的顶部和尾部,再增添一些自定义字段。换个更技术一些的说法,我们需要基于自定义字段上下文,即 Outlet = footer 的 UI 区域,创建一些自定义字段。

具体做法:在 Chrome 开发者工具里找到 footer 区域的 ID:cx-footer.

创建一个新的 Angular Component(类比 SAP CRM Fiori 的 View Fragment),在里面使用 cxOutletRef 指令,将两个新的字段 before footer 和 after footer,关联到 ID 为 cx-footer 的 Outlet 上(类比 SAP CRM Fiori 的 ExtensionPoint),出现的位置分别用 cxOutletPos 指定成 before 和 after,即希望这两个扩展字段,分别出现在 SAP Commerce Cloud footer 区域之前和之后。

这两个扩展字段最后运行时的显示效果:

同SAP 其他产品相比,因为 SAP Commerce Cloud UI 基于 Angular,所以借助 Outlet,不仅可以像 SAP CRM Fiori 那样,通过插入普通的 HTML 标签来添加增强字段,而且能使用 Angular 模板表达式,达到添加新的逻辑的目的。

比如我在 SAP Commerce Cloud 产品明细页面,基于 ProductDetailsPageTemplate 这个 Outlet 创建了两个新的字段,一个字段为 h1 静态标签,另一个 p 标签的内容,使用 Angular async 管道订阅 product$, 再以 json 格式显示当前产品的全部数据:

当前产品的数据明细,绑定到 product$ 上,一个 Observable 对象,通过注入的 CurrentProductService 服务调用 getProduct 方法返回。

最后运行时的两个增强字段,在 SAP 电商云产品明细页面显示的效果如下:

至此,本文通过 SAP CRM,SAP Cloud for Customer,SAP CRM Fiori,以及 SAP Commerce Cloud 产品里创建扩展字段来实现 UI 增强需求的逐一介绍,给大家展示了 SAP 产品一脉相承的 UI 增强思路。

实际上 SAP 这些产品的增强方式,只要弄清楚其中一个产品的增强实现细节,再学习其他SAP 产品时就容易举一反三了。

大家如果对 SAP Commerce Cloud 新一代基于 SAP Spartacus 框架的 UI 增强有任何疑问或者需求,欢迎联系本人。我会搜集大家的反馈,分享给我的团队。

感谢阅读。

更多阅读

  • Jerry在2020 SAP全球技术大会的分享:SAP Spartacus技术介绍的文字版

  • SAP产品的Field Extensibility

  • 基于SAP Kyma的订单编排增强介绍

  • SAP Cloud for Customer Extensibility的设计与实现

  • 从一个实际的例子出发,谈谈SAP Commerce Cloud电商云的UI自定义开发

  • SAP Commerce Cloud (电商云) UI 的懒加载功能

  • SAP CRM Fiori 应用和 SAP Commerce Cloud (电商云) UI 如何通过调整CSS来改变UI显示风格

  • SAP产品增强技术回顾

更多Jerry的原创文章,尽在:“汪子熙”:

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

  1. SAP CRM Fiori 应用和 SAP Commerce Cloud (电商云) UI 如何通过调整 CSS 来改变UI显示风格

    这是Jerry 2021年的第 19 篇文章,也是汪子熙公众号总共第 290 篇原创文章. 本文分别针对 SAP CRM Fiori 应用和 SAP Commerce Cloud (电商云) UI,介 ...

  2. SAP Commerce Cloud (电商云) UI 的懒加载功能

    最近工作中处理了 SAP Commerce Cloud (电商云) UI 的一个懒加载 (Lazy Load) 功能的问题,这里把自己学到的东西做个记录. UI 懒加载,有时又称惰性加载,延迟加载,是 ...

  3. 从一个实际的例子出发,谈谈SAP Commerce Cloud电商云的UI自定义开发

    昨天 Jerry 读到了 SAP天天事 公众号上发布的一篇文章:多家知名企业选择 SAP Commerce Cloud 为客户提供卓越购物体验. SAP 日前宣布,锦江国际旗下的全球酒店供应链平台锦江 ...

  4. SAP Commerce Cloud ( 电商云 ) 路由路径的自定义配置与开发

    这是Jerry 2021年的第 24 篇文章,也是汪子熙公众号总共第 295 篇原创文章. 最近看到 SAP天天事 公众号发布的一篇文章: 基于 SAP Commerce Cloud,老娘舅构建的餐饮 ...

  5. 一小时内在本地搭建 SAP Commerce Cloud(电商云)的前后台运行环境

    这是Jerry 2021年的第 21 篇文章,也是汪子熙公众号总共第 292 篇原创文章. 最近一段时间, Jerry 陆续把自己在 SAP Commerce Cloud (电商云) 新一代前台页面开 ...

  6. 关于 SAP Spartacus 电商云 UI feature level 的测试步骤

    Feature Level 在 app.module.ts 里维护: 测试步骤 注册一个新用户 并登录. 将产品添加到购物车. 转到购物车页面更新产品数量和结帐. 停止服务器 ./spartacus. ...

  7. SAP 电商云 UI 服务器端渲染的建议架构

    (1) 起点是用户的请求,通常从浏览器发出. (2) 请求应该命中缓存层(例如 CDN),该层可能包含已经在服务器端渲染的应用程序,在这种情况下响应非常快. CDN 通常将服务器端渲染存储一段时间,具 ...

  8. SAP 电商云 UI State persistence 状态持久化设计的入口 - initSync

    在 Spartacus 2.0 版之前,实现状态持久性的唯一方法是使用一种称为 storageSync 的简单的声明性机制,它允许您提供属性键以在存储中持久化. 当您启动您的应用程序时,这些持久化的键 ...

  9. SAP Spartacus 电商云 UI Shipping Method 在单元测试环境下没有显示的问题

    单元测试时,这一块区域没有渲染出来: supportedDeliveryModes$ 我之前已经确认了,deliveryModeLoaded$ 肯定为 true,所以只可能 supportedDeli ...

最新文章

  1. linux网卡设置adsl上网,Linux下设置ADSL自动拨号上网
  2. 重温java中的String,StringBuffer,StringBuilder类
  3. 太早发文章其实并不是一个好事情
  4. flutter怎么添加ios网络权限_视频号直播间怎么添加购物车商品;超详细流程步骤。丨国仁网络资讯...
  5. tcp 状态转移图详解
  6. 僵尸逃跑服务器没有响应,cs1.6服务器[ZMParadise]1#僵尸逃跑+感染*China ip地址
  7. JDK8编译,JDK8运行错误
  8. 打开Internet信息服务及IIS管理器
  9. 利用QGIS提取天地图矢量底图中的建筑模型边界线
  10. Git Gui 中文乱码
  11. 我的第一个Python爬虫——谈心得
  12. 50个ospf经典问题
  13. [转]拍照怎么搜题?(下)
  14. 树型结构的四种建模方法
  15. 雪花算法:分布式唯一 ID 生成利器
  16. Python|线程和进程|阻塞|非阻塞|同步|异步|生成器和协程|资源竞争|进程间通信|aiohttp库|daemon属性值详解|语言基础50课:学习(11)
  17. 子网、局域网、网段的关系
  18. OpenJudge - 海贼王之伟大航路(状态压缩+DFS)
  19. FCC算法:十一、截断数组--Slasher Flick
  20. 计算机网络第一章总结

热门文章

  1. php http头设置相关信息
  2. linux下查找某个目录下包含某个字符串的文件
  3. 阿里云服务器win2003系统配置IIS+php+mysql+phpmyadmin+zend 500
  4. 十、Linux文件系统基本操作(mount挂载,umount卸载)
  5. 从赖斯想谈恋爱-------到教育的启迪
  6. Sbo通用数据选择功能的实现
  7. 我是如何学习写一个操作系统(完结):总结和系列索引
  8. Linux中Postfix邮件发送配置(三)
  9. 案例46-crm练习客户登录
  10. angular 示例项目