這是 Jerry 2021 年的第 44 篇文章,也是汪子熙公眾號總共第 321 篇原創文章。
在 SAP ABAP On-Premises 產品工作過的 ABAP 開發人員,可能都接觸或者聽說過 Business Rule Framework(簡稱 BRF,后面還有升級版 BRF+)這個框架。

SAP BRF+ 主要包含實現存儲功能的規則倉庫(Rules Repository),以及根據用戶輸入,分析並執行規則,返回給用戶處理結果的規則處理器(Rules Processor)兩部分。前台提供的是基於 ABAP Webdynpro 界面的規則編輯器,支持決策表,決策樹和公式等多種方式的規則建模方式。規則倉庫和規則處理器位於 ABAP 系統后台。

了解 SAP ABAP BRF+,有助於我們學習其他的業務規則解決方案。比如 SAP Commerce Cloud,選擇的是支持 Java Rules Engine API 標准的開源業務規則引擎和企業框架 Drools.

無論是 SAP ABAP BRF+ 還是 Drools,盡管其技術實現細節不同,但工作場景和實現的需求都一致:
- 業務規則制定者,在系統里根據建模工具維護業務規則
- 業務規則解決方案暴露出接口,消費者調用該接口,傳入輸入,得到業務規則處理器執行后返回的輸出。
本文簡要介紹 SAP Business Technology Platform(下文簡稱 SAP BTP)上的 Business Rules Service.
登錄 SAP BTP Cockpit,在 Service Marketplace 里找到 Business Rules Service,其描述信息強調,這是一個基於雲的業務規則解決方案。

Jerry 經歷了從 SAP HANA Cloud Platform,到 SAP Cloud Platform,再到如今 SAP Business Technology Platform 的變遷史,切身感受到,隨着時間的推移,開發人員消費這些雲端服務的步驟越來越簡捷了。
以前應用開發人員在 Service Marketplace 選擇一個服務后,在使用之前,需要手動配置 Entitlements 和進行用戶角色分配等工作。而如今使用 SAP BTP 提供的 Boosters,能將這些繁瑣的人工配置自動化。

點擊 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)給當前用戶分配必要的用戶角色等權限

下圖是 Boosters 為我們分配好的 Entitlements 里包含的 Business Rules Service Plan:

當前登錄用戶已經被自動分配上了使用 Business Rules 服務所必須的用戶角色組:
- WorkflowManagementAdmin
- WorkflowManagementBusinessExpert
- WorkflowManagementDeveloper
- WorkflowManagementEndUser

SAP BTP 編輯 Business Rules 的入口,從 Subscriptions 面板里的 Workflow Management 訂閱超鏈接進入:
https://304a49cetrial.cockpit.workflowmanagement.cfapps.ap21.hana.ondemand.com/

在打開的 Fiori Launchpad 里,選擇 Manage Rule Projects:

創建一個新的項目,取名為 DetermineEquipmentJerry01:

SAP BTP 上的 Rules Project,包含了 Data Objects,Rule Services,Rulesets 和 Rules 幾部分,下面分別介紹。

- Data Objects:相當於 ABAP Data Dictionary 定義的數據結構,用來定義業務規則的輸入和輸出模型。
比如設計一條給新員工入職(onboarding)分配工作電腦的業務規則,輸入是員工信息(Employee),輸出是分配的電腦型號(EquipmentInfo).
Employee 結構包含的屬性:

上面的結構可以類比 ABAP Data Dictionary 里描述 Employee 信息的 Structure:

- Rules:定義具體的業務規則。SAP BTP Business Rules 支持 Decision Table 和 Text Rule 兩種類型的規則模型。

下面這個決策表包含的兩條規則的語義是:
- 如果員工所在國家代碼為 USA,就給其分配 ID 為 106847 的電腦;
- 如果員工所在國家代碼為 DEU,就給其分配 ID 為 106840 的電腦。

Text Rule 類型的規則,本文不會用到,但將來 Jerry 介紹 SAP BTP Workflow 的文章會提到,所以這里也順帶舉個例子。
下圖 Text Rule 的語義是,如果電腦的價格大於 800,就將 EmployeeApproval 結構的 ApprovalNeeded 字段設置為 true. 這個字段在后續的 Workflow 文章介紹里,會觸發額外的審批流程。

始終記住我們正在使用的是基於雲的 Business Rules 服務,規則模型創建完畢之后,得能夠被外界消費才行。
因此新建一個 Rule Service,我們可以將其類比成支持 RFC 調用的 ABAP Remote Enabled Function Module:

定義這個 Rule Service 的輸入(Input)結構為 Employee,輸出(Result)結構為 EquipmentInfo. 當然這兩個 Data Objects 必須提前創建好。

最后,創建一個 Rule Set,將上面創建的包含 Decision Table 的 Rule,以及 Rule Service,依次分配給該 Rule Set:


完成 Business Rules 編輯之后,點擊 Release Version,發布一個新版本:


創建好 Release 版本的 Rule Service 之后,將其部署到 Cloud 運行時環境:

最后,我們在 SAP API Hub 提供的測試工具里,消費這個 Business Rule Service.
登錄 SAP API Hub,搜索關鍵字 business rule:

使用 Rule Execution API for Cloud Foundry:

在使用 HTTP Post 調用部署好的 Rule Service 之前,我們需要先在 API Hub 的測試頁面里,新建一個 API Environment,指向被測試 Rule Service 所部署在的 SAP BTP trial 環境。

創建一個 API Environment,需要完成下列字段的維護。
runtimeurl 字段,將下面 Url 中的 region,替換成實際值:
bpmruleruntime.rule.cfapps.
.hana.ondemand.com

比如我使用的 SAP BTP 運行環境的 Region 為 Singapore 即 ap21:

由於 SAP BTP Business Rules Service 采取 OAuth 2.0 作為服務消費的認證方式,因此還需要在環境設置里,維護 Client ID,Secret 和 tokenurl.

這三個值從 SAP BTP Cockpit 里獲得。給 wm_businessrules 創建一個新的 Service Key:

在創建好的 Service Key 里,能找到這三個字段的值:

完成所有必填字段的維護,保存 Environment,命名為 Jerry Business Rule.在 API Hub 測試工具里選擇該環境,然后點擊 Invoke Rule Service,准備以 HTTP Post 的方式,消費部署在 SAP BTP 上的 Rule Service.

在 HTTP 請求正文里,維護待調用的 Service ID,Version 和 RevisionVersion,這三個字段值在我們之前做 Release Version 操作時能找到。
其中版本號 1.0.1,需要換算成格式 000001000000000001.

依次進行測試,首先將請求里的 countryofCompany 字段維護為 USA,得到返回的電腦 ID 為 106847:

將 countryofCompany 值改成 DEU,得到的電腦 ID 為 106840:

測試結果和我們之前在 Business Rule 里維護的 Decision Table 里的值一致。

有了本文 Business Rules 的基礎,后續 Jerry 也會簡要介紹 SAP BTP 上的 Workflow(工作流),敬請期待。
更多Jerry的原創文章,盡在:"汪子熙":

更多閱讀
