Activiti日本語情報ブログ

OSSのBPMエンジン Activitiの日本語情報をまとめています。

【Activiti EL式】リスナーのEL式でプロセスの変数にシステムパラメータを書き込む

(例)プロセスインスタンスIDを変数に格納する。

1. 開始イベントのリスナーに以下を追加する。

  • イベント「start」

  • タイプ「式」

${execution.setVariable("process_instance_id", execution.getProcessInstanceId())}

2. プロセスの開始時に変数にプロセスインスタンスIDが格納される。

【Activitiはまりポイント】デフォルトフローの仕様

Inclusive GatewayやExclusive Gatewayの設定でデフォルトフローが設定できるが、こちらで選択したフローは他のフローが選出されない場合有効である。 デフォルトフローの条件は無視される。

http://www.activiti.org/userguide/#bpmnDefaultSequenceFlow

【Activiti入門】並行ルートの作成

概要

前回の入門記事では条件分岐のルートを紹介しましたが、今回は並行ルートを扱います。 並行ルートとは、同時に異なるユーザタスクが割り当てられるルートのことです。

f:id:lalalafrance:20160428212458p:plain

ステップ

  1. 並行ルートを実現するには、「ParallelGateway」のアイコンを利用します。

    • Gateway」カテゴリにある「ParallelGateway」を利用することで、並行なルートを引くことが可能です。

      http://www.activiti.org/userguide/#bpmnParallelGateway

    • 「ParallelGateway」から各「UserTask」へのシーケンスを引くことで、各「UserTask」ごとに並列にプロセスが動作します。

    • 各「UserTask」から「ParallelGateway」へシーケンスを引くことで、並行に実行されていたプロセスが結合します。各プロセスが完了するまで待ち合わせを行います。

フローの作成

では、実際に並行ルートを実現するフローを作成していきます。

  1. Activiti Diagramを作成し、フローのデザイナー画面を表示します。

  2. 以下のアイコンを配置します。

    • 「Start Event」カテゴリから「StartEvent」を配置します。
    • Gateway」カテゴリから「ExclusiveGateway」を配置します。
    • 「Task」カテゴリから「UserTask」を2つ配置します。
    • Gateway」カテゴリから「ExclusiveGateway」を配置します。
    • 「End Event」カテゴリから「EndEvent」を配置します。
  3. 以下のように線を引きます。

    • 「StartEvent」から「ParallelGateway」へ線を引きます。
    • 「ParallelGateway」から2つの「UserTask」へそれぞれ線を引きます。
    • 2つの「UserTask」からそれぞれ「ParallelGateway」へ線を引きます。
    • 「ParallelGateway」から「EndEvent」へ線を引きます。
  4. 起票者を設定します。

    • デザイナー上のアイコン以外の箇所をクリックします。
    • Propertiesタブの「Candidate start users」に「fozzie」を設定します。
  5. 処理対象者を設定します。

    • デザイナー上のユーザタスクの1つ目をクリックします。
    • Propertiesタブの「Main config」-「Assignee」に「kermit」を設定します。
    • デザイナー上のユーザタスクの2つ目をクリックします。
    • Propertiesタブの「Main config」-「Assignee」に「gonzo」を設定します。
  6. フローを保存・ビルドし、出力されたbarファイルをActiviti Explorerにデプロイします。

フローの実行

  1. fozzie/fozzieでActiviti Explorerへログインします。

  2. 「プロセス」からデプロイしたフローを選択します。

  3. 「プロセスの開始」を押下し、プロセスを開始します。

  4. kermit/kermitでActiviti Explorerへログインします。

  5. 「ケース」-「受信トレイ」にタスクがあります。

  6. 「タスクの完了」を押下し、タスクを完了させます。

  7. gonzo/gonzoでActiviti Explorerへログインします。

  8. 「ケース」-「受信トレイ」にタスクがあります。

  9. 「タスクの完了」を押下し、タスクを完了させます。

  10. fozzie/fozzieでActiviti Explorerへログインします。

  11. 「プロセス」-「マイ・インスタンス」から開始したフローが完了していることを確認します。

f:id:lalalafrance:20160428212516p:plain

