ワークフローを利用するモデルに追加される項目
ワークフローを利用するモデルは、対象テーブルに次の4つの項目が付与されます。
項目名 |
型 |
説明 |
内容 |
jfcWorkflowCreateUser |
文字列型 |
作成者 |
"yamada" (juserモデルのuserid値) |
jfcWorkflowAdmitUser |
文字列型(テキストエリア) |
承認対象者。別の言い方をすると、このフローを保留しているもの。 |
"saitou" (ユーザの場合) "groupid:1000" (グループの場合) |
jfcWorkflowProcessedLayerId |
文字列型 |
処理済みノードの値 (*1) |
"2" |
jfcWorkflowCurrentNode |
文字列型 |
処理待ちノードの値 (*2) |
"3" |
フロー状態、承認対象者の取得時に、上記項目の値が使われます。
システム系モデル
設定に関するモデル
ワークフローを動作させるための各種設定情報を格納しているモデルは次のとおりです。
モデル名 |
モデルID |
説明 |
参考ページ |
フローパターン |
jfcflow_setting |
ワークフローの流れの種類を格納する。 |
フローパターンの設定を行う |
フロー参加者設定 |
jfcparticipant_setting |
フローパターンと申請者/承認者/決裁者などを関連付ける。 |
フローの参加者を設定する |
ワークフロー設定 |
jfcworkflow_setting |
フロー参加者設定とモデルを関連付ける。 |
モデルにワークフロー定義を設定する |
代理者設定 |
jfcproxy_setting |
代理承認機能のための設定情報を格納する。 |
代理承認 |
運用に関するモデル
ワークフローの運用で利用しているモデルは次のとおりです。
上記モデルに加え、(前述した)モデル内に用意された4つの管理項目を組み合わせてワークフローを運用しています。
動作の流れ
アドオンギャラリーで提供しているワークフローサンプル「年休申請」モデル (JSHLEAVE) を使った、ワークフロー処理によるテーブルのデータ推移を説明します。
1. 申請
アカウント user1 が申請した例です。次の承認者を user2 とします。
このとき、JSHLEAVE モデルに用意されるワークフロー管理項目は次のようになります。
項目 |
内容 |
jfcWorkflowCreateUser |
user1 |
jfcWorkflowAdmitUser |
user2 |
jfcWorkflowProcessedLayerId |
1 |
jfcWorkflowCurrentNode |
2 |
また、ワークフローのイベントを管理する jfcworkstate は次のようになります。申請処理によって2レコードが追加されます。
ID |
フローID |
モデル名 |
モデル主キー |
参加者 |
処理者 |
フロー参加者ID |
処理済階層ID |
処理待ち階層ID |
処理内容 |
コメント |
処理日 |
更新日 |
ID | flowid | modelname | modelpkey | participant | username | participantid | processed_layerid | wait_layerid | event | comment2 | insert_date | update_date |
1000 |
1000 |
JSHLEAVE |
1000 |
NULL |
user1 |
NULL |
0 |
1 |
Start |
NULL |
2020-12-02 08:24:07 |
2020-12-02 08:24:08 |
1001 |
1000 |
JSHLEAVE |
1000 |
NULL |
user1 |
1 |
1 |
2 |
Application |
よろしくお願いします。 |
2020-12-02 08:24:20 |
2020-12-02 08:24:20 |
- 最初のレコードは処理内容が Start となっています。これはデータが登録されたが、ワークフローはまだ申請されていないことを示します。
- 次のレコードは処理内容が Application となっています。これはワークフローが申請されたことを示します。
- 対象モデル(ここでは JSHLEAVE)に用意されている「作成者」(jfcWorkflowCreateUser) の値は、最初にセットされた値(ここでは "user1")が維持されます。
- 対象モデルに用意されている「承認対象者(このフローを保留しているもの)」(jfcWorkflowAdmitUser) の値は、jfcworkstate テーブルのレコードに含まれていません。ワークフロー処理を行ったときに内部で計算された値が格納されます。
- 対象モデルに用意されている「処理済みノード」(jfcWorkflowProcessedLayerId) の値は、jfcworkstate テーブルの「処理済み階層ID」(processed_layerid)項目に相当します。このワークフロー(ここでは「フローID」が "1000" のワークフロー)のもっとも新しいレコードの値と同じです。
- 対象モデルに用意されている「処理待ちノード」(jfcWorkflowCurrentNode) の値は、jfcworkstate テーブルの「処理待ち階層ID」(wait_layerid)項目に相当します。このワークフロー(ここでは「フローID」が "1000" のワークフロー)のもっとも新しいレコードの値と同じです。
2. 承認と決裁
アカウント user2 が承認した例です。今回は2ノード(順次-順次) とし、この承認がそのまま決裁になります。
このとき、JSHLEAVE モデルに用意されるワークフロー管理項目は次のようになります。
項目 |
内容 |
jfcWorkflowCreateUser |
user1 |
jfcWorkflowAdmitUser |
NULL |
jfcWorkflowProcessedLayerId |
2 |
jfcWorkflowCurrentNode |
NULL |
また、ワークフローのイベントを管理する jfcworkstate は次のようになります。承認および決裁処理によって2レコードが追加されます。
ID |
フローID |
モデル名 |
モデル主キー |
参加者 |
処理者 |
フロー参加者ID |
処理済階層ID |
処理待ち階層ID |
処理内容 |
コメント |
処理日 |
更新日 |
ID | flowid | modelname | modelpkey | participant | username | participantid | processed_layerid | wait_layerid | event | comment2 | insert_date | update_date |
1002 |
1000 |
JSHLEAVE |
1000 |
NULL |
user2 |
2 |
2 |
NULL |
Admit |
了解しました。 |
2020-12-02 08:30:10 |
2020-12-02 08:30:10 |
1003 |
1000 |
JSHLEAVE |
1000 |
NULL |
user2 |
NULL |
2 |
NULL |
End |
了解しました。 |
2020-12-02 08:30:10 |
2020-12-02 08:30:10 |
- 3行目のレコードは処理内容が Admit となっています。これはワークフローの承認処理が行われたことを示します。
- 4行目のレコードは処理内容が End となっています。これはワークフローが決裁されたことを示します。
- 対象モデル(ここでは JSHLEAVE)に用意されている「作成者」(jfcWorkflowCreateUser) の値は、最初にセットされた値(ここでは "user1")が維持されます。
- 対象モデルに用意されている「承認対象者(このフローを保留しているもの)」(jfcWorkflowAdmitUser) の値は NULL となっています。これはワークフローが終了したため、次の承認者はいないことを示します。
- 対象モデルに用意されている「処理済みノード」(jfcWorkflowProcessedLayerId) の値は、ワークフローが終了したときのノードになっています。ここでは決裁されたため、最後のノードID "2" となっています。
- 対象モデルに用意されている「処理待ちノード」(jfcWorkflowCurrentNode) の値も NULL となっています。ワークフローが終了したため、次のノードがないことを示します。
補足
ワークフローで使う用語
マニュアルでは「ルート」「ノード」「フローパターン」「フロー参加者」「フローイベント」といった用語を使って説明しています。[詳細...]
「処理内容」について
jfcworkstate テーブルの「処理内容(event)」項目は次のいずれかの値を持ちます。"Start", "Application", "Admit", "Reject", "Suspend", "Back", "Cancel", "End", "Rewind"
詳細はワークフローのイベントに関する説明をお読みください。
「階層」について
- 内部ではワークフローの各ノードに番号を降っています。番号は1から開始され、ノードが進むごとに1ずつ増えます。システム内部では layerid と表現しています。