俗に「処理が空振りする」とか「タイミングが合わない」とか表現されています。
UiPathは基本的に処理開始のコマンドを送っているだけで、その結果をモニタしていません。
結果、
次に現れるダイアログ上の操作を行うコマンドに対して、ダイアログがまだ出現していなかった場合にエラーが発生します。
保存したファイルを次のアプリケーションで開くとき、対象ファイルの保存が完了しておらず処理を進めようとしてエラーが発生します。
タイマーによる解決方法
もっとも初歩的な方法です。確実に次の処理を受けつけるまで待機する時間を設ける方法です。処置は簡単ですが、最適な待ち時間を見出すのに試行錯誤が必要であること、システムの状態等で待ち時間が必ずしも一定でないなどの理由で無暗に長い待ち時間を設定することになることから推奨できません。
スニペットを使う
スニペットパネルを開きます。
スニペットの中にDelayという区分があります。Delay(ディレイ)は「遅らせる」という意味があり、プログラミングの世界では一般的です。
Delay XX Second(s).xaml
Delay XXX Millisecond(s).xaml
はそれぞれ、XX秒やXXXミリ秒の間処置を遅らせる(=待機する)ことを示しています。
なお、1秒=1000ミリ秒になります。
例えば、Delay 10 Seconds.xamlは次のアクティビティへの移動を10秒待機することを示しています。
スニペットはアクティビティと同じく、デザイナーパネルにドラッグ&ドロップしてプロセスに組み込みます。
アクティビティ内プロパティを使う
アクティビティにも処理時間を持たせることが可能です。
下はクリック(Click)アクティビティのプロパティです。アクティビティの実施前後にそれぞれ待機時間を持たせることが可能です。
入力単位はミリ秒なので、1秒待機させたい時は1000と入力します。
先のスニペットでの10秒待機と同じ処置をする場合、以下のようにします。
クリック(Click)アクティビティのプロパティで、実行前の待機時間に10秒、つまり10000ミリ秒を入力します。
有無(EXIST)アクティビティによる解決方法(推奨)
タイミングが合わないのだったら、ダイアログの出現やファイル保存の完了をモニタするやり方です。分岐(Decision)アクティビティを伴うプロセス構築が必要となるため多少面倒ですが、処理可能な時間の特定(試行錯誤)が必要ないため結局時間短縮になります。
要素の有無を判断する
下はよくあるログインダイアログが表示されるシステムの起動です。
ログインダイアログが表示されていないと、ユーザIDやパスワードの入力部がありません。
❶は要素の有無を検出(UiElementExists)アクティビティでダイアログを登録し、出力変数を設定しています。登録した要素が検出されると変数にTrueが、検出されない場合にはFalseが返されます。
❷は❶の結果に対するフロー条件分岐(FlowDecision)アクティビティです。❶がFalseならIDやパスワードの入力準備が出来ませんので❸のルートで再度❶の確認を行います。
ダイアログが表示される(つまり❶がTrue)になると❹のルートをとおりIDやパスワードが入力されるようになります。
無限ループを防ぐ為に❸のループに回数制限をかけるのも良いと思います。
ファイルの有無を判断する
下は、他からダウンロードしたファイルをOutlookメールに添付するプロセスです。
Outlookからは添付ファイルを所定のパスに取りに行きますが、パスが存在しない状態で処理が進むとエラーになります。
そのため、パスの有無を確認します。
❺はパスの有無を確認(PathExists)アクティビティで、対象となるファイルのフルパスと、結果出力変数を設定しています。設定したフルパスが検出されると変数にTrueが、検出されない場合にはFalseが返されます。
❻は❺の結果に対するフロー条件分岐(FlowDecision)アクティビティです。❺がFalseならメールへの添付ファイルが準備できていないので❼のルートで再度❺の確認を行います。フルパスの存在が確認される(つまり❺がTrue)になると❽のルートをとおり次の処置に進みます。
コメント