注意

  • ParallelGatewayに接続されるシーケンスの条件は、評価されません。条件の設定は、無視されます。

[追記]

この記事では、並列に動作しているプロセスをParallelGatewayで再度結合し待ち合わせを行っていますが、結合しない場合は各プロセスが終了まで並列に動作します。

f:id:lalalafrance:20170416003923p:plain

【Activiti入門】変数

概要

  • Activitiのプロセスでは、変数を利用してプロセスに関する入力データを扱う。

  • 変数はデータベース(テーブル ACT_RU_VARIABLE)にて管理される。

    ただし、変数の値にJava beanなどが格納された場合は、バイナリデータとしてACT_GE_BYTEARRAYテーブルに格納される。

  • 変数には、スコープが存在する。

  • 参考

    Activiti User Guide 4.5. Variables

Process Variables

  • プロセス全体で有効となる変数。

    レコードとしては、テーブル ACT_RU_VARIABLEのカラムproc_inst_idとカラムexecution_idが一致するもの。

Execution

  • アクティブなExecution内でのみ有効な変数。

    説明が難しいが、Activitiでは、プロセスインスタンス上で現在アクティブな箇所をExecutionと定義している。 例えば、以下のような並行ルートの場合は、並行ルートの処理中に3つのアクティブなExecutionが存在する。 1つ目はプロセスインスタンス全体のExecution、2,3つ目はそれぞれの並行ルートのExecutionである。

    f:id:lalalafrance:20160419175932p:plain

  • Executionスコープの変数とは、プロセスインスタンスのExecutionではない、個々のExecution内で有効となる変数である。

    レコードとしては、テーブル ACT_RU_VARIABLEのカラムproc_inst_idとカラムexecution_idが一致しないもの。

UserTask Variables

  • ユーザタスク内でのみ有効な変数。

    レコードとしては、テーブル ACT_RU_VARIABLEのカラムtask_id_が空でないもの。

履歴

  • 変数の履歴は、テーブル ACT_HI_VARINSTに格納される。

Activiti 公開情報

Activitiに関して公開されている情報源をまとめました。

Document

  1. Activiti User Guide

    無料で公開されている公式ドキュメント。

    Activiti EngineからActiviti Explorer・Activiti RESTまで薄く広く解説している。

    http://www.activiti.org/userguide/

  2. Activiti 5.x Business Process Management Beginner's Guide

    Activiti Explorerをベースにして各アイコン・機能の解説をしている。

    Activiti Explorer・Activiti Designerだけの利用であれば、この1冊で十分事足ります。

    Activiti 5.x Business Process Management Beginner's Guide

    Activiti 5.x Business Process Management Beginner's Guide

  3. Activiti in Action: Executable Business Processes in BPMN 2.0

    Activiti EngineのAPI・内部仕様の解説書。

    Activiti Engineを組み込んだWebアプリケーションを開発する場合は参考になります。

    Activiti in Action: Executable Business Processes in BPMN 2.0

    Activiti in Action: Executable Business Processes in BPMN 2.0

Download

  1. Activiti Designer

    EclipseプラグインであるActiviti Designerの更新サイト。

    http://activiti.org/designer/update/

  2. Activiti Explorer

    Activiti Explorerのwarファイルが含まれたzipがダウンロードできます。 http://activiti.org/download.html

リリース情報

  1. JIRA

    各バージョンごとの不具合修正・機能追加情報がまとまっています。

    私はやったことはないですが、issueを報告することもできるようです。

    https://activiti.atlassian.net/projects/ACT?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page&status=no-filter

    無料ですが、アカウントを作成する必要があります。

Q&A

  1. フォーラム

    困った場合は、こちらで質問できるようです。

    感覚ですが、GitHubのissueよりは活発な感じがします。

    https://forums.activiti.org/

    [2016/12/14 追記]フォーラムのサイトが以下に変更になったようです。 https://community.alfresco.com/community/bpm/content

  2. Github Issues

    https://github.com/Activiti/Activiti/issues

その他

  1. Jenkins(各プラットフォームごとのテストケース実行環境)

    http://ec2-54-217-5-246.eu-west-1.compute.amazonaws.com:8080/jenkins/

