2.1.5.1. ワークフローライブラリの全体構造¶
2.1.5.1.1. 構造¶
2.1.5.1.1.1. クラス図¶
2.1.5.1.1.2. インタフェース定義¶
インタフェース名 | 概要 |
---|---|
package:: interface:: |
ワークフローインスタンス をあらわすインタフェース。 業務アプリケーションは、本インタフェースを通じてワークフローの進行や担当者(グループ)の割り当て等を行う。 |
package:: interface:: |
WorkflowInstance を生成するインタフェース。 |
package:: interface:: |
ワークフロー定義 を読み込むインタフェース。 |
package:: interface:: |
タスク の終了条件を定義するインタフェース。 本インタフェースの詳細及び本サンプルで提供する実装クラスの一覧は、 マルチインスタンス・タスクの終了判定 を参照。 |
package:: interface:: |
シーケンスフロー のフロー進行条件を定義する インタフェース。 本インタフェースの詳細及び本サンプルで提供する実装クラスの一覧は、 ゲートウェイの進行先ノードの判定制御 を参照。 |
2.1.5.1.1.3. クラス定義¶
クラス名 | 概要 |
---|---|
package:: class:: |
ワークフローインスタンスの開始や検索を行うクラス。 WorkflowInstanceFactory を使用して WorkflowInstance を生成する。 WorkflowInstanceFactory の実装クラスは、 コンポーネント定義 に定義されているクラスを使用する。 |
package:: class:: |
WorkflowInstance の基本実装クラス。 |
package:: class:: |
完了状態のワークフローインスタンスをあらわす、 WorkflowInstance の実装クラス。 開始済みワークフローの検索 で、対象インスタンスが見つからず、完了状態のワークフローインスタンスが必要な場合に利用される。 |
package:: class:: |
WorkflowInstanceFactory の実装クラスで、 BasicWorkflowInstance を生成する。 |
package:: class:: |
ワークフローのコンポーネント設定情報を保持するクラス。 コンポーネント定義の詳細は、 コンポーネント定義 を参照。 |
package:: class:: |
ワークフロー機能で使用するユーティリティメソッドを提供するクラス。 |
package:: class:: |
WorkflowDefinitionLoader の実装クラスで、 データベース から ワークフロー定義 を読み込むクラス。 テーブル定義(テーブル名やカラム名)は、 WorkflowDefinitionSchema から取得する。 |
package:: class:: |
ワークフローの定義情報を保持するテーブル の テーブル名やカラム名情報を保持するクラス。 |
package:: class:: |
ワークフロー定義ローダー から読み込んだ ワークフロー定義 を保持するクラス。 本クラスで保持しているワークフロー定義は、以下の方法で取得できる。
|
package:: class:: |
ワークフロー定義を保持するクラス。 以下の定義情報を保持する。 |
package:: class:: |
レーン定義情報を保持する。 |
package:: class:: |
フローノード定義を保持する抽象クラス。 |
package:: class:: |
フローノード定義 のサブクラスでタスク定義情報を保持する。 |
package:: class:: |
フローノード定義 のサブクラスでイベント定義情報を保持する。 |
package:: class:: |
フローノード定義 のサブクラスでゲートウェイ定義情報を保持する。 |
package:: class:: |
フローノード定義 のサブクラスで境界イベント定義情報を保持する。 |
package:: class:: |
シーケンスフロー定義を保持するクラス。 |
package:: class:: |
ワークフローの進行状態を管理するテーブル にアクセスするデータベースアクセスクラス。 テーブル定義(テーブル名やカラム名)は、 workflowInstanceSchema から取得する。 本クラスは、各テーブルのデータベースアクセスクラス(以下のクラス)に対して処理を移譲する。
データの取得処理を提供するデータベースアクセスクラスでは、取得結果をテーブルに対応するエンティティクラスで返却する。 エンティティクラスは以下のとおり。
|
package:: class:: |
ワークフローの進行状態を管理するテーブル のテーブル名やカラム名を保持するクラス。 |
2.1.5.1.2. テーブル定義¶
ワークフロー機能で必要となるテーブルの情報を以下に示す。
テーブル名やカラム名は、プロジェクトの命名規則に従い設定することが想定される このため、これらの情報はコンポーネント定義ファイルを用いて設定可能としている。
コンポーネント定義ファイルの設定例は、コンポーネント定義を参照。
2.1.5.1.2.1. ワークフローの定義情報を格納するテーブル¶
ワークフローの定義情報を格納するテーブルの定義を下記に示す。
ワークフロー定義テーブルの定義
ワークフロー定義情報を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
ワークフロー名 | java.lang.String | |
適用日 | java.lang.String | 8桁(yyyyMMdd)の文字列表記 |
レーンテーブルの定義
ワークフローの レーン を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
レーンID | java.lang.String | PK |
レーン名 | java.lang.String |
フローノードテーブルの定義
フローノード の定義を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
フローノードID | java.lang.String | PK |
フローノード名 | java.lang.String |
タスクテーブルの定義
タスク の定義を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
フローノードID | java.lang.String | PK |
マルチインスタンス種別 | java.lang.String | 以下の値が格納される。
|
完了条件 | java.lang.String |
|
イベントテーブルの定義
イベント(開始イベント 、 停止イベント)の定義を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
フローノードID | java.lang.String | PK |
イベント種別 | java.lant.String | 以下の値が格納される。 |
ゲートウェイテーブル定義
XORゲートウェイ の定義を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
フローノードID | java.lang.String | PK |
ゲートウェイ種別 | java.lant.String | 以下の値が格納される。
|
境界イベントテーブル定義
境界イベント の定義を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
フローノードID | java.lang.String | PK |
境界イベントトリガーID | java.lang.String | |
接続先タスクID | java.lang.String |
境界イベントトリガーテーブル定義
境界イベントトリガーの定義を管理するテーブル。境界イベントトリガーについては、 境界イベント を参照。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
境界イベントトリガーID | java.lang.String | PK |
境界イベントトリガー名 | java.lang.String |
シーケンスフローテーブル定義
シーケンスフロー の定義を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
ワークフローID | java.lang.String | PK |
バージョン | java.lang.Integer (int) | PK |
シーケンスフローID | java.lang.String | PK |
接続元フローノードID | java.lang.String | |
接続先フローノードID | java.lang.String | |
フロー進行条件 | java.lang.String |
|
シーケンスフロー名 | java.lang.String |
2.1.5.1.2.1.1. テーブル定義の例¶
2.1.5.1.2.2. ワークフローの進行状態を管理するテーブル¶
ワークフローの進行状態を管理するテーブルの定義を下記に示す。
ちなみに
ワークフローの進行状態は、ワークフローが終了するまでの状態を管理する。 ワークフローが完了した場合には、本テーブル群のデータはクリーニング(削除)される。
ワークフローインスタンステーブル定義
進行中のワークフローを管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK 進行中のインスタンスIDを識別する情報。 インスタンスIDは、業務側のワークフローデータを保持する テーブルに格納する必要がある。 業務側テーブルに格納することで、ワークフローの進行状態と 業務データを紐付けて管理することができる。 |
ワークフローID | java.lang.String | |
バージョン | java.lang.Integer (int) |
インスタンスフローノードテーブル
進行中のワークフローに含まれるタスクの情報を管理するテーブル。
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK |
フローノードID | java.lang.String | PK |
ワークフローID | java.lang.String | |
バージョン | java.lang.Integer (int) |
タスク担当ユーザテーブル
タスクに割り当てられた担当ユーザを管理するテーブル。 [1]
タスクへの担当ユーザの割り当てについては タスク担当ユーザ/タスク担当グループ を参照。
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK |
フローノードID | java.lang.String | PK |
担当ユーザID | java.lang.String | PK |
実行順 | java.lang.Integer (int) | 順次 マルチインスタンス・タスク の場合に ユーザの処理実行順を管理するために使用する。 非マルチインスタンスタスクや並行 マルチインスタンス・タスク の場合には、 本属性値は使用しない。 |
タスク担当グループテーブル
タスクに割り当てられた担当グループを管理するテーブル。 [1]
タスクへの担当グループの割り当てについては タスク担当ユーザ/タスク担当グループ を参照。
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK |
フローノードID | java.lang.String | PK |
担当グループID | java.lang.String | PK |
実行順 | java.lang.Integer (int) | 順次 マルチインスタンス・タスク の場合に ユーザの処理実行順を管理するために使用する。 非マルチインスタンスタスクや並行 マルチインスタンス・タスク の場合には、 本属性値は使用しない。 |
[1] | (1, 2) 同一フローノードに対しては、ユーザかグループの一方のみの割り当てとなる。 このため、同一フローノードに対して、ユーザとグループの両方のデータが存在することはない。 |
アクティブフローノードテーブル
アクティブフローノード の情報を保持するテーブル
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK |
フローノードID | java.lang.String | PK |
アクティブユーザタスクテーブル
ユーザが実行可能なタスクを管理するテーブル。
ユーザが実行可能なタスク(アクティブユーザタスク)については、 アクティブユーザタスク/アクティブグループタスク を参照。
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK |
フローノードID | java.lang.String | PK |
担当ユーザID | java.lang.String | PK |
実行順 | java.lang.Integer (int) | タスク担当ユーザテーブル を参照 |
アクティブグループタスクテーブル
グループが実行可能なタスクを管理するテーブル。
グループが実行可能なタスク(アクティブグループタスク)については、 アクティブユーザタスク/アクティブグループタスク を参照。
定義 | Javaの型 | 制約など |
---|---|---|
インスタンスID | java.lang.String | PK |
フローノードID | java.lang.String | PK |
担当グループID | java.lang.String | PK |
実行順 | java.lang.Integer (int) | タスク担当グループテーブル を参照 |
2.1.5.1.2.2.1. テーブル定義の例¶
2.1.5.1.3. コンポーネント定義¶
ワークフロー機能では、システムリポジトリ機能するためコンポーネント定義ファイルへの設定が必要となる。 以下にワークフロー機能のコンポーネント定義方法を記述する。
設定するコンポーネント
クラス | 説明 |
---|---|
package:: class:: |
ワークフローの設定情報を保持するクラス。 ちなみに 本クラスは、コンポーネント名を workflowConfig として コンポーネント定義ファイルに登録する必要がある。 |
package:: class:: |
ワークフローの定義情報を保持するクラス。 本クラスには、ワークロー定義をロードするクラスと、 ワークフローの適用日判定に使用するための システム日付(nablarch.core.date.SystemTimeProviderの実装クラス) を設定する。 システムリポジトリ構築時にワークフロー定義情報を、 ローダを使用しロードする。このため、初期化対象コンポーネントに 本クラスを設定する必要がある。 |
package:: class:: |
データベースからワークフロー定義をロードするクラス。 本クラスには、データベースへアクセスするための設定と、 ワークフロー定義関連テーブルの定義情報を設定する。 |
package:: class:: |
ワークフローの定義情報を格納するテーブル のテーブル名と カラム名を設定する。 |
package:: class:: |
ワークフローの進行状態を管理するテーブル へアクセスする クラスを設定する。 本クラスには、インスタンスIDを採番するための採番クラスと ワークフローの進行状態を管理するテーブル の定義情報を 設定する。 システムリポジトリ構築時にデータベースアクセス用の SQL文の組み立てを行う。 このため、初期化対象コンポーネントに本クラスを設定する必要がある |
package:: class:: |
ワークフローの進行状態を管理するテーブル のテーブル名と カラム名を設定する。 |
package:: class:: |
WorkflowInstance を生成するクラス。 |
設定例
<!-- ワークフロー設定クラス このクラスは、「workflowConfig」という名前でコンポーネント定義する。 --> <component name="workflowConfig" class="nablarch.integration.workflow.WorkflowConfig"> <property name="workflowDefinitionHolder" ref="workflowDefinitionHolder" /> <property name="workflowInstanceDao" ref="workflowInstanceDao" /> <property name="workflowInstanceFactory" ref="workflowInstanceFactory" /> </component> <!-- ワークフロー定義保持クラス ワークフロー定義のローダーとシステム日付を取得するための nablarch.core.date.SystemTimeProvider実装クラスを設定する。 --> <component name="workflowDefinitionHolder" class="nablarch.integration.workflow.definition.WorkflowDefinitionHolder"> <property name="workflowDefinitionLoader" ref="workflowLoader" /> <property name="systemTimeProvider"> <component class="nablarch.core.date.BasicSystemTimeProvider" /> </property> </component> <!-- ワークフロー定義のロードクラス --> <component name="workflowLoader" class="nablarch.integration.workflow.definition.loader.DatabaseWorkflowDefinitionLoader"> <!-- データベースへアクセスするための設定(SimpleDbTransactionManager ) データベース接続設定の詳細な設定例は省略する。 --> <property name="transactionManager" ref="tran" /> <property name="workflowDefinitionSchema" ref="workflowDefinitionSchema" /> </component> <!-- ワークフロー定義関連テーブルのテーブル名とカラム名の設定 --> <component name="workflowDefinitionSchema" class="nablarch.integration.workflow.definition.loader.WorkflowDefinitionSchema"> <!-- テーブル名 --> <property name="workflowDefinitionTableName" value="WF_WORKFLOW_DEFINITION" /> <property name="laneTableName" value="WF_LANE" /> <property name="flowNodeTableName" value="WF_FLOW_NODE" /> <property name="eventTableName" value="WF_EVENT" /> <property name="taskTableName" value="WF_TASK" /> <property name="gatewayTableName" value="WF_GATEWAY" /> <property name="boundaryEventTableName" value="WF_BOUNDARY_EVENT" /> <property name="eventTriggerTableName" value="WF_BOUNDARY_EVENT_TRIGGER" /> <property name="sequenceFlowTableName" value="WF_SEQUENCE_FLOW" /> <!-- ワークフロー定義テーブルのカラム名 --> <property name="workflowIdColumnName" value="WORKFLOW_ID" /> <property name="workflowNameColumnName" value="WORKFLOW_NAME" /> <property name="versionColumnName" value="DEF_VERSION" /> <property name="effectiveDateColumnName" value="EFFECTIVE_DATE" /> <!-- レーンテーブルのカラム名 --> <property name="laneIdColumnName" value="LANE_ID" /> <property name="laneNameColumnName" value="LANE_NAME" /> <!-- フローノードテーブルのカラム名 --> <property name="flowNodeIdColumnName" value="FLOW_NODE_ID" /> <property name="flowNodeNameColumnName" value="FLOW_NODE_NAME" /> <!-- イベント、タスク、ゲートウェイテーブルのカラム名 --> <property name="eventTypeColumnName" value="EVENT_TYPE" /> <property name="multiInstanceTypeColumnName" value="MULTI_INSTANCE_TYPE" /> <property name="completionConditionColumnName" value="COMPLETION_CONDITION" /> <property name="gatewayTypeColumnName" value="GATEWAY_TYPE" /> <!-- 境界イベント、境界イベントトリガーテーブルのカラム名 --> <property name="boundaryEventTriggerIdColumnName" value="BOUNDARY_EVENT_TRIGGER_ID" /> <property name="boundaryEventTriggerNameColumnName" value="BOUNDARY_EVENT_TRIGGER_NAME" /> <property name="attachedTaskIdColumnName" value="ATTACHED_TASK_ID" /> <!-- シーケンスフローテーブルのカラム名 --> <property name="sequenceFlowIdColumnName" value="SEQUENCE_FLOW_ID" /> <property name="sequenceFlowNameColumnName" value="SEQUENCE_FLOW_NAME" /> <property name="sourceFlowNodeIdColumnName" value="SOURCE_FLOW_NODE_ID" /> <property name="targetFlowNodeIdColumnName" value="TARGET_FLOW_NODE_ID" /> <property name="flowProceedConditionColumnName" value="FLOW_PROCEED_CONDITION" /> </component> <!-- ワークフローの進行状況を管理するテーブルへのアクセスクラス --> <component name="workflowInstanceDao" class="nablarch.integration.workflow.dao.WorkflowInstanceDao"> <!-- インスタンスIDを生成する採番機能の設定 採番クラス名とあわせて、採番対象IDを設定する。 --> <property name="instanceIdGenerator" ref="instanceIdGenerator" /> <property name="instanceIdGenerateId" value="01" /> <!-- インスタンスIDの桁数を設定する。 設定を省略した場合は、デフォルト値(10桁)となる。 インスタンスIDは指定された桁数で固定長化される。 固定長化は、先頭に"0"を付加することで実現する。 --> <property name="instanceIdLength" value="15" /> <!-- テーブル定義情報の設定 --> <property name="workflowInstanceSchema" ref="workflowInstanceSchema" /> </component> <!-- ワークフローの進行状況を管理するテーブルのカラム名とテーブル名の設定 --> <component name="workflowInstanceSchema" class="nablarch.integration.workflow.dao.WorkflowInstanceSchema"> <!-- テーブル名 --> <property name="instanceTableName" value="WF_INSTANCE" /> <property name="instanceFlowNodeTableName" value="WF_INSTANCE_FLOW_NODE" /> <property name="assignedUserTableName" value="WF_TASK_ASSIGNED_USER" /> <property name="assignedGroupTableName" value="WF_TASK_ASSIGNED_GROUP" /> <property name="activeFlowNodeTableName" value="WF_ACTIVE_FLOW_NODE" /> <property name="activeUserTaskTableName" value="WF_ACTIVE_USER_TASK" /> <property name="activeGroupTaskTableName" value="WF_ACTIVE_GROUP_TASK" /> <!-- ワークフローインスタンステーブルのカラム名 --> <property name="instanceIdColumnName" value="INSTANCE_ID" /> <property name="workflowIdColumnName" value="WORKFLOW_ID" /> <property name="versionColumnName" value="DEF_VERSION" /> <!-- ワークフローインスタンステーブルの関連テーブルのカラム名 --> <property name="flowNodeIdColumnName" value="FLOW_NODE_ID" /> <property name="assignedUserColumnName" value="ASSIGNED_USER_ID" /> <property name="executionOrderColumnName" value="EXECUTION_ORDER" /> <property name="assignedGroupColumnName" value="ASSIGNED_GROUP_ID" /> </component> <!-- インスタンスIDを採番するための採番クラスの設定 --> <component name="instanceIdGenerator" class="please.change.me.common.idgenerator.OracleSequenceIdGenerator"> <!-- 詳細な設定は省略 --> </component> <!-- ワークフローインスタンスファクトリ --> <component name="workflowInstanceFactory" class="nablarch.integration.workflow.BasicWorkflowInstanceFactory" /> <!-- 初期化コンポーネントの設定 --> <component name="initializer" class="nablarch.core.repository.initialization.BasicApplicationInitializer"> <property name="initializeList"> <list> <component-ref name="workflowDefinitionHolder" /> <component-ref name="workflowInstanceDao" /> </list> </property> </component>