UiPathで引数の値をどう管理するか?

RPAエンジニア 小林

ロボットを開発して作業を自動化すると、あとは実行ボタンを押すだけで目的の処理を実行することができます。 しかし時には、今までと異なるExcelファイルを読み込みたい、書類に入力する日付を都度変えたいなど、ロボットを実行する前に変数の値を設定したい場合があります。 実行前に設定する機会や項目が多くなると、設定し忘れたり誤った値を設定してしまったりすることもあるかもしれません。 今回は、UiPathで初期値の設定が必要な変数(引数)をどう管理するかについて考えてみます。

外部からロボットに渡す値は引数として定義する

ロボット内のアクティビティ間で渡す値を変数と呼びますが、その中でも特に外部からロボットに渡す値を引数と呼びます。今回設定するのも、ロボットの実行時に設定しておく必要がある値(=ロボットの外部から管理したい値)なので引数と言えます。まず、引数は引数であることが分かるように設定しておきましょう。UiPathの引数はデザイナーパネルで「変数」の横にある「引数」の項目で設定できます。引数の使い方は基本的に変数と同じで、各種アクティビティ内で使うことができます。通常の変数との違いは、引数として設定することで、他のロボット(ワークフローファイル)とやり取りする値として使うことができるという点です。今回紹介する例ではロボット間の値の受け渡しは行わないので、全て通常の変数として設定しても問題はないのですが、今後の拡張性やロボットとしての見通しのよさを考えると、外部から渡す値は引数として設定したほうがよいでしょう。

デザイナーパネルで、「変数」の横にある「引数」の項目を使って引数を定義できる

入力ダイアログを使う

さて、変数と引数を分けて設定することで、ロボット実行前に設定しなければならない値がどれなのかひと目で分かるようになりました。これでどの値を設定したらよいか迷うこともなくなりそうです。 しかし、引数の値を頻繁に変える必要がある場合、毎回UiPath Studioを起動して値を編集するのは面倒ですし、値を設定し忘れる可能性もあります。また、ロボットを実行する人が必ずしもロボットを編集できるとは限りません。 できればロボット自体を編集することなく外部から値を渡したいところです。

外部から値を渡す簡単な方法として、Input Dialog(入力ダイアログ)アクティビティがあります。このアクティビティでは入力フィールドのあるダイアログボックスを表示し、ユーザーが入力した値を読み取ってロボットに渡すことができます。 引数の個数が少なく、頻繁に値を変えたい場合はInput Dialogアクティビティを使うとよいでしょう。

頻繁に変える必要がある引数の場合、Input Dialogアクティビティを使うとロボット実行時に忘れずに値を設定できる
Input Dialogアクティビティによる入力画面

Excelで値を管理する

一方、引数の個数が多かったり、毎回値を変えるわけではない場合はInput Dialogによる設定は煩わしいかもしれません。その場合はExcelファイルで引数を管理するという方法があります。 例えばA列に項目名、B列に読み込みたい値を記入するなどのルールを決め、Read Cell(セルを読み込む)アクティビティで値を読み取れるように設定しておけば、必要なときにExcelファイルを編集するだけでロボットに渡す値を変えることができます(ただしこちらの記事で触れたように、セルの表示形式と引数の型には注意が必要です)。

ロボットだけで完結させず、Excelファイルを使って変数の値を管理するという方法もある

JSONで値を管理する

Excel以外にも外部ファイルから値を渡す方法として、JSONファイルを使った方法があります。 JSONファイルはメモ帳等のテキストエディタで編集できます。例えば上記のExcelと同様の値を設定したかったら、


{"テンプレート": "D:\\template\\template03.txt", "データ": "D:\\data\\data2019.txt", "ログ保存先": "D:\\log\\"}

と書かれたJSONファイル(拡張子が.jsonのテキスト)を用意します("\"はエスケープする必要があるので"\\"となっています)。 このJSONファイルをUiPathで読み込むために、Deserialize JSON(JSONをデシリアライズ)というアクティビティを使います。このアクティビティはUiPath.Web.Activitiesというパッケージをインストールすると使えるようになります(パッケージを管理)。 JSONを読み込む手順としては、まずRead Text File(テキストファイルを読み込む)アクティビティでJSONのテキストをString型の変数(仮にjson_textとする)として読み込みます。続いてこのjson_textをDeserialize JSONアクティビティに渡すと、json_textがJSONとして解釈された変数(仮にjson_objectとする)が得られます。あとは、GetValue()メソッドを使ってほしい値を取り出します。例えば「ログ保存先」の値が欲しければ、json_object.GetValue("ログ保存先").ToString()とすることで値を取得できます。

Deserialize JSONアクティビティを使うと、ロボットに渡す値をJSONファイルで管理できる

いかがでしたか?ExcelやJSONといった外部ファイルを使った引数管理では、今回の例のように値を設定しやすいだけでなく、別のロボットで同じ値の設定を引き継げるという利点もあります。 最初に外部から値を読み込む設定をするのは少し面倒かもしれませんが、一度設定すればその後のロボットの管理がとても楽になります。あとから変えるかもしれない値をどう管理すればミスが生じにくくなるかという点を意識してロボット開発をしていきたいですね。