こんにちは、RPAコンサルタントの鈴木です。今回はNEアセット(双日テックイノベーション標準BPアセット)に関する記事の第五回として、「プロセステンプレート」説明の続きを書いていきます。
>>NEアセットって何?という方はこちら:「双日テックイノベーション標準BPアセットの使い方(1) - 概要編」
>>プロセステンプレートの概要を説明した前回記事はこちら:双日テックイノベーション標準BPアセットの使い方(4) – プロセステンプレート編①
NEアセットのダウンロードはこちら(外部サイトにジャンプ)
今回の内容
今回の記事ではNEアセットが提供するプロセステンプレートのサブページのうち、前回記事で説明したスタートアップ系統の処理にあたる「初期化」「実行モード判定」「スタートアップ」の3ページの内容を見ていきます。
※プロセステンプレート編①で説明した通り、実際に開発で使うプロセステンプレートはNEアセット同梱のものではなく、それを会社ごとにカスタマイズしたものになります。このシリーズでは便宜的にNEアセットそのままの状態で使った場合の説明をしています。
「初期化」ページ
「初期化」ページは、グローバル変数の置き場所兼、各種グローバル変数に初期値を設定することを目的としたページです。弊社の開発標準では、レビューのしやすさや保守性を考慮して、グローバル変数はプロセス内で1か所(=このページ)にまとめることを定めています。BP標準でもオブジェクトには最初から「初期化」ページがあり、必ずオブジェクト実行の最初に呼び出されますがプロセスにも同じような役割のページを作ったものと考えれば大丈夫です。
上記「グローバル変数の初期値設定」処理のうち最も重要なのが「業務設定」コレクションの初期化になります。NEアセットでは、後で変更するリスクの高いデータアイテムの値をプロセスに直接書き込まず、外部のExcel設定ファイルから読み込む※ことを推奨しています。標準で想定されている設定ファイルは、以下のようなシンプルな項目名&値の一覧形式です。※もちろん、個別業務ではなく実行環境起因で変化するデータには、環境変数を使います
こうしてExcelに値を書くことにすれば簡単に変更できますが、こういったExcelファイルから、必要になるたびにわざわざデータを読み込むのは大変です。プロセスの最初に全体をコレクションに読み込んでおき、そこからデータを使うのがよいでしょう。プロセステンプレートには、「業務設定の読込」アクションが予め配置してあり、設定ファイルのパスを指定すると自動的に「業務設定」コレクションに読み込んでくれます。読み込まれたコレクションは項目名がフィールド名、1行目に設定値が格納された状態になりますので、[業務設定.実行モード]や[業務設定.カレンダー]といった記法で簡単に値を利用できます。
またほとんどのプロセスでは、こういった1項目1設定値の設定とは別に「完了メール」「エラーメール」「結果メール」といったメールの区分ごとに、宛先や件名、本文を設定する需要があります。
プロセステンプレートではこういった形式の設定ファイルに関しても専用の読み込みアクションを事前準備しています。こちらは標準では「メール設定」コレクションに読み込まれますが、見ての通りメール設定は二次元のため、メール設定コレクションはまずメール種類(結果メールなど)がフィールド名となり、その1行目に更に設定内容のコレクション(To, CC, BCC, 件名, 本文をフィールドに持つコレクション)が格納される形となります。したがって値を使用する場合は[メール設定.結果メール.件名]のようにドット記法を2回続けて使ってください。
「実行モード判定」ページ
「実行モード判定」は、名前の通りプロセスの「実行モード」を判定するべく作成されるページですが、そもそも「実行モード」という概念がNEアセット固有のものですので、そこから解説する必要があります。Blue Prismのプロセスはときに、同じプロセスを動かしながらも起動したときの状況によって挙動を変更したいケースがあります。代表例としては月初月末関連の業務が挙げられます。
例えば、毎月月初第1~5営業日だけ実施されている業務を自動化することを考えます。営業日は毎月変わりますので、Blue Prismをスケジュール実行で動かす場合、こういったプロセスは毎日実行扱いでスケジュールしてしまい、1か月分まとめて端末の動作時間帯を確保しておくのが簡単かつ安全です。ただし実際の業務処理は6営業日以降動く必要はないので、プロセス内に「今日が第1~5営業日だったら業務実施、そうでなければ何もしない」といった判断を加えればよさそうです。
また環境によって、プロセスの挙動を変えたいようなケースもあります。例えば本番環境しか存在しないシステムへの登録業務で、開発環境や検証環境では事故防止のため登録操作を行わせないような制御を加えたいとします。これは環境変数に「環境名」などを定義して、それを元に場合分けすれば実現できそうです。
こういった挙動を作りこんだときに、問題になりがちなのが「開発・リカバリ・調査などの都合で(本来動かすことを想定していないタイミングだけど)あえて動かしたい」または「(本来動かすタイミングだけど)あえて止めたい」というケースが発生した場合です。上のような場合分けを単純に作っていた場合、これを実現するにはプロセスを改修するか、デバッグでステップ実行するしかありません。NEアセットの「実行モード」はこういった状況に応じたプロセスの動作パターン(動作しない、パターンも含む)にそれぞれ名前を付けたものです。NEアセットではプロセスの最初(初期化よりは後ですが)でこのモードをグローバルに設定するページを設け、設定ファイル項目を使って無理やり書き換え可能とすることで、前述のような問題を回避すると同時に、実行モード的な考え方が必要なプロセスの作りを統一します。
なおデフォルトでは「通常」モードと「停止」モードの2種類が設定されており、設定ファイルに「停止」と書けばプロセスが止まるというシンプルな作りになっています。例に挙げたような実行モードの考え方が不要なプロセスでは、特にこのページを編集せずに置いておけば構いません。
「スタートアップ」ページ
「スタートアップ」はほぼテンプレ通りの動作を一部カスタムする程度で使えばよいこれまでの2ページと違い、各業務でスタートアップ的な処理が必要なとき自由に記述するページです。そのためテンプレートとして用意されているステップはほとんどありません。
一点注意すべきなのが、「アプリケーションの起動」系処理をこのページに配置するか否かの判断です。テンプレートでは1回のプロセスが複数のワークキューアイテムを繰り返し処理していくような、データ(の行)単位やファイル単位の業務を想定してスタートアップページに「★アプリケーション1起動」というページ呼び出しサンプルを配置しています。複数のアイテムを繰り返し処理する場合は、毎回アプリを起動するのは無駄なのでスタートアップに起動処理に配置することが多くなります。アプリケーション起動ページの内容は以下のようなサンプルです。
このページは、当然ですがアプリの起動に失敗すると例外を発生させます。複数データを処理していく場合はこれをスタートアップに置いておくと、そもそもアプリが起動できない場合にはキューアイテムの新規登録すらせずに(既存アイテムがあってもそれにも触らずに)プロセスが終了するため、リカバリーが容易になります(データ起因でエラーになったわけではないキューアイテムが例外として記録されてしまうのを防げる)。
一方、1日1回実行、キューアイテムには実行日しか格納していないような(実行単位の)キューを持ったプロセスではどうでしょう。そういったプロセスは、むしろ「その日の実行がエラーだったかどうか」が日ごとのキューアイテムに記録される方が妥当そうです。この手のプロセスはキューのエラー発生時にその場でエラーメールを送る処理にすることが多いですので、下手にキューの外側でエラーになると通知の方法や形式も変わってしまいます(最悪、うっかりしていると誰にも通知されない実装になります)。「今日はアプリの起動に失敗したので処理できなかった」という結果をキューに記録して(エラーメールも送って)終わらせるためには、スタートアップで起動せず、実際にアプリを使う直前で起動する方がよいでしょう。
おわりに
上記に書ききれなかった細かい注意事項は各ページの注記ステージに記載されていますので、初めてプロセステンプレートを使う方は一度目を通してみてください。次回はプロセステンプレートのキューアイテム追加や、キューアイテムの処理ページについて解説していく予定です。