ドキュメント

多くのビジネス プロセスがドキュメントの提出、あるいは既存ドキメントの提示を要求します。たとえば:

  • 出張旅費を申告するプロセスでは、領収書、クレジットカード会社の請求明細や外貨交換レートの明細などのイメージコピーを含みます。
  • 人事が職務やポジションを検討するプロセスでは、履歴書や職務経歴書を含みます。
  • ドキュメントの外部公開を承認するプロセスでは、ドキュメントそれ自体と品質チェックリストを含みます。

ドキュメントは、補足情報を提供するためにプロセスに添付することもできます。たとえば、出張旅費精算の申告プロセスは会社の経費精算要領を詳述したドキュメントが添付されているでしょう。利用者は必要に応じて、それをダウンロードするオプションを持ちます。

ドキュメントの定義
ドキュメントの格納
プロセス定義内でのドキュメントの定義
ドキュメントとコールされるプロセス
プロセスのフォーム内でのドキュメントの定義
コネクタとドキュメント

ドキュメントの定義

ドキュメントは、それ自体がコンテナを使って構造化された一連の情報となり、プロセス インスタンスに添付されます。それは、プロセスの外部のツールによって作成、更新されます。それは、プロセス インスタンスが作成される前から始まり、そのプロセス インスタンスが完了しアーカイブとして記録保管されるまでの一連のライフサイクルを持つことができます。

  • 作成: ドキュメントのライフサイクルはプロセス インスタンスが作成される前に始まります。ドキュメントは外部システムで作成されます。
  • プロセス インスタンスへの追加: プロセス インスタンスが作成されたとき、そのプロセスに定義されたドキュメントのインスタンスがドキュメント オブジェクトを定義したフォーム内で初期化されます。この時点では、ドキュメントは、ドキュメント定義(コンテンツは無いかもしれません)に指定されたコンテンツを持ちます。
  • プロセス インスタンスでの更新: プロセス インスタンス内のドキュメントは、プロセス定義内の自動アクション、あるいはフォーム内でユーザーが指定した次の情報で更新されます。ドキュメントの更新は新しいオブジェクトを作成します。
  • プロセス インスタンスからの削除: ドキュメントオブジェクトはアクティブなプロセスインスタンスから削除できますが、アーカイブされたプロセス(つまり、プロセスの処理が完了した)インスタンスからは削除されません。

プロセス インスタンス内のドキュメントは Java オブジェクトです。したがって、プロセス インスタンス内のドキュメントを更新する際は、新規オブジェクトを作成します。ドキュメントは次に情報を持ちます:

  • 名前: ドキュメントの名前、プロセス定義内で定義される
  • 説明: ドキュメントの説明、プロセス定義内で定義される(オプジョン)
  • コンテンツ: ドキュメントのコンテンツ、ファイルまたはURLで設定します。初期コンテンツのソースはプロセス定義内で定義されます。プロセス インスタンスが作成されるとき、このコンテンツを初期化する必要はありません。このコンテンツは、プロセスのタスクでシステムまたは利用者のアクション結果によって初期化または更新できます。
  • MIME タイプ: ドキュメントのコンテンツのタイプ。これはプロセス定義内の初期コンテンツに対して定義します。ブラウザ(またはあなたのコンピュータ)は、このドキュメントのコンテンツの表示に最適なアプリケーションを選定するために、このMIME タイプを使用します。この MIME タイプを指定していない場合、ブラウザは MIME タイプを探すために、ファイルの最初の部分を読み込みます。
  • 送信者: コンテツをアップロードしたユーザーの名前
  • 作成日: そのコンテンツがアップロードされたときの日付

ドキュメントリスト

ドキュメントリストは、プロセスに添付される関連ドキュメントのコレクションです。そのリスト内の各コンポーネントは、それ自体、ドキュメント オブジェクトですが、それぞれを別々に定義する必要はありません。そのリスト内のコンポーネントの数は固定化する必要はありません。たとえば、出張旅費を申告するプロセスは、複数の領収書のイメージコピーからなるドキュメントリストを含みます。プロセス インスタンスが作成されるとき、領収書の枚数やどんなイメージフォーマットのドキュメントが添付されるかも不明です。

プロセス定義内では、「複数ドキュメント」、または「ドキメントリスト」を指定できます。一連のセットとして、あるいは個別に取り扱う必要があるいくつかのドキュメントを持つ場合は、「ドキュメントリスト」を使用します。独立したライフライクルを持つドキュメントを持つ場合は、「複数ドキュメント」を使用します。たとえば、出張旅費を申告するプロセスは、複数領収書の「ドキュメントリスト」と1つの会社経費精算要領のドキュメントを持つことになります。

ドキュメントリストを初期化するには、DocumentValue のリストオブジェクトを返すスクリプトを使用します。例えば:

