複数のプロセスを連続して実行したい

表題の通り、複数のプロセスを連続して実行するようなことはできますでしょうか?
例えば下記の3つのプロセスがあるとします。
1.社内システムを操作し、指定のフォルダにエクセルファイルを出力
2.プロセス1により出力されたエクセルファイルを読込み、別の社内システムに登録
3.登録完了メールを送信。
この場合に、1→2→3というようにプロセスを連続して実行したいのですが、
複数のプロセスを連続して実行する方法がございますでしょうか?

こんにちは。

まずできるかできないかという観点ですと、基本的にはどうにかやりくりすればできるはず、という回答になるかと思います。
プロセスとおっしゃっているのが業務的な処理単位を示しているのか、UiPathのプロジェクトの単位を示しているのかで実現方法が変わってきそうですが・・。

前者であれば1~3のそれぞれの処理の区切り目(1であればExcelが出力された、という事の確認)を考えつつ、一つのプロジェクトを作り込んでいければ問題なく実現できるかと。

後者の場合は…環境によってひとひねりする必要はありそうです。
この場合は実行させたい処理の仕様や実行環境によって取れる方法が変わってきそうなので
もう少し情報が欲しいかもしれません。
例えば「各プロジェクト間で引数的な情報共有の必要はない、1のプロジェクトが正常に実行できた場合のみ2を実行する(2~3も同様)、有人ロボットでの実行を前提とする」とか。
こういうシチュエーションであれば
パブリッシュしたプロジェクトを実行するバッチファイルを用意して、1のプロジェクトを実行
→実行結果の戻り値を取得して正常終了なら2のプロジェクトを実行…とかで行けると思います。

どの粒度の回答が必要かわからなかったのですが、
ひとまずこんな感じの回答でピントはあっていますでしょうか?

rfu様
回答ありがとうございます。
プロセスは「UiPathのプロジェクト単位」を示しております。
基本的に、プロジェクト間での引数的な情報共有は必要ないです。
前工程のプロセスの実行結果(正常or異常)によって、正常の場合のみ実行したいです。

パブリッシュしたプロジェクトを実行するバッチファイルを用意して、1のプロジェクトを実行
→実行結果の戻り値を取得して正常終了なら2のプロジェクトを実行…とかで行けると思います。
ここの部分ですが、1の部分のみ手動実行で、2以降の実行は自動で行われるとう意味で述べられていますでしょうか?それとも1の結果を見て2も手動実行でしょうか?

こんにちは。

ご質問のような、意味的なまとまりのあるプロセスを連続して実行する場合、それぞれのプロセスをサブルーチン化して、メイン(Main.xaml)から「Invoke Workflow File」アクティビティを使用してコールしてあげると良いと思います。 各プロセスの実行結果を、リターンコードとして引数に入れて後続に渡し、判定すると良いでしょう。

下記の例は、「アカウント情報の取得」という処理をサブルーチン化した物です。
プロジェクトの中にある、メインルーチン(Main.xaml)以外の.xamlファイルが、メインから呼ばれるサブルーチンです。メインルーチンとサブルーチンは、引数を使って情報のやり取りが出来ます。


このように、繰り返し現れる処理、意味的なまとまりのあるプロセスをサブルーチン化すると、プロセス全体の可読性や保守性が高くなりますので使ってみて下さい。

ここの部分ですが、1の部分のみ手動実行で、2以降の実行は自動で行われるとう意味で述べられていますでしょうか?それとも1の結果を見て2も手動実行でしょうか?

ややこしい表現ですみません。
Orchestratorへの接続がない前提で、イメージとしては前者です。
(厳密には1~3を連続実行するバッチファイルを用意して、そのバッチを手動で実行する形になります)

そちらで使われているUiRobotのバージョンでコマンドが変わってくるのですが、
たとえば私の手元にある2019.4のバージョンですと

cd "C:\Program Files (x86)\UiPath\Studio"
UiRobot -process "プロジェクト名"

といった感じでバッチを作ると、そのPCにパブリッシュした1プロセス(プロジェクト)を実行することができます。
あとはバッチファイル内でこの実行結果の戻り値を取得して、その値によってバッチ内で処理分岐をさせればワンタッチでプロセスを連続実行させることが可能になるかと。
(すみません、戻り値の取得のサンプルコードがどこかに行ってしまいました。
見つけ次第補記します。明日になるかも。確かERRORLEVELで取得するんだったかな?)

取り急ぎ回答まで。

4/9追記:2つのプロセスを連続実行する場合はこんな感じでした。
Orchestratorからのキックではなくなるので恐らく求めているものとはずれてしまいますが、
ご参考まで。

cd "C:\Program Files (x86)\UiPath\Studio"
UiRobot -process "プロセス1"
if %errorlevel% == 0 (
UiRobot -process "プロセス2"
)
1 Like

すみません、トピックのタグOrchestratorを見落としていました。
(先程のリプライはロボットトレイからプロセスを連続実行するニュアンスのやり方になります)

Orchestratorからプロセスを連続実行するとなると、
手動でプロセス1を実行し、プロセス1の最後に「プロセス2を実行する」という命令を組み込むのが
一番シンプルでしょうか。

組み込み方としては「ジョブを開始」アクティビティを使って、
プロセス名プロパティに"プロセス名_ロボットグループ名"を設定する感じになります。
その際、プロセス1を実行するロボットに、Orchestrator上で「ジョブ:作成、編集、プロセス:閲覧、ロボットグループ:閲覧」の権限が必要になるようですので、
「ユーザー」タブから「タイプ:ロボット」でロボットを指定して適宜ロールを割り当ててあげてください。

1 Like

念のため確認ですが、
プログラムで連続して実行したいですか。
それともOrchestratorで連続して実行したいですか。

rfu様
ご丁寧にありがとうございます。
ゆくゆくはOrchestratorで管理することも視野に入れていたので、Orchestratorタグをつけていました。
投稿頂いた内容を元に実装してみたいと思います。
ありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.