処理済みフラグとステータス列で二重処理を防ぐ(途中から再実行できる設計)
ロボットが途中で止まったあと、再実行で同じデータを二重に登録してしまう問題を、ステータス列(処理済みフラグ)で防ぐ設計を解説します。ステータスの種類、更新のタイミング、「処理中」で残った件の扱いを整理します。
再実行で二重に登録してしまう
架空の例として、Excel の150行の支払データを会計システムに登録するロボットが、80件目でシステムの一時的な不調により止まったとします。原因が解消して最初から再実行すると、1〜79件目がもう一度登録され、二重の支払データができてしまいます。かといって、担当者が手で79行を消してから再実行するのは手間がかかり、消し間違いの危険もあります。
このような事態を防ぐには、1件ごとに「処理が終わったかどうか」を記録し、再実行のときは終わっていない件だけを処理する設計にしておきます。
ステータス列を用意する
入力データに、処理の状態を表す列を1つ用意します。単に「済」だけでなく、次のように状態を分けておくと、再実行や問い合わせへの対応がしやすくなります。
- 空欄(未処理):まだ処理していない。ロボットの処理対象
- 処理中:処理を始めたが、まだ終わっていない
- 完了:登録まで終わり、完了を確認できた。再実行では飛ばす
- エラー:その件だけの問題で処理できなかった。データを直して空欄に戻せば再処理される
- 対象外:業務のルール上、処理しない件
ステータスを更新するタイミング
ステータスは、1件ごとに処理の前後で更新します。全件が終わってからまとめて書き込む作りにすると、途中で止まったときに何も記録が残りません。
- ステータスが空欄の件だけを取り出す
- 処理を始める前に「処理中」と記録する
- 登録を行い、完了メッセージなどで成功を確認する
- 成功なら「完了」と処理日時を記録する。失敗なら「エラー」と理由を記録する
- 次の件へ進む
「処理中」のまま残った件の扱い
ロボットが登録ボタンを押した直後に止まると、その件は「処理中」のまま残ります。このとき、システムに登録されたのかどうかは、ロボットには分かりません。自動で再処理すると二重登録になるおそれがあるため、「処理中」で残った件は、再実行の対象から外し、人がシステムの画面で登録の有無を確認してから、「完了」または空欄に直すルールにしておくのが安全です。
ロボットの最初に「処理中」の件がないかを確認し、あれば担当者に通知してから処理を始める、という作りにしておくと、確認漏れを防げます。
どこに記録するか
ステータスを入力ファイルそのものに書き込む方法は分かりやすい一方、担当者がファイルを開いたままだと書き込めない、元のデータを上書きしてしまう、といった弱点があります。入力ファイルとは別に処理状況のファイル(キーとなる番号とステータスだけを持つもの)を作り、キーで突き合わせる方法もあります。どちらの場合も、行の並び順ではなく、伝票番号などの一意のキーで件を特定することが大切です。
よくある失敗
ステータス管理で起きやすい失敗です。
- 行番号で件を特定していて、担当者が行を並べ替えたり挿入したりすると記録がずれる
- 画面の完了を確認せずに「完了」を記録してしまう
- エラーの件を直したあと、ステータスを空欄に戻し忘れて再処理されない
- ステータス列の値を担当者が手で自由に書き換え、想定外の値で処理対象から漏れる(入力規則で選択式にしておく)
※BizRobo! は RPA テクノロジーズ株式会社の製品です。本サイトは同社とは関係のない個人の解説サイトです。画面や機能の名称は、製品のバージョンによって異なる場合があります。