コーディングガイドとして,Workflow Server - LibraryでWorkflow業務アプリケーションを作成する上で,分かりにくい点,間違えやすい点などを記述しています。
Workflow Server - Libraryは,ログインしたユーザが,自分のトレーにある案件を操作するインタフェースを公開しています。一般的には,他人のトレーにある案件は操作できません。他人のトレーにある案件を操作する場合,又は特定ビジネスプロセス下の全案件を対象とする操作を行う場合は,Workflow Library - Extensionを使用してください。
例えば,上記の用語を資材発注業務の場合に当てはめると,以下のイメージになります。
用語 | イメージ |
---|---|
ビジネスプロセス | 資材発注業務 |
ノード | 申請,承認 …等の各々の作業 |
ワーク | 発注申請から業者発注までの一連の仕事 |
ワークID | 発注依頼書の依頼書番号や発注番号 |
案件 | 発注依頼書の入れ物 |
ビジネスプロセス定義,ワーク,ノード,案件の関連は,次に示す図のようになります。
承認ノードの処理ユーザのトレーをユーザトレー1,同様に経理部ノードをユーザトレー2,資材部ノードをユーザトレー3とする。
ワークフローの情報は,大きく分けて以下の3種類の情報があります。
種別 | 説明 |
---|---|
オブジェクト情報 | ワークフローが保持する情報。 それぞれのオブジェクトIDを基に取得。(BP,ワーク,ケース,ユーザ,ロールの種別があります。) |
ディレクトリ情報 | Groupmax Addressで管理している組織・ユーザの情報。 |
ユーザ情報 | 文書・メモやユーザ属性など,ユーザが任意に設定する情報。 |
Groupmax Workflowの制御用の情報はオブジェクトとして,データベース(Object Server)に保持しています。OIDとはデータベース内の情報を特定するユニークなIDのことです。Workflow Server - Libraryで何か作業を行う場合,半数以上の関数がこのOIDによってオブジェクトを特定します。例えば,自トレー内の案件を処理する場合,まずその案件を特定する情報として案件のオブジェクトIDを取得します。次にその案件のオブジェクトIDを使用して案件処理開始関数などを発行します。
「文書」と「メモ」の違いについて説明します。どちらも任意のファイルを格納できますが,次に示す違いがあります。
種別 | 説明 |
---|---|
メモ | Integrated Desktop案件エディタで表示しません。(メモタイプがSの本文メモを除く。) またデータオブジェクト(データメモ)として,ファイルをデータベース(Object Server)に,1個だけ格納できます。 |
文書 | Integrated Desktop案件エディタの添付文書として表示されます。 |
なお,文書・メモともに1案件あたりの上限は設定していませんが,多いほどサーバで管理する情報も増えます。不必要に多くならないようにすることを推奨します。特に統合ノードを使用する場合,統合元の全案件の添付文書・メモが統合先の案件に集められますので注意してください。
文書・メモファイルのサイズには特に制限はありませんが,回線性能にあわせて考慮してください。(注意:データメモは32KBまでの制限があります。)
「案件ユーザ属性」とは,Workflow Definerでビジネスプロセス定義を作成する際に,ケース定義に追加することのできる,文字型,整数型,日時型の属性のことです。Workflow Definerではケース属性,Workflow Server - Libraryではユーザ属性と呼んでいます。
下図にWorkflow Definerの定義画面の例を示します。
それぞれの設定可能な範囲を以下に示します。
ケース属性種別 | 範囲 |
---|---|
文字型 | 31バイトまで |
整数型 | 数字だけで-2,147,483,647~2,147,483,647の範囲 |
日時型 | 1970年1月1日10:00:00~2038年1月19日03:14:07 |
あるノードでユーザ属性を参照・更新する場合,Workflow Definerでビジネスプロセス定義を作成するときに,当該ノードの「ユーザ処理リスト」に,ユーザ属性への作業を定義しておく必要があります。
例えば,アプリケーションがAというノードで,Bという属性値を取得するのであれば,Aノードの「ユーザ処理リスト」で,「属性値の参照」を定義しておく必要があります。なお同一ノードにおいて更新も行う場合は,「属性値の直接更新,属性値の選択更新」など更新だけ定義しておくことで参照も可能になります。
案件情報を一覧で取得する関数(HwfGetCaseSelectData,HwfSubstitutionGetCaseなど)では文字型,整数型,日時型の各型の属性に対して5個まで取得できます。これはWorkflow Definerで定義した属性のそれぞれの型で上から5個に相当します。5個以上定義した場合は,HwfGetAttributeValueByUserDefNameExなどユーザトレー内案件属性操作関数を使用して取得してください。
ユーザトレーに直接追加されている案件は単体案件又は上位案件です。このため案件一覧取得関数(HwfGetCaseSelectDataなど)で簡単に取得できるのは単体案件又は上位案件の情報です。下位案件も含めて一括して取得するとパラメタが複雑になります。
案件処理用の関数(HwfPrefixCase,HwfSuffixCase,HwfGetCaseDocument,HwfUpdateCaseDocumentなど)では案件のオブジェクトIDとして単体案件又は上位案件のオブジェクトIDを指定します。また実際にユーザ属性や文書・メモの参照・設定するために単体案件又は下位案件のケース名称やオブジェクトIDを指定します。
案件のユーザ属性操作用の関数(WFocGetAttrValueByUserDefName,HwfSetCaseByUserDefNameなど)では,属性を設定する単体案件又は下位案件のオブジェクトIDを直接指定します。
下位案件を意識したコーディングは難易度が高くなるため,上記に注意してアプリケーションを作成してください。
案件の処理状態の遷移を下図に示します。
図L-1 代表的なトレー内操作
アプリケーションを作成する際どこまでの汎用性を持たせるかによって,作成の難易度が変わってきます。
たとえば,Integrated Desktopのような全ての業務を処理する汎用的なアプリケーションを作成するとなると,複雑になり難易度が上がります。しかし業務(ビジネスプロセス)を特定し,作業内容を固定できれば,コーディングは単純になります。
Workflow Server - Libraryを初めて使用される場合は,業務(ビジネスプロセス)を固定にすることをお勧めします。Workflow Server - Libraryの関数は推奨関数だけでも60個以上ありますが,これらは前記の複雑な処理を実現するために用意されており,業務内容が決まっていれば10個程度の関数で実現可能です。
図L-2 案件投入の例
Workflow Server - Libraryを使ったアプリケーションの構築例を以下に示します。
ワークはWorkflow Monitorなどで削除したり,終了済みワークをワーク削除ユーティリティで一括して削除したりします。ユーザヒストリは保存する件数(デフォルトは50)を定義し,これを超えた場合,古いものから順に削除します。このためユーザヒストリ自体が消去されていたり,ユーザヒストリが残っていてもワーク実体が削除され,ワークヒストリなどが参照できなくなることがあります。送信ログ型のアプリケーションを作成する場合には上記を考慮してください。
ユーザヒストリはWorkflow Monitorなどから最大1,023まで増やすことが可能ですが,サーバのメモリを圧迫するため推奨できません。ユーザヒストリが削除されても,ワークID等の情報をアプリケーションや外部データベースに保存しておけば,ワークが残っている限りワークヒストリなどの情報を参照することが可能です。HwfGetWorkStatus,HwfGetWorkHistoryDirectなどの関数を参照してください。
案件のトレー種別,階層種別,状態コード,優先度,処理種別,同報状態コードなど,オブジェクト属性値にはいくつかの候補値からいずれかの値が返却される場合があります。これらのオブジェクト属性は,将来のバージョンで新しい機能をサポートした場合,新しい候補値が追加される可能性があります。
アプリケーションをWorkflowのバージョンに依存しない構造とするには,これらの拡張性を考慮し,新しい候補値が返却されることを前提として設計するように推奨します。
Workflow Definerのユーザ処理リストでは案件作業用の各種の情報を定義します。これらにはWorkflow Serverが処理するもの,Integrated Desktopを使用した場合はIntegrated Desktopが処理するもの,アプリケーションが処理する必要があるものがあります。
項番 | Definer定義 | Library 種別コード | 対応する処理の実行者 |
---|---|---|---|
1 | 属性値の直接入力 | 案件のユーザ属性に任意値設定("03") | Integrated Desktop案件エディタでユーザ属性の参照・設定を行います。 アプリケーションでユーザ属性操作を行う場合はこれらのユーザ処理リストが必要であり,ユーザトレー内案件属性操作関数(HwfSetCaseByUserDefNameなど)で処理する必要があります。 |
2 | 属性値の選択更新 | 案件のユーザ属性に候補値設定("04") | Integrated Desktop案件エディタでユーザ属性の参照・設定を行います。 アプリケーションでユーザ属性操作を行う場合はこれらのユーザ処理リストが必要であり,ユーザトレー内案件属性操作関数(HwfSetCaseByUserDefNameなど)で処理する必要があります。 |
3 | 属性値の参照 | 案件の属性値を一覧表示時に出力("09") | Integrated Desktop案件エディタでユーザ属性の参照・設定を行います。 アプリケーションでユーザ属性操作を行う場合はこれらのユーザ処理リストが必要であり,ユーザトレー内案件属性操作関数(HwfSetCaseByUserDefNameなど)で処理する必要があります。 |
4 | 予約値の自動設定 | (Libraryでは取得しません。) | Workflow Serverが処理します。 |
5 | 文書の登録 | 案件に文書を追加格納("02") | Integrated Desktopは処理しません。アプリケーション用の補助情報です。 |
6 | 複写先選択 | 案件の複写先を指定("13") | Integrated Desktop案件エディタで複写先選択が可能になります。 アプリケーションの場合は,HwfCreateCopyInfEx関数で複写先情報を作成し,案件属性操作関数で設定する必要があります。 |
7 | 作業者の指定 | 案件の作業者を指定("14") | Integrated Desktop案件エディタで作業者指定が可能になります。 アプリケーションの場合は,WFocSelectNextUser関数などで設定する必要があります。 |
8 | 作業者の自動指定 | (Libraryでは取得しません。) | Workflow Serverが処理します。 |
9 | 配布先ロールの指定 | 配布キーを指定("15") | Integrated Desktop案件エディタで指定可能です。 アプリケーションの場合は,HwfGetDeliverKey関数及び案件属性操作関数で設定する必要があります。 |
10 | 任意データの参照 | 任意データを参照("10") | Integrated Desktopでは処理しません。 アプリケーション用の補助情報です。 |
11 | AP起動 | アプリケーションプログラムを起動("11") | Integrated DesktopのINBOX,帳票棚を使用する場合はIntegrated Desktopがダウンロード,起動を行います。 INBOX,帳票棚をアプリケーションで作成する場合,HwfDownLoadFileEx関数などを使用して登録ファイルを取得し,起動処理・終了確認処理など作成する必要があります。アプリケーション・フォームをサーバに登録しない場合,このユーザ処理リストは使用しません。 |
12 | Groupmaxフォーム表示 | アプリケーションプログラムを起動("11") | Integrated DesktopのINBOX,帳票棚を使用する場合はIntegrated Desktopがダウンロード,起動を行います。 INBOX,帳票棚をアプリケーションで作成する場合,HwfDownLoadFileEx関数などを使用して登録ファイルを取得し,起動処理・終了確認処理など作成する必要があります。アプリケーション・フォームをサーバに登録しない場合,このユーザ処理リストは使用しません。 |
13 | 案件の文書DB格納 | 案件情報をGroupmax Document Managerへ格納("12") | Integrated Desktop案件エディタでは自動的に処理します。 アプリケーションの場合はDocument Manager SDKを使用して,Document Managerへ文書を格納するアプリケーションを作成する必要があります。 |
14 | 作業状態の選択更新 | 案件の任意ユーザ状態コードへ候補値設定("08") | Integrated Desktop案件エディタ用の情報です。 |
15 | (ソースノードで「ワークIDを新規に設定する」をチェックした場合,自動的に生成) | 案件の生成,投入("01") | 案件投入処理を行います。HwfPutCase関数などの「投入モード」パラメタの指定値に影響します。 |
16 | (ソースノードで「ワークIDを新規に設定しない」をチェックした場合,自動的に生成) | サブノードからの案件投入("05") | Integrated Desktop案件エディタでは自動的に処理します。 |
Workflow Server - Libraryでは多くのお客様の要望にお答えするために,アプリケーション開発の自由度と機能拡充のための数多くの関数をサポートしています。
アプリケーションを開発される場合は,以下に示す注意事項を参考にし,性能を十分考慮したアプリケーションの構築をお願いいたします。
転送データは大きいほど性能は悪くなります。特に回線性能が低い場合重要なポイントとなります。
例えば以下の注意点があります。
関数発行回数はできる限り減らすようにお願いします。Workflow Server - Libraryの関数の多くはワークフローサーバと通信を行っています。たとえば,1関数0.2秒で処理されるとしても,100回発行すれば20秒かかります。
Workflow Server - Libraryの関数で取得する情報の絞り込み方によって,サーバ側で処理対象が膨大になることで性能が悪くなることもあります。例えば以下の注意点があります。
Workflow ServerはHigh - end Object Serverと組み合わせることによって,障害発生時に,ジャーナルから障害発生時まで回復させることができます。この場合のアプリケーション開発に関する注意事項を示します。
(ジャーナル回復に関する注意事項一般はシステム管理者ガイドを参照してください。)
文書・メモはジャーナル回復されません。(データオブジェクトを除く) このため,ジャーナル回復を期待する場合は文書・メモを使用しないことが推奨です。しかし文書・メモを使用したいと言う場合,ディスクをミラー化するなどの方法で文書・メモの信頼性を上げる方法もあります。また,削除されても業務そのものには実害が無いコメント情報として添付する場合も考えられます。
後者の場合アプリケーションでの考慮が必要になります。この場合文書・メモ取得関数(HwfGetCaseDocumentなど)がエラーリターンしても処理が続行できるようにアプリケーションを構築しておく必要があります。