BPMN 2.0使用簡介

banq發表於2024-07-10

在這個簡短的教程中,我將展示如何使用業務流程建模符號 (BPMN)構建業務應用程式。這種方法不同於通常的以資料為中心的方法,因為我們專注於流程管理而不是資料處理。

資料處理與流程管理
當我們按照傳統方法構建以資料為中心的業務應用程式時,我們通常首先設計一個資料模式。資料模式定義可以管理哪種資料。該應用程式允許我們建立新的資料集、編輯現有資料,當然還可以搜尋資料。

在以流程為中心的業務應用程式中,我們首先嚐試回答如何處理資料,以便讓每個參與者都能以最佳方式訪問資訊,從而實現特定的業務目標。在當今快速發展的商業環境中,這種問題變得越來越重要。BPMN 提供了一種完美的方法,可以從頭到尾對工作流及其業務目標進行建模。可以使用各種工具建立 BPMN 模型,例如開源 BPMN 設計器Open-BPMN

BPMN 的一大優勢在於它不僅讓所有利益相關者清楚地瞭解流程,BPMN 2.0 模型還可以由合適的流程引擎執行。這種“低程式碼”或“模型驅動”方法帶來了一種更靈活的業務應用程式實現方式。當然,資料仍然發揮著重要作用,工作流引擎允許我們以各種方式管理業務資料。那麼讓我們看看它是如何工作的……

從業務流程開始……
首先,我們必須考慮業務應用背後的業務流程。在考慮資料之前,我們應該關注以下問題:

  • 我們為什麼需要這種資訊?
  • 誰負責建立或更新資料?
  • 正確處理資料需要哪些步驟?
  • 我們期望接下來會發生什麼?

如前所述,業務流程定義了實現具體業務目標的方式。在 BPMN 模型中,我們可以從頭到尾描述這種方式。


BPMN 模型定義了:

  • 開始(綠色)和結束(紅色)事件來標記流程的開始和結束。
  • 活動元素(藍色框)定義業務流程中的單個任務。這也可以是一個要達到的里程碑。
  • 事件(藍色圓圈)定義進入新任務或狀態的轉換。事件可以由外部觸發(例如“收到客戶的訂單”)或由參與者觸發(例如“建立提案並提交稽核”)。

這樣,我們就得到了一個序列流 - 工作流。

商業規則
除了順序流之外,我們還可以定義業務規則來實現其他業務邏輯。例如,我們可以定義此示例流程中的稽核僅適用於投標金額超過 1.000.00 歐元的提案。為此,我們可以向圖表中新增具有條件流的專屬閘道器:


在此示例中,“Gateway-1”和“Review Task”之間的轉換(序列流)現在包含一個條件 - 例如:

workitem.getItemValueDouble('amount')>=1000.0

BPMN 引擎可以根據工作流中提供的資料,使用不同的指令碼語言評估此類條件。資料可以直接儲存在流程例項中,也可以透過對外部資料來源的引用來定義。BPMN 2.0 標準中還定義了許多其他元素,允許對更復雜的業務流程進行建模。

執行您的業務流程...
現在讓我們看看如何使用 BPMN 引擎在應用程式中啟動和控制這樣的 BPMN 流程。有各種可用的 BPMN 引擎,其中很多都是開源的。

請參閱Github 上由 @meirwah 維護的awesome-workflow-engines列表。


下面我使用支援 BPMN 2.0 的Imixs-Workflow引擎,它提供了一個 docker 容器,讓我們可以立即開始使用,而無需編寫任何程式碼。使用 Imixs -Microservice,我們可以在容器中啟動 BPMN 工作流引擎。只需建立一個docker-compose.yaml包含以下內容的本地檔案:

services:
  imixs-db:
    image: postgres:13.11
    environment:
      POSTGRES_PASSWORD: adminadmin
      POSTGRES_DB: workflow-db  
  imixs-app:
    image: imixs/imixs-microservice:latest
    environment:
      TZ: <font>"CET" 
      LANG:
"en_US.UTF-8"  
      POSTGRES_USER:
"postgres"
      POSTGRES_PASSWORD:
"adminadmin"
      POSTGRES_CONNECTION:
"jdbc:postgresql://imixs-db/workflow-db"
    ports:
      -
"8080:8080"

…然後使用以下命令啟動服務:

$ docker compose up

該服務以簡短的歡迎頁面 http ://localhost:8080開始,並在http://localhost:8080/api/openapi-ui/index.html提供 Rest 介面。此 Rest-API 使用者介面允許我們測試啟動工作流或處理現有工作流的各種方法。


上傳你的模型
首先我們需要上傳我們的模型。為此,我們可以使用該curl命令並將我們的 BPMN 檔案釋出到 Rest Service 端點:

$ curl --user admin:adminadmin --request POST \
-Tmy-model.bpmn http:<font>//localhost:8080/api/model/bpmn<i>

或者我們可以使用 Rest API UI 在資源上釋出模型/api/model/bpmn/


可以從Github下載測試模型,
所有可用模型的狀態都可以在 Rest API 端點進行驗證:

http:<font>//localhost:8080/api/model<i>

注意:我在這裡使用使用者 ID 'admin' 和密碼 'adminadmin'。此服務定義了更多具有不同角色的使用者。在此處檢視詳細資訊。

