Pick Branch アクティビティ、Parallelアクティビティについて

いつもお世話になります。

Pick Brunchアクティビティ、Parallelアクティビティについてご存知の方お伺いします。

ソース構造が全く同じ分岐(ifの条件がThenでもElseにいっても同じアクティビティを設置したもの、パラメータは違います)が冗長で時間がかかりそうなので、並列処理で対応したいと考えたのですが、こちら両方とも、True/False系での分岐処理には向かないものでしょうか(PickBranchはトリガーでActionに進み、Parallelは交互に処理で進む例題が多いので)

写真を上げれず申し訳ありませんが、例を以下に記載します。

(例)商品名がAAAで始まる場合(If のCondition)
Then: AAAフォルダにaaa〇〇xlsxファイルが存在するか(Path Exist)
→If パスの存在がTrue
→Then:File Copy
→Else:エラー商品リスト作成

Else(商品名がAAAで始まるもの以外): 商品ETCフォルダにetc〇〇xlsxファイルが存在するか(Path Exist)
→If パスの存在がFalse
→Then:File Copy
→Else:エラー商品リスト作成

上記をFor Each Rowでループ

パスの有無のTrueFalseで合致するものの処理に進むイメージで並列をしたいのですがやはり難しいでしょうか。
逆に動作的にIfの方が安定したりするものでしょうか。

長文乱文で大変恐れ入りますが、どなたかご教示頂けたら幸いです。
よろしくお願いします。

@AIT さん

ご説明の要件は、基本的にPick BrunchもParallelも
利用する必要がないと思います。

ちょっとIf、Pick BrunchとParallelの差異を説明します。
Ifの場合は、まず条件判断、そして、下二つのルートの一つだけを実施します。
Pick Brunchの場合、まず、多数なトリガーを同時に実施してみて、
どちらが成功したら、その下アクションだけを実施して、
他のアクションを実施しないまま、次アクティビティにします。
Parallelの場合、全部ルートを同時に実施して、全部ルートを成功する後、終わります。
ただし、Parallelの終了条件を設定されたら、とあるルートを実行完了且つ
終了条件を満足する時に直ちに終わって、次アクティビティにします。

1 Like

ご要件を見る限り、あえて並列処理を入れる必要はないかと思います。むしろ並列処理を入れることで不要な判定処理まで実施されてしまう可能性もあるように思えますので、現状のままIFアクティビティを利用して進められるのが宜しいかと思います。

手前味噌で恐縮ですが、Parallelの使い方を記事にした経験がありますので、ご興味がございましたら参照ください。
https://rpa.adgj.pw/items/uipath-parallelの使い方

少しだけ、捕捉すると、Parallelアクティビティは、本当に全てを同時にやるわけでは、ありません。
順番は、たいていはワークフロー画面の左からですが、仕様で明確に決まってはいないようです。

Parallelアクティビティの、ソースコードにある、Executeメソッドの中では、それぞれの子要素をContextに追加しています。Contextは順番にActivityを実行するので、並列動作はしませんね。
解説にも、そのように書いてあります。
もうちょっと動作を掘り下げると、

UI Automation Packageのマニュアルには、Parallelは、画面操作ではサポートしていないと書かれています。
(今日は何故か、日本語で表示されませんが・・・)

UI Automationのアクティビティは、セレクターから要素を探す処理に入って、要素が見つからないと、Timeoutまでは何度も探し続けるようです。
推測ですが、対象を探しているタイミングで、別のUI操作を行っていて、要素が見つかってしまうと、複数同時に処理されてしまい、不具合が起きるのかもしれません。
(普通のユーザーによる操作では、2つ以上の画面要素が、同時にクリックされる、みたいなことは起きないので、アプリケーションもそのように作られているはずです。UI Automationを、複数同時に実行すると、それができてしまい、変なことになるかもしれません。)

そういった動作を加味すると、Parallelは、画面操作+判定とか、複数の判定を同時に行うような場合に、限って使うのが良い気がします。