始めに
UiPathで様々な処理を作っていくと、同じような処理を他の場所でも使いたくなるようなことが有ります。
他にも、Mainの処理が大きくなりすぎるとテストを行う際に、結構、面倒くさくなったりします。
(前の処理の完了を待たなければいけないので、何度も流していると時間が無駄だったりします)
処理を切り出してみよう
というわけで、前述の処理をもっと小さい単位で切り出してみましょう。
この対応を行う事によるメリット
- 繰り返しの処理で、同じ処理を自分自身で書かなくてよくなります。もちろん、修正も1か所で済みますので保守性も向上します。
- 切り出した処理単体で、実行が出来るのでプログラムの見通しが良くなります。
- テストがしやすくなり、バグの発見が容易になります。
実際にどうやってやるのか?
まずはサンプルでフローチャートを作ってみましょう。
全体図
内部のフローチャート
メモ帳を開いて、上位のフローチャートより受け取ったMessageを転記する。
もちろん、この程度の複雑さであればこれでも良いかもしれませんが…
折角なので分割しましょう
フローチャートを別ファイルにする
右クリック→Extract as Workflowを選択します。
保存する名前の入力を求められるので適当に入れて、createを選択
これで別ファイルとしてworkflowが出来ました!
さて、messageが存在しないのでエラーになっています。これは、上流のフローチャートより値を受け取りたいので引数として受け取れるようにしましょう。
Argumentsを選択して、Messageという名称で引数を作ります。Directionは、入力を表す「In」を選択します。もちろん、後続処理に値を渡す「Out」や両方できる「In/Out」もあります。デフォルト値には、「初期値」を入れておきます。
これで、上記のエラーメッセージは消えたはずです。さて、openNotepadを実行してみましょう。このWorkflowを開いた状態で実行キーを押すだけです。
問題なく、この処理だけが実行されました。(2回目の処理は流れないはずです。)これが上記のメリット2で上げた「切り出した処理単体で、実行が出来る」という事になります。
###上流のフローから値を渡す
さて、切り出した処理単体でうまく動かせたので呼び出し元のフローも変更しましょう。
Extract as Workflowとした処理がInvokeに変わっています。
このInvokeの処理をダブルクリックで開くと下記の画面になります。引数を編集できる機能があります。まずは、「Import Arguments」で、必要となる引数を自動でインポートしましょう。
下記の画面が表示されます。Name,Direction,Typeについては自動で入力されています。Valueに、こちらから渡したいmessageという変数を指定しましょう。
この状態を全て保存して処理を実行すると、2つのメモ帳が立ち上がり、大元のWorkflowの変数に格納していた「hogehoge」という言葉がメモ帳に記入されることを確認できたかと思います。「初期値」という言葉にはならないはずです。
これで、処理の一部を外だしすることが出来ました。
後は、「上と同じフロー」としていた部分もInvokeにしてあげればOKです。
この例は、非常に簡単な物でしたが、例えば「メモ帳を別のエディタに変えたい」という対応も、一か所で修正が出来るようになります。
もちろんInvokeしたWorkflowでさらにInvokeという事も可能です。(あまり階層が深くなりすぎるのも大変ですが…)
保守性の高いプログラムを行う上では必須の知識かと思っていますので、設計の際に参考にしてみてはいかがでしょうか。