共计 4090 个字符,预计需要花费 11 分钟才能阅读完成。
这是 Jerry 2021 年的第 72 篇文章,也是汪子熙公众号总共第 349 篇原创文章。
基于 ABAP 技术栈的 SAP 产品,客户能够通过装置 Enhancement Package(加强包)的形式,为以后应用的利用导入新的性能。
Enhancement Package(加强包),顾名思义,蕴含了应用程序加强性能的汇合。客户能够依据企业理论的业务流程,有选择性的启用加强包里的局部新性能。每个新增的性能,都对应着一个 Business Function. 只有在零碎中激活 Business Function 后,其对应的新性能,蕴含前台页面,后盾业务程序,以及 SPRO 施行流动才会失效。
借助加强包,客户可能在不降级 Netweaver 版本的状况下,应用到 SAP 产品的新性能。Business Function 则对加强包中的新性能,提供了更细粒度的治理灵活性,客户可能依据本人的理论须要,有选择性地启用局部新性能。
ABAP Business Function 对加强包新性能的管制,最终通过其蕴含的 Business Switch 即业务开关实现。该开关和咱们理论生存中的开关概念统一,具备 On 和 Off 两种状态。业务开关可能管制 ABAP 前后台代码实现的行为,以及后盾配置表中的记录。
上面通过理论的例子来阐明。
SAP CRM 通过中间件能够从 SAP ERP 下载物料主数据。SAP ERP 作为这个数据交换场景的源零碎,能够持续对物料主数据某些字段做批改,这些批改会主动同步到 CRM,这称为 Delta Download.
然而,某些字段的批改,在 SAP CRM 的默认实现里是无奈接管到的。比方 SAP ERP 起初保护了英文和中文版本的物料形容文本,这两个版本的形容信息胜利同步到 SAP CRM 之后,客户再在 ERP 删除中文版本的形容文本,则这个删除动作,无奈同步到 SAP CRM.
因而 Jerry 之前工作过的 SAP CRM 开发团队,在 SAP CRM EHP3 里开发了一个新性能,用于反对上述形容的场景。
下图展现了事物码 SFW5 里包裹该新性能的 Business Function,ID 为 CRM_PROD_REQ_LOAD_SUBTRACTION.
以后处于未激活状态。
双击则能进入该 Business Function 明细页面,找到关联的业务开关 CRM_PROD_SETTYPE_RL_SUBTRACT.
在 ABAP 代码里,咱们应用工具类,判断该开关的状态。如果状态为敞开,间接返回,不执行蕴含新性能的后续代码。
总之,SAP ABAP Enhancement Package 里新削减的利用业务逻辑,总是包裹在一段以查看业务开关状态作为条件评估的 IF 代码块里,伪代码如下:
IF 对应的业务开关处于开启状态.
执行加强包的新性能.
ENDIF.
除了代码逻辑外,前台 UI 页面某些元素的显示与否,也能通过业务开关动态控制。比方下图这个 SAP CRM 产品搜寻页面的 Simple Search 按钮, 就被一个 ID 为 CRM_MD_PRD_SEARCH 的业务开关管制。仅当该开关开启时,才会执行到下图第 6 行开始的代码,将按钮绘制到页面上。
简而言之,当 SAP Enhancement Package 装置到零碎之后,加强包内的代码,数据库表和其余 ABAP 资源均已存储到零碎内。除非显式开启新性能对应的业务开关,否则新性能不会失效。
SAP 电商云
在 SAP 电商云 Spartacus UI 中也能够采取所谓的 Feature Level 概念,给用户提供有选择性地启用局部新性能的灵便度。
SAP 电商云 Spartacus UI 自身是一个高度模块化的 Storefront 开发框架和开发库,电商网站运行波及到的功能块,依照业务层面划分并实现在不同的功能模块 (Feature Modules) 里,这些功能模块的列表下图所示:
客户施行 Spartacus 时,能够依据本人的理论业务,有选择性地装置功能模块。
下图是一个例子,我装置 Spartacus 时,抉择了 Store Finder 和 Tracking 相干的几个功能模块,而未抉择 Product Configurator, Qualtrics 和 SmartEdit 这三个功能模块:
最初客户决定启用的所有功能模块,通过蓝色高亮信息显示在装置控制台:
基于抉择的这些功能模块,构建出的 JavaScript Bundles 文件如下图所示:
未启用的功能模块,不会加入构建,当然更不会呈现在最终 Spartacus Storefront 的运行时环境里。这个机制有助于减小构建出的 JavaScript Storefront Bundles 文件尺寸,进步运行时加载资源的速度。
至此不难看出,SAP 电商云 Spartacus UI 功能模块这一选择性装置的机制,同本文前半部分介绍的 SAP ABAP 加强包全副装置,局部启用的机制有所区别。
当然,SAP 电商云 Spartacus UI 也存在相似 SAP ABAP 加强包的体现行为,即客户曾经将新性能的实现代码装置到了本地,只是通过某种开关的管制,临时不启用。Feature Level 就表演了这个开关的角色。
因为历史起因,像批改电商页面全局 Directionality 这种个性,并没有封装到某个功能模块里,而是通过 Feature Level 管制。
世界上某些国家和地区,比方应用阿拉伯语和希伯来语的客户,习惯以从右到左的形式浏览网页。为了满足 SAP 产品规范之一即 Internationalization(国际化,简称 i18n), SAP 电商云 Spartacus UI 也对这部分客户的浏览习惯提供了反对。
下图是默认的应用从左到右的形式渲染的 SAP 电商云主页,SAP Logo 在屏幕上方最右边,购物车图标在屏幕上方最左边:
在产品明细页面里,产品图片在右边,增加到购物车的按钮在左边:
上面是一个测试,咱们应用下列配置,通知 SAP 电商云 Spartacus UI,当客户应用的语言为 zh 即中文时,让电商页面依照从右到左(Right to Left, RTL) 的形式渲染:
在 RTL 显示模式下,SAP Logo 和购物车的地位调换了程序,整个屏幕成了 LTR 模式下显示页面的一个镜像。
依照 Spartacus 官网文档,从 2.1 版本开始提供对 Directionality 的反对。
在 Spartacus 初始化钩子函数 APP_INITIALIZER 里,存在一段包裹在 IF 语句中的代码,逻辑和之前介绍 ABAP 业务开关时提到的伪代码很像。
这段代码的语义是,如果以后 Spartacus Feature Level 大于等于 2.1,则执行 Directionality 相干的逻辑解决。
因而,如果出于某种原因,须要在 2.1 之后的版本中,临时停用 Directionality, 除了批改对应的语言配置外,最快捷的做法就是,将以后 Spartacus 利用的 Feature Level,降至 2.1 之前的版本,比方 2.0:
如此一来,尽管我在第 116 行的设置里,让 Spartacus 在客户应用中文登录时,以 RTL 模式显示,然而第 110 行的 Feature Level 设置具备更高的优先级。
这个例子里,因为以后 Feature Level 并没有达到启用 Directionality 所需的最低要求,所以最初我应用中文登录时,Spartacus 依然采纳默认的 LTR 模式显示:
SAP 电商云 Spartacus UI 的 Feature Level 除了能控制应用程序的执行逻辑外,也能像前文介绍的 ABAP 业务开关一样,动态控制 UI 元素的显示与否,而且应用形式更加简洁易懂。
看个具体的例子。下图是 SAP 电商云 Spartacus UI 购物车界面,点击红色的 Proceed To Checkout 按钮能够跳转到结帐页面。
点击 Proceed To Checkout 按钮之后,咱们会向 SAP Commerce Cloud 后盾发动一个 Cart Validation 的 API 调用,对以后购物车的内容进行校验。咱们最后的实现,并未将该按钮禁用,因而如果用户短时间内迅速点击该按钮,每点击一次都会触发一次 API 调用:
于是,在版本 4.2 里,咱们用自开发的按钮控件,Progress Button, 替换了之前版本里应用的一般 Button.
两种按钮在没有被用户点击之前,外观没有任何区别,然而点击之后,Progress Button 会呈现一个旋转的动画成果,让客户无奈反复点击。
这种 Progress Button 被点击之后,外观如下:
两种按钮在最终渲染出的 HTML 页面里源代码差别比拟如下:
在购物车页面里,咱们应用自定义指令 cxFeatureLevel,实现了两种按钮的条件显示逻辑:如果 Feature Level 小于 4.2,显示一般 Button;否则显示 Progress Button:
自定义指令 cxFeatureLevel 的实现原理为,当指令传入的 Feature Level 同以后利用配置的 Feature Level 相匹配时,调用 Angular ViewContainerRef 动态创建视图的办法 createEmbeddedView,将施加了该指令的 DOM 元素绘制进去。
总结
ABAP 业务开关和 SAP 电商云 Spartacus UI 的 Feature Level,二者实现原理各不相同,但都可能给客户提供肯定的自由度,让其灵便管制某些业务性能的启用和敞开。
Jerry 的 SAP 电商云 Spartacus UI 开发合集
- 从一个理论的例子登程,谈谈 SAP Commerce Cloud 电商云的 UI 自定义开发
- SAP Commerce Cloud (电商云) UI 的懒加载性能
- SAP CRM Fiori 利用和 SAP Commerce Cloud (电商云) UI 如何通过调整 CSS 来扭转 UI 显示格调
- SAP 产品一脉相承的 UI 加强思路,在 SAP Commerce Cloud(电商云) UI 加强实现中的体现
- 一小时外在本地搭建 SAP Commerce Cloud(电商云)的前后台运行环境
- SAP Commerce Cloud (电商云) 路由门路的自定义配置与开发
- SAP UI 渲染模式:客户端渲染 VS 服务器端渲染
- 响应式编程在 SAP 规范产品 UI 开发中的一个实际
- SAP Commerce Cloud UI 的用户会话治理
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: