そこで「キャンセルケース」パターンを適用すると、図13のようになります。まず「商品を出荷する」と「商品を梱包する」の2つのタスクをまとめて「出荷準備を行う」というサブプロセスにしました。
そして、顧客からの注文のキャンセルイベントは、そのサブタスクが受け、例外フローへと流しています。
「キャンセルケース(Cancel Case)」パターンを使ったことで、注文のキャンセルが可能な範囲を明確化でき、そのうえで注文のキャンセルという処理が、非正常系であることがはっきりするようになりました。また、非正常系のフローを抜き出したことで、正常系の業務の流れもシンプルに表現している図になりました。
先にも書きましたが、この例のように、あるビジネスプロセスを表現する際に何通りかの書き方があった場合、その中で一番シンプルなものを使って表現するべきです。
業務フローを簡潔で的確な表現に保つことによって、いざ業務の改善を図る際に大きな差となって表れます。ワークフローパターンをヒントに、適切なフローを書けるように努めましょう。
では、上記の例で登場した遅延選択パターンとキャンセルケースパターンを解説します。
イベントを基に排他選択を行い、パスを分岐します。イベントを受信すると、そのイベントに応じたパスにトークンが流れます。トークンが流れると、そのほかのパスは、イベントを受け付けなくなります。
別名:外部選択(external choice)、暗黙的選択(implicit choice)、遅延排他選択(deferred XOR-split)
ビジネスプロセス図
BPMNでは、イベント準拠のゲートウェイと各種の中間イベントを使って遅延選択パターンを表現します。
図14では、タスクAが実行された後、イベント準拠の排他ゲートウェイによってパスが分かれます。イベント1を受信するとBに、イベント2を受信するとCにトークンが流れます。BまたはCのいずれかのパスに流れると、残るパスがイベントを受信することはなくなります。例えば、イベント1を受信してBにトークンが流れた後は、イベント2は受信されることはありません。排他ゲートウェイからは任意の数のパスに分けることができます。
実例:
図書館の貸し出し予約システムを例に取ります。
この図書館では、現在貸し出し中の図書について予約をすることができます。
利用者が借りたい本が貸し出し中なのを確認すると、システムに図書の予約を依頼します。システムは図書の返却があると予約した利用者に、図書が貸し出し可能になったことを連絡します。その連絡から1週間以内に利用者が図書を受け取りに来たら貸し出しが行われますが、1週間経過しても受け取りに来なかった場合は、受取期限が切れたことを利用者に連絡して、フローを終了します。
利用者の図書の受け取りと1週間経過のタイマーは、どちらもイベントとして扱っています。どちらかのイベントが発生すると、他方のイベントを受信することはなくなります。
注意点:
排他ゲートウェイによってパスが複数に別れていますが、トークンは1つしか流れません。並列にパスを分けたい場合にはこのパターンは使えません。なんらかのイベントが来ないとトークンは流れません。
一定期間イベントが来なかったときにタイムアウトの処理を行うことも検討してください。この場合、イベントの1つにタイマーを使います。
関連するパターン:
・単純マージ(Simple Merge)
イベント準拠の排他ゲートウェイによって別れたパスを合流させる場合も、通常の排他ゲートウェイと同様、単純マージパターンを使います。
・マイルストーン(Milestone)
マイルストーンパターンは、遅延選択パターンと任意のループ構造(Arbitrary Cycles)パターンを組み合わせて用いることでも表現できます。
Copyright © ITmedia, Inc. All Rights Reserved.