【Activiti入門】条件分岐ルートの作成

概要

前回の入門記事では直線のルートを紹介しましたが、今回はもう少し業務プロセスらしい、条件分岐のルートを扱います。 条件分岐ルートとは、入力値に応じて、異なるユーザタスクが割り当てられるルートのことです。

ステップ

  1. 条件判定の対象となる入力項目を用意します。

    • 前回の入門記事で紹介したActiviti Explorerを利用する場合、form属性を設定することで「StartEvent」・「UserTask」に入力項目を設定できます。

    • form属性は、フィールドの名称・データ型・変数名などを設定することで「StartEvent」・「UserTask」を処理する画面に入力項目を設定できる機能です。

      http://www.activiti.org/userguide/#formProperties

    • Activiti Designerにて「StartEvent」・「UserTask」のpropertiesタブから設定します。

  2. 条件分岐を行うには、「ExclusiveGateway」のアイコンを利用します。

    • Gateway」カテゴリにある「ExclusiveGateway」を利用することで、各「UserTask」へ分岐させることが可能です。

      http://www.activiti.org/userguide/#bpmnExclusiveGateway

    • 「ExclusiveGateway」から各「UserTask」へのシーケンスに対して、それぞれの到達条件を設定します。

    • 1で設置したフィールドは、変数として到達条件の条件式で利用できます。

フローの作成

では、実際に条件分岐を行うフローを作成していきます。

  1. Activiti Diagramを作成し、フローのデザイナー画面を表示します。

  2. 以下のアイコンを配置します。

    • 「Start Event」カテゴリから「StartEvent」を配置します。
    • Gateway」カテゴリから「ExclusiveGateway」を配置します。
    • 「Task」カテゴリから「UserTask」を2つ配置します。
    • 「End Event」カテゴリから「EndEvent」を配置します。
  3. 以下のように線を引きます。

    • 「StartEvent」から「ExclusiveGateway」へ線を引きます。
    • 「ExclusiveGateway」から2つの「UserTask」へそれぞれ線を引きます。
    • 2つの「UserTask」からそれぞれ「EndEvent」へ線を引きます。

    f:id:lalalafrance:20160328010249p:plain

  4. 「StartEvent」にフィールドを設置します。

    • 「StartEvent」を押下します。
    • Propertiesタブを選択し、FormのNewを押下します。
    • 表示されたダイアログに以下のように入力します。

      id name type Variable Readable Writeable Required
      price Price long price true true true

    f:id:lalalafrance:20160328010310p:plain

  5. 「UserTask」にフィールドを設定します。

    • 「UserTask」を押下します。
    • Propertiesタブを選択し、FormのNewを押下します。
    • 表示されたダイアログに以下のように入力します。

      id name type Variable Readable Writeable Required
      price Price long price true false false
  6. 条件分岐を設定します。

    • 「ExclusiveGateway」から1つ目の「UserTask」へのシーケンスを押下します。

    • 表示されたpropertiesタブMain configのcondition属性に「${price>1000}」を入力します。

    • 「ExclusiveGateway」から2つ目の「UserTask」へのシーケンスを押下します。

    • 表示されたpropertiesタブMain configのcondition属性に「${price<=1000}」を入力します。

  7. フローを保存・ビルドし、出力されたbarファイルをActiviti Explorerにデプロイします。

フローの実行

  1. fozzie/fozzieでActiviti Explorerへログインします。

  2. 「プロセス」からデプロイしたフローを選択します。

  3. 「プロセスの開始」を押下すると、入力画面が表示されます。

  4. 「Price」に100を入力し、プロセスを開始します。

    f:id:lalalafrance:20160328010359p:plain

  5. 「プロセス」の「マイ・インスタンス」から開始したフローの状態を確認します。

  6. 条件分岐が判定され、2つ目の「UserTask」が割り当てられたことを確認します。

    f:id:lalalafrance:20160328010420p:plain

  7. kermit/kermitでActiviti Explorerへログインします。

  8. 「ケース」-「受信トレイ」にタスクがあります。

  9. タスクを選択し、Priceが100であることを確認します。

  10. 「タスクの完了」を押下することで、プロセスが完了します。