- SAP 业务技术平台(BTP) 上的 Business Rule
- Fiori-like Prototype ( 2022 SAP
- Fiori-like Prototype ( 2021 SAP
- Fiori-like Prototype ( SAP BTP 2
- SAP BTP 上 workflow 和 Business Se
- Fiori-like Prototype ( SAP Cloud
- 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
- 使用 cf push 部署应用到 SAP BTP 时遇到错误消息
- 关于使用命令行 cf login 登录 SAP BTP Clou
- Fiori-like Prototype ( 2021 SAP
这是 Jerry 2021 年的第 44 篇文章,也是汪子熙公众号总共第 321 篇原创文章。
在 SAP ABAP On-Premises 产品工作过的 ABAP 开发人员,可能都接触或者听说过 Business Rule Framework(简称 BRF,后面还有升级版 BRF+)这个框架。
![](https://img.haomeiwen.com/i2085791/9c23863711840511.png)
SAP BRF+ 主要包含实现存储功能的规则仓库(Rules Repository),以及根据用户输入,分析并执行规则,返回给用户处理结果的规则处理器(Rules Processor)两部分。前台提供的是基于 ABAP Webdynpro 界面的规则编辑器,支持决策表,决策树和公式等多种方式的规则建模方式。规则仓库和规则处理器位于 ABAP 系统后台。
![](https://img.haomeiwen.com/i2085791/85d64f62a22081dd.png)
了解 SAP ABAP BRF+,有助于我们学习其他的业务规则解决方案。比如 SAP Commerce Cloud,选择的是支持 Java Rules Engine API 标准的开源业务规则引擎和企业框架 Drools.
![](https://img.haomeiwen.com/i2085791/740c47444a25a95c.png)
无论是 SAP ABAP BRF+ 还是 Drools,尽管其技术实现细节不同,但工作场景和实现的需求都一致:
- 业务规则制定者,在系统里根据建模工具维护业务规则
- 业务规则解决方案暴露出接口,消费者调用该接口,传入输入,得到业务规则处理器执行后返回的输出。
本文简要介绍 SAP Business Technology Platform(下文简称 SAP BTP)上的 Business Rules Service.
登录 SAP BTP Cockpit,在 Service Marketplace 里找到 Business Rules Service,其描述信息强调,这是一个基于云的业务规则解决方案。
![](https://img.haomeiwen.com/i2085791/9faaf30432b20d99.png)
Jerry 经历了从 SAP HANA Cloud Platform,到 SAP Cloud Platform,再到如今 SAP Business Technology Platform 的变迁史,切身感受到,随着时间的推移,开发人员消费这些云端服务的步骤越来越简捷了。
以前应用开发人员在 Service Marketplace 选择一个服务后,在使用之前,需要手动配置 Entitlements 和进行用户角色分配等工作。而如今使用 SAP BTP 提供的 Boosters,能将这些繁琐的人工配置自动化。
![](https://img.haomeiwen.com/i2085791/e1156cd1443a2e1b.png)
点击 Boosters 面板里的 Set up account for Workflow Management, 可以一键完成 SAP BTP 上使用 Business Rules 的准备工作。这个辅助器同样也是完成使用 SAP BTP Workflow(工作流)所需配置的入口,后续 Jerry 介绍如何使用 SAP BTP Workflow 服务的文章里还会提到。
该 Boosters 帮助我们自动完成了如下配置工作:
(1)分配服务限额
(2)订阅 Business Rules 管理的 SaaS 应用
(3)创建 Business Rules 服务实例
(4)创建消费 Business Rules 所需的 Destination
(5)给当前用户分配必要的用户角色等权限
![](https://img.haomeiwen.com/i2085791/36c7201c5f483867.png)
下图是 Boosters 为我们分配好的 Entitlements 里包含的 Business Rules Service Plan:
![](https://img.haomeiwen.com/i2085791/ede6a60fd7c2e1f6.png)
当前登录用户已经被自动分配上了使用 Business Rules 服务所必须的用户角色组:
- WorkflowManagementAdmin
- WorkflowManagementBusinessExpert
- WorkflowManagementDeveloper
- WorkflowManagementEndUser
![](https://img.haomeiwen.com/i2085791/6a4cecff0ae198e3.png)
SAP BTP 编辑 Business Rules 的入口,从 Subscriptions 面板里的 Workflow Management 订阅超链接进入:
https://304a49cetrial.cockpit.workflowmanagement.cfapps.ap21.hana.ondemand.com/
![](https://img.haomeiwen.com/i2085791/51d7d32e821eb9a8.png)
在打开的 Fiori Launchpad 里,选择 Manage Rule Projects:
![](https://img.haomeiwen.com/i2085791/5bac0dc3bae96ec9.png)
创建一个新的项目,取名为 DetermineEquipmentJerry01:
![](https://img.haomeiwen.com/i2085791/2b44d2bf9f141736.png)
SAP BTP 上的 Rules Project,包含了 Data Objects,Rule Services,Rulesets 和 Rules 几部分,下面分别介绍。
![](https://img.haomeiwen.com/i2085791/8e3a38d9ef660c28.png)
- Data Objects:相当于 ABAP Data Dictionary 定义的数据结构,用来定义业务规则的输入和输出模型。
比如设计一条给新员工入职(onboarding)分配工作电脑的业务规则,输入是员工信息(Employee),输出是分配的电脑型号(EquipmentInfo).
Employee 结构包含的属性:
![](https://img.haomeiwen.com/i2085791/5e491d18c6fd2d26.png)
上面的结构可以类比 ABAP Data Dictionary 里描述 Employee 信息的 Structure:
![](https://img.haomeiwen.com/i2085791/21f1cf544ebff1ee.png)
- Rules:定义具体的业务规则。SAP BTP Business Rules 支持 Decision Table 和 Text Rule 两种类型的规则模型。
![](https://img.haomeiwen.com/i2085791/578c4b139f3ab3c2.png)
下面这个决策表包含的两条规则的语义是:
- 如果员工所在国家代码为 USA,就给其分配 ID 为 106847 的电脑;
- 如果员工所在国家代码为 DEU,就给其分配 ID 为 106840 的电脑。
![](https://img.haomeiwen.com/i2085791/6800f86f8c50db06.png)
Text Rule 类型的规则,本文不会用到,但将来 Jerry 介绍 SAP BTP Workflow 的文章会提到,所以这里也顺带举个例子。
下图 Text Rule 的语义是,如果电脑的价格大于 800,就将 EmployeeApproval 结构的 ApprovalNeeded 字段设置为 true. 这个字段在后续的 Workflow 文章介绍里,会触发额外的审批流程。
![](https://img.haomeiwen.com/i2085791/29e82247cf394c8a.png)
始终记住我们正在使用的是基于云的 Business Rules 服务,规则模型创建完毕之后,得能够被外界消费才行。
因此新建一个 Rule Service,我们可以将其类比成支持 RFC 调用的 ABAP Remote Enabled Function Module:
![](https://img.haomeiwen.com/i2085791/c1abf29cc71dbd04.png)
定义这个 Rule Service 的输入(Input)结构为 Employee,输出(Result)结构为 EquipmentInfo. 当然这两个 Data Objects 必须提前创建好。
![](https://img.haomeiwen.com/i2085791/069cc826f2dd1bc1.png)
最后,创建一个 Rule Set,将上面创建的包含 Decision Table 的 Rule,以及 Rule Service,依次分配给该 Rule Set:
![](https://img.haomeiwen.com/i2085791/0f394a6baa49a924.png)
![](https://img.haomeiwen.com/i2085791/71385ceb72b0223b.png)
完成 Business Rules 编辑之后,点击 Release Version,发布一个新版本:
![](https://img.haomeiwen.com/i2085791/75ef4a9c1899d955.png)
![](https://img.haomeiwen.com/i2085791/90856384d2cceab9.png)
创建好 Release 版本的 Rule Service 之后,将其部署到 Cloud 运行时环境:
![](https://img.haomeiwen.com/i2085791/bf1eb2960935e8ab.png)
最后,我们在 SAP API Hub 提供的测试工具里,消费这个 Business Rule Service.
登录 SAP API Hub,搜索关键字 business rule:
![](https://img.haomeiwen.com/i2085791/f0bd28c596784672.png)
使用 Rule Execution API for Cloud Foundry:
![](https://img.haomeiwen.com/i2085791/ba65a50868a32461.png)
在使用 HTTP Post 调用部署好的 Rule Service 之前,我们需要先在 API Hub 的测试页面里,新建一个 API Environment,指向被测试 Rule Service 所部署在的 SAP BTP trial 环境。
![](https://img.haomeiwen.com/i2085791/7e5bf536655f669a.png)
创建一个 API Environment,需要完成下列字段的维护。
runtimeurl 字段,将下面 Url 中的 region,替换成实际值:
bpmruleruntime.rule.cfapps.<region>.hana.ondemand.com
![](https://img.haomeiwen.com/i2085791/ce22c89c7b6bda2a.png)
比如我使用的 SAP BTP 运行环境的 Region 为 Singapore 即 ap21:
![](https://img.haomeiwen.com/i2085791/0a5d909e75ee0f9b.png)
由于 SAP BTP Business Rules Service 采取 OAuth 2.0 作为服务消费的认证方式,因此还需要在环境设置里,维护 Client ID,Secret 和 tokenurl.
![](https://img.haomeiwen.com/i2085791/6f2eaa9740999f7d.png)
这三个值从 SAP BTP Cockpit 里获得。给 wm_businessrules 创建一个新的 Service Key:
![](https://img.haomeiwen.com/i2085791/25ea33ba25aee194.png)
在创建好的 Service Key 里,能找到这三个字段的值:
![](https://img.haomeiwen.com/i2085791/af18b9d94832089c.png)
完成所有必填字段的维护,保存 Environment,命名为 Jerry Business Rule.在 API Hub 测试工具里选择该环境,然后点击 Invoke Rule Service,准备以 HTTP Post 的方式,消费部署在 SAP BTP 上的 Rule Service.
![](https://img.haomeiwen.com/i2085791/46c2eb96147696e1.png)
在 HTTP 请求正文里,维护待调用的 Service ID,Version 和 RevisionVersion,这三个字段值在我们之前做 Release Version 操作时能找到。
其中版本号 1.0.1,需要换算成格式 000001000000000001.
![](https://img.haomeiwen.com/i2085791/647da6f8c4a21206.png)
依次进行测试,首先将请求里的 countryofCompany 字段维护为 USA,得到返回的电脑 ID 为 106847:
![](https://img.haomeiwen.com/i2085791/687c3ac04f227482.png)
将 countryofCompany 值改成 DEU,得到的电脑 ID 为 106840:
![](https://img.haomeiwen.com/i2085791/a13786e4a45b7a84.png)
测试结果和我们之前在 Business Rule 里维护的 Decision Table 里的值一致。
![](https://img.haomeiwen.com/i2085791/92cf7a97ce06cae2.png)
有了本文 Business Rules 的基础,后续 Jerry 也会简要介绍 SAP BTP 上的 Workflow(工作流),敬请期待。
更多Jerry的原创文章,尽在:"汪子熙":
![](https://img.haomeiwen.com/i2085791/97c4752c0e619c44.png)
更多阅读
网友评论