啟動新流程例項
現在,服務已啟動並執行,我們可以啟動第一個流程例項。為此,我們只需要釋出包含模型資訊和業務資料的 XML 文件。我們可以使用以下 Rest API 端點發布新的流程例項:

POST: /api/workflow/workitem

<document xmlns:xsi=<font>"http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <item name=
"$modelversion"><value xsi:type="xs:string">proposal-en-1.0</value></item>
    <item name=
"$taskid"><value xsi:type="xs:int">1000</value></item>
    <item name=
"$eventid"><value xsi:type="xs:int">10</value></item>
    <item name=
"subject">
        <value xsi:type=
"xs:string">My first propsal...</value>
    </item>
    <item name=
"amount">
        <value xsi:type=
"xs:double">500.0</value>
    </item>
</document>

再次,您可以直接使用 Rest-API UI 釋出資料。在此示例中,我定義了模型版本、初始任務和要處理的事件,以及一些自定義業務資料(主題和金額)。

工作流引擎根據我們上傳的 BPMN 模型自動執行資料並返回結果物件。為了驗證結果,我們可以檢查任務列表,其中包含使用者“admin”在以下位置建立的所有流程例項:

http://localhost:8080/api/workflow/tasklist/creator/admin

如您所見,工作流引擎已處理我們的資料並將狀態“已完成”應用於我們的新工作流例項。這是因為金額低於 1.000,00。為了測試我們的業務邏輯,我們現在可以將金額更改為大於 1.000,00 的值,這將根據我們的業務規則在狀態“稽核”中啟動另一個新流程例項。

現在,我們可以輕鬆更改流程邏輯並新增新任務或業務規則。我們所要做的就是上傳新版本的 BPMN 模型。無需重新部署應用程式。

要更新現有流程例項的資料,我們可以將資料與$uniqueid模型中的相應事件一起釋出:

<document xmlns:xsi=<font>"http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <item name=
"$uniqueid"><value xsi:type="xs:string">8333c61c-b973-4591-aabf-ec92bd59d74b</value></item>
    <item name=
"$eventid"><value xsi:type="xs:int">10</value></item>
    <item name=
"address">
        <value xsi:type=
"xs:string">Baker Street 221b.</value>
    </item>
</document>

該欄位$uniqueid由第一次建立新工作流例項時返回,是進一步處理步驟的參考。在此示例中,我僅提供參考 ID、事件 ID 和一些新資料。工作流引擎將根據分配模型驗證請求和事件。這可確保始終按照我們的業務流程處理資料!我們還可以使用$uniqueID從工作流引擎獲取資料 - 例如在 Web 介面中顯示資料。

如何將 BPMN 整合到您的應用程式中?
在本教程中,我故意省略了 Web 介面的設計,因為我想專注於業務邏輯。使用 Rest API(如本例所示)時,可以使用不同的前端技術輕鬆地將工作流引擎整合到應用程式中。此外,通常還有其他方法可以將 BPMN 引擎連線到您自己的應用程式,具體取決於引擎使用的框架。例如,許多開源引擎都基於 Java,可以透過 Maven 或 Gradle 等常見構建工具進行整合。

例如,您可以將 Imixs Workflow 引擎整合到 Jakarta EE 應用程式中,並具有以下依賴項:

...
    <dependency>
        <groupId>org.imixs.workflow</groupId>
        <artifactId>imixs-workflow-engine</artifactId>
        <version>${org.imixs.workflow.version}</version>
    </dependency>
    <dependency>
        <groupId>org.imixs.workflow</groupId>
        <artifactId>imixs-workflow-index-lucene</artifactId>
        <version>${org.imixs.workflow.version}</version>
    </dependency>
...

...並使用 CDI 框架在程式碼中呼叫引擎,如下所示:

@Inject
private org.imixs.workflow.engine.WorkflowService workflowService;

ItemCollection workitem=new ItemCollection().model(<font>"proposal-en-1.0").task(1000).event(10);
// assign some business data...<i>
workitem.setItemValue(
"amount",500.0);
// process the workitem<i>
workitem = workflowService.processWorkItem(workitem);

此程式碼示例等同於上面示例中的 Rest API 呼叫。

資料整合
如前所述,另一個方面是您處理業務資料的方式。在我的示例程式碼中,我將業務資料直接嵌入到工作流例項中,因此不需要外部資料庫。

但當然在某些情況下,僅儲存對外部資料集的引用並將業務資料儲存在單獨的資料庫中可能會很有用。

或者您可以透過擴充套件資料模式來從資料處理應用程式中引用工作流例項。

在後兩種情況下,我們還需要提供資料服務,以便能夠在流程引擎中處理前面提到的業務邏輯。所有現代 BPMN 引擎都提供介面來連線資料來源和流程邏輯。

結論
總之,將 BPMN 2.0 整合到您的業務應用程式中,可以提供一種結構化且高效的方式來處理您的業務流程。視覺化處理模型的能力不僅簡化了複雜工作流的設計和管理,而且還增強了技術和非技術團隊之間的協作。透過使用 Open-BPMN 或 Imixs-Workflow 等工具,您可以輕鬆實施 BPMN 2.0 標準,確保您的業務應用程式既可擴充套件又具有適應性。採用 BPMN 2.0 可以帶來更有組織、更透明、更有效的業務運營,為更大的成功和增長奠定基礎。

相關文章