import org.bonitasoft.engine.bpm.document.DocumentValue

[
new DocumentValue(“http://url.to.my.cms.document”), //外部
new DocumentValue(“exampleContentType”.getBytes(), “text/plain”, “example.txt”) //内部
]

ドキュメントリストを更新するには、スクリプト使用してリスト全体を再設定する必要があります。そのリスト内の1つのコンポーネントを単に追加したり、置き換えることはできません。

ドキュメントの格納

ドキュメントの格納場所についてどうするか意思決定することは、プロセスの定義のうえで重要な課題です。この課題には、3つに選択肢があります:

document_lifecycle

下表は、各ストレージ オプションとプロセスの間で可能な相互作用を示します。

ストレージ オプション ストレージからプロセス インスタンスを更新する プロセス インスタンスからストレージを更新する
CMS URL (プロセス定義内、またはフォーム ウィジェット内)、
コネクタ(プロセス定義内)
コネクタ(プロセス定義内)
ファイル URL (プロセス定義内、またはフォーム ウィジェット内)、
ファイル(プロセス定義内、またはフォーム ウィジェット内)
ファイル(フォーム ウィジェット内)
リソース リソース名 (プロセス定義内) プロセス インスタンスからリソースを更新できません

 

最も良く使われる事例は、CMSへのドキュメント格納法です。Bonitaでは、これを推奨しています。

CMS (コンテンツ マネージメント システム)

一般的に、ビジネス ドキュメントは CMS などの外部システムに格納され、Bonita BPM のみならず、他のアプリケーションからもアクセスされます。Bonita BPM 自体は CMS を持ちません。外部システムにドキュメントを格納し、プロセス インスタンスには、リンクだけを格納する方がパフォーマンスがより効率的になります。プロセス インスタンスに添付されるドキュメントが多数ある場合は、特にこれが当てはまります。

プロセス インスタンス内のドキュメント オブジェクトをドキュメントを識別する URL を指定することによって初期化できます。ドキュメントオブジェクトは URL の参照だけを格納し、そのコンテンツは格納しません。ユーザーがフォーム内、あるいはコネクタを使用して URL を指定したとき、ドキュメントはプロセス インスタンス内で更新されます。コネクタを使用して CMS への更新をプッシュすることもできます。

ドキュメントが CMS に格納されている場合は、プロセス設計時に CMS  内のコンテンツのライフサイクルを検討する必要があります。たとえば、コンテンツは、プロセス インスタンス内のドキュメント オブジェクトを初期化後、別のあるアプリケーションで更新される可能性があります。したがって、CMS 内の参照されるコンテンツは、必ず関連するバージョンにする必要があります。プロセスがコンテンツの最新バージョンを要求する場合、CMS からコンテンツを取得する時間を最小にして、プロセス インスタンス内でそれを利用可能にしなくてはなりません。さらに、プロセスがドキュメントを更新し CMS に新しいコンテンツを送る場合、CMS に対し複数の同時並行更新(コンカレント・アップデート)を取り扱うかどうか検討する必要があります。これは CMS 自体によって自動で取り扱われるので、コネクタによって管理する必要があるでしょう。

たとえば、ドキュメントの公開承認プロセスでは、そのドキュメントはプロセスのインスタンスが生成される前に外部のファイルシステムや CMS 内に存在します。プロセス内のあるステップでそのドキュメントの外部公開が承認され、そのファイルの「部外秘」の電子透かしを削除した新しい改訂版作成されます。この新規改訂版は、コネクタによってアップロードされ、プロセス インスタンスが完了またはアーカイブされた後も引き続き存在します。

ファイル

ファイルとして格納されたドキュメントは、プロセス インスタンス内のドキュメント オブジェクトを初期化または更新に使用できます。これは、ユーザーがフォームにファイルを指定する場合に行われます。一般的にこの方法は、情報をプロセス外部(ドキュメント オブジェクトが作成された後でそのファイルを削除可能)に格納する必要が無い場合に有益です。たとえば、出張旅費の領収書のイメージコピーを含むファイルは、出張旅費申告のプロセス インスタンスに領収書が追加された後、保持する必要がありません。

リソース

Bonita BPM Studio のドキュメント リポジトリは、ファイルシステムからインポートしたドキュメントを含みます。ドキュメントがインポートされた後、それは「リソース」と呼ばれます。デプロイ用のプロセス bar ファイルをビルドしたとき、プロセス内で使用させるそのドキュメントのリソースは自動的にその bar ファイルに組み込まれます。リソースは、インストールした Studio 内のすべてのプロセスから使用可能です。リソースは Studio 内ではダイレクトに更新できませんが、新しいファイルをアップロードすることによって更新できます。一般的に、リソースは、変更が起こらない、プロセスのすべてのインスタンスに共通する、あるいはいくつかのプロセスで使用される情報に使用されます。リソースはプロセス インスタンス内のドキュメント オブジェクトを初期化するために使用されます。ドキュメント オブジェクトを更新するために、リソースを使用することはできません。

プロセスを bos ファイルでエクスポートし別の Studio にインポートする場合は、使用されるリソースを選択し、それらを組み込む必要があります。

ドキュメント リポジトリにリソースを追加するダイアログは、プロセス定義にリソースを追加するダイアログの内部にあります。ただし、次の手順でプロセス定義を変更することなくリソースを追加できます。

  1. 任意のプロセス図を開き、プールを選択します。このプロセス定義は更新されません。
  2. [詳細] パネル-> [データ] タブ-> [ドキュメント] ペインに進みます。
  3. 任意のドキュメントを選択し、[ローカル ファイルから] をチェックします。そのプロセスにドキュメントがされていない場合は、[追加] をクリックしてドキュメントの名前を指定します。
  4. [参照…] をクリックするとポップアップがリポジトリ内のリソースリストを表示します。
  5. [インポート…] をクリックするとファイル選択のポップアップが表示されます。
  6. インポートしたいファイルを選択します。ファイル名がリソースリストに追加されます。
  7. [キャンセル] をクリックしてリポジトリ内のリソースリストを閉じます。
  8. [キャンセル] をクリックしてドキュメントのエディタを閉じます。プロセス図とドキュメントの定義は更新されません。

プロセスをデプロイするとき、そのbar ファイルに含まれたドキュメントは、ローカルのBonita BPM データベースに格納されます。それらは、プロセスのインスタンス生成時、またはフォームの初期化時点で、ドキュメント オブジェクトの初期化のために使用されます。

最大ドキュメント サイズの設定

ドキュメントの最大サイズは、デフォルトでは 20MB です。この値は、運用環境のテナント設定内の forms-config.properties ファイル内の form.attachment.max.size プロパティの値を変更することによって増減できます。最大のドキュメントサイズはデータベース カラムの最大長を超えることはできません。したがって、この値の最大長はあたが使用するデータベースに依存します。この設定はテナント内のすべてのプロセスに適用されます。

プロセス インスタンス内でのドキュメントのバージョニング

プロセスインスタンス内には特定のバージョニングはありません。ドキュメントが更新されたとき、新しいオブジェクトが作成されます。これらのオブジェクトは関連するアクティビティのインスタンスでアーカイブされ、Bonita BPM Engine API を使用し読みだすことができます。

ドキュメントのアーカイビング

プロセスの要素がアーカイブされたとき、関連するドキュメントもアーカイブされます。アーカイブされたドキュメントは、もはや必要とされない場合はスペースの節約のため、 Engine API または REST API を使用して削除可能です。アーカイブされたドキュメントを現在進行中のプロセス インスタンス、またはアーカイブ済みのプロセス インスタンスから削除できます。アーカイブ済みのドキュメントを削除する場合、そのコンテンツだけが削除されます。名前、最新更新日、アップロードした人などのメタデータは維持されるので、監査が求められた場合は、それらを読みだすことができます。

プロセス定義内でのドキュメントの定義

このセクションでは、プロセス定義内でのドキュメント、あるいはドキュメントリストの指定方法を説明します。

ドキュメントの追加

ドキュメントはプロセス定義のプール レベルに追加されます。プール レベルのプロセス変数の定義と同様です。そのプロセスで使用されるすべてのドキュメントはプール レベルで定義する必要があります。

Bonita BPM Studio 内でドキュメントを定義するには:

  1. プロセス図内のプールを選択します。
  2. [詳細] パネル-> [データ] タブ-> [ドキュメント] ペインに進みます。
  3. [追加] をクリックするとドキュメントを定義するポップアップが表示されます。
  4. そのポップアップで次の項目を指定します:
    • ドキュメントの名前、Studio 内での識別に使用される。これは正しい Java 識別子でなければなりません。
    • ドキュメントの説明。これはオプションですが、共同開発やメンテナンスのため、プロセスでのドキュメント使用目的について説明を加えることを推奨します。
    • ドキュメントが「単一」か「複数」かどうか。ドキュメントリストを定義するためには、「複数」を指定します。
    • ドキュメントの初期コンテンツのソース。ドキュメントに対して次のオプションがあります:
      • プロセス インスタンスが作成されたとき、そのドキュメントの初期コンテンツがない場合、「なし」を選択します。
      • ドキュメントのコンテンツを入力コントラクトから取得する場合、「コントラクトから」を選択します。
      • ドキュメントのコンテンツをリソースから取得する場合、「ローカル ファイルから」を選択します。
      • ドキュメントのコンテンツを外部システムから URL で取得する場合、「外部システムから」を選択します。

      ドキュメントリストには、スクリプトを使用して初期コンテンツが定義されます。そのスクリプトは java.util.List.を返す必要があります。

    • オプションとして、ローカル ファイルには、ドキュメントのMIME タイプを設定することによってコンテンツの種類を指定できます。MIME のタイプを指定したい場合は、[オプション: MIME の種類を指定する…] をクリックして、表示されるフィールドのMIME のタイプを指定します。
  5. そのドキュメントに対するすべての情報設定が完了したら、さらに別のドキュメントを追加する場合は [引き続き追加]、このプールに定義するドキュメントが他にない場合は [完了] をクリックします。

プロセス定義内でのドキュメントの編集

  1. プロセス図内のプールを選択します。
  2. [詳細] パネル-> [データ] タブ-> [ドキュメント] ペインに進みます。プールに定義されたドキュメントのリストが表示されます。
  3. 編集したいドキュメントの名前をクリックし [編集] をクリックします。
  4. ポップアップ内のドキュメント情報を更新します。
  5. [OK] をクリックし変更を保存します。

プロセス定義からのドキュメントの削除

  1. プロセス図内のプールを選択します。
  2. [詳細] パネル-> [データ] タブ-> [ドキュメント] ペインに進みます。プールに定義されたドキュメントのリストが表示されます。
  3. 削除したいドキュメントの名前をクリックし [削除] をクリックします。

ドキュメントとコールされるプロセス

ドキュメントはプールに定義されます。変数をマップするときと同様の方法で、ドキュメントを別のプールにマップすることができます。

コールアクティビティを使用する場合、ドキュメントをマップするには:

    1. メインプロセス内にドキュメントを定義します。たとえば、”mainDoc”。
    2. コールされるプロセス内にドキュメントを定義します。たとえば、”subDoc”。
    3. メインプロセス内のコールアクティビティに mainDoc のインスタンスの Id を含む long 型のタスク変数(たとえば、”docId” )を追加します。次のコードを使って docId のデフォルト値をセットします:
apiAccessor.getProcessAPI().getLastDocument(processInstanceId, “mainDoc”).getId();
    1. コールされるプロセス内にプールレベルの long 型の変数(たとえば、docId )を追加します。
    2. コールアクティビティ内にマッピングする変数を定義します。そうすることで、コールアクティビティ内の docId がコールされるプロセス内の docId にマップされます。
    3. コールされるプロセス内の mainDoc を取得するサービスタスクを最初のタスクとして追加し、mainDoc のコンテンツを持つ DoumentValue オブジェクトを作成し、それを使用して subDoc のコンテンツを更新します。そうするには、サービスタスク内のデータ操作を次のように定義します:
      1. 最初のフォールド(左オペランド)で subDoc を選択します。
      2. 中央の演算子を「ドキュメントを設定」にセットします。
      3. 2番目のフィールド(右オペランド)で式エディタを開き、次のコンテンツでスクリプト式を作成します:
import org.bonitasoft.engine.bpm.document.Document;
import org.bonitasoft.engine.bpm.document.DocumentValue;Document doc=apiAccessor.getProcessAPI().getDocument(sub_docId);
DocumentValue docValue=new DocumentValue(apiAccessor.getProcessAPI().getDocumentContent(doc.getContentStorageId()), doc.getContentMimeType(), doc.getContentFileName());
return docValue;

 

プロセス フォーム内でのドキュメントの指定

プロセス定義内のドキュメントを使用した後、プロセスのタスクでそれらを取り扱う方法を定義する必要があります。

ドキュメントは、フォーム定義内ではファイルアップロード ウィジェットによって表現します。

コネクタとドキュメント

プロセス インスタンスが活動中の間、コネクタを使用してドキュメントを操作します。そのためには、コンテンツ マネジメント システム(Alfrecso や CMIS コネクタなど)とやりとりするコネクタを追加します。そのほかのコネクタでもドキュメントを操作することができます。たとえば:

  • メッセージを送信するために、eメール コネクタを使用するタスクでは、そのメッセージにドキュメントを添付できます。
  • カレンダーの予定を作成するために、Google カレンダーを使用するタスクでは、その予定コンテンツとしてドキュメントを添付することができます。

コネクタは単一のドキュメントを取り扱うことに注意してください。もし、プロセスがドキュメントリストを含む場合は、コネクタを使用してリスト内のコンポーネント ドキュメントを操作できます。

Bonita BPM で提供されている標準のコネクタ (CMIS, Alfresco, Jasper) は、ドキュメントを入力として扱います。ドキュメントリストを取り扱うことはできません。eメール コネクタは、メッセージに追加する添付をドキュメントリストで取り扱うことができます。標準のコネクタは、documentValue を出力として提供しません。つまり、ドキュメントを取得するためには、コネクタは使用できないことになります。その代わり、初期化に使用したい場合はそのドキュメントの URL を指定します。