LoginSignup
5
4

More than 3 years have passed since last update.

UiPathのワークフロー実行時に、パラメタを渡す方法あれこれ

Last updated at Posted at 2020-07-02

UiPath Friends 運営メンバの @masatomixです。こんにちは。
先日、Friends 運営メンバのSlack に下記のような質問をポストしました。

ワークフローの実行時に渡せるパラメタ (Main.xamlに引数として定義されている変数)ですが、OrchestratorからUnattendedに対して「ジョブ実行」するときにはパラメタとして渡すことができますけど、Attended Robotがタスクトレイからワークフローを実行するときには明示的にパラメタって渡せないですよね。皆さんどうしてますか?
コマンドラインから実行する際には下記のとおりできますが、これだとあんましスマートじゃないんですよね。

"c:\Program Files (x86)\UiPath\Studio\UiRobot.exe" 
execute -p プロセス名 --input "{'param1':'value1','param2':'value2'}"

さて、その際いただいた回答が以下のとおり:

AR前提なら引数使わずにワークフロー内でインタラクティブに入力してもらうケースがほとんどです。
積極的に調べたことがないのですが、おそらく無いのではないかと…。
ARですとユーザビリティ重視で作ることが多いので、UR,ARコンパチなワークフローってあまりないかな…。

そもそもARならワークフローの引数でなくてインタラクティブでイイじゃん、ってなるほどね、、。
と思いつつも、ググってもあまり情報がなかったのと、AR/UR共通ワークフローを作った場合も想定して、備忘としてQiitaにメモしておきます。

ちなみに「ワークフローの実行時に渡せるパラメタ (Main.xamlに引数として定義されている変数)」とは下記のことです。ねんのため。
param

今回あつかうワークフローは上記のようにparam1:String,param2:String を引数にとり、その値をMessageBoxに表示するだけのモノです。ココに値を渡すにはどうやるのか、って話ですね。

前提

UiPath Studio 2019.10.4 Enterpriseで疎通確認しています。UiPath Orchestrator は2019.10.18です。Orchestratorにはさきほどのワークフローが「ArgProject」というプロセス名でリリースされているとします。
p00
p0000

ちなみにタスクトレイ上は、ロボットグループ名が後ろについて「ArgProjct_Main」となることにご注意1
p000

TL;DR

  • Unattended Robot のジョブ実行については、OC画面からパラメタを渡せる
  • Attended Robot のタスクトレイからの実行のばあいは、多分パラメタを渡すことはできない。コマンドラインから起動する場合は、渡すことができる
  • Studioについては、パラメタを渡すドライバとなるXaml をつくればできる
  • 参考までに、ジョブは「ジョブ実行アクティビティ」や「Orchestrator API を用いたジョブ実行」などがあるが、APIを用いる場合はパラメタを渡すことができる

などなど。

やってみる

Unattended Robot でジョブ実行する場合

Unattended Robot にてワークフローを実行するケースですが、引数に値を渡すにはジョブ設定画面で値を渡すだけです。シンプル。
p01

実行すると、
p02

OCの画面で渡した情報が表示されています。OKそうですね。

ジョブの結果画面(ジョブ一覧の右の点々 >> 詳細) をみると、、
p03

渡された値まで確認できました。

Attended Robot でタスクトレイから実行する場合

Attended Robot にてWindowsのタスクトレイからワークフローを実行するケースですが、冒頭のとおりどうもパラメタは渡せないっぽいですね。というわけで、この場合はコマンドラインからパラメタを渡すという代替案を検討してみます。

やり方は公式の 「引数の説明 」にありました。具体的には下記の通り。

"c:\Program Files (x86)\UiPath\Studio\UiRobot.exe" execute -p ArgProject --input "{'param1':'コマンドライン1','param2':'コマンドライン2'}"

このように、JSON形式でパラメタを渡すことができるようです。実行してみると、
p04

JSON形式で渡した情報が表示されました。ただジョブ結果画面を見てみると
p05

渡された値は反映されていないようですね、、。うん微妙だ┐('〜`;)┌。。

Studioから実行する場合

ん、Studioはどうするんだっけ。正当(?)にパラメタを渡す方法はなさげなので、テスト用のXaml (ようはドライバですね)を作成して、そこからパラメタを渡せばOKかな。
p06

実行するときは「ファイルを実行」を選択しましょう。「実行」を選ぶとMain.xamlが実行されちゃいますので。
p07

実行結果は、下記の通り。
p08

OKそうですね2

参考: ジョブ実行APIにおけるパラメタ指定方法

Unattended Robotでの実行の派生パタンで、他のワークフローからのジョブ起動を考えてみます。UiPathのフォーラムの 「入力引数を含む複数ジョブのシーケンシャルな起動方法」にて「ジョブを開始」アクティビティはパラメタを渡せないけど、OrchestratorのAPIを使えばパラメタを渡せるよ、というやりとりがあるので、それを試してみます。

「ジョブを開始」アクティビティはパラメタを渡せない図
p09

サンプルをダウンロードして実行

サンプルを下記のGitHubに置きました。
https://github.com/masatomix/startJobSample
最近の UiPath StudioはGitHubから直接ダウンロードできる ので、落としてみてください。

さてダウンロードしたワークフローは

  • プロセス名(ArgProject_Main)を指定して、プロセスを特定するキー値を取得
  • そのキー値を用いてジョブを起動する
  • その際にパラメタも渡す

というサンプルになっています。

全体の処理シーケンス
p10

ジョブ起動部分(StartJob.xaml)の詳細。JSON文字列を構築し「OrchestratorへのHTTP要求」にてAPIを呼び出して、ジョブを起動しています
p11

「OrchestratorへのHTTP要求」アクティビティでAPIを呼び出す際には、JSON形式で文字列データを渡します。上記のキャプチャ上の「jsonStr」変数ですね。
実際に渡しているのは下記のようなデータで「InputArguments」の部分が、ワークフローに渡されるパラメタになります。

{
  "startInfo": {
    "ReleaseKey": "04b0fd32-cc25-42a4-a5bc-xxxxxxxx",
    "Strategy": "All",
    "NoOfRobots": -1,
    "Source": "Manual",
    "InputArguments": "{\"param1\":\"パラメタ\"}"
  }
}

InputArguments」の部分は、Attended Robotの引数に渡していたデータと形式ですね。一応ですが実際は{"param1":"パラメタ"}というデータなのですが、「"〜"」 の中でさらに「"」を用いるため、\ でエスケープしています。

さて、このJSON文字列を構築するのに、下記の通り文字列操作をゴリゴリやっても良いのですが、

p12
こんな感じでうんざりしそうなので、Dictionaryを使ってオブジェクトを構築し、最後に「Newtonsoft.Json.JsonConvert.SerializeObject()」メソッドを使ってオブジェクトをJSON文字列化するといくぶん楽かもしれません。

p13
さて、こちらのワークフローを実行してみるとOrchestratorにジョブが投入され、結果として先ほどのワークフローが動き出します。

p14
よさそうですね。OC画面上も

p15
OKでした。

-- 2020/07/03追記 --

そういえば「OrchestratorへのHTTP要求」アクティビティでAPIを呼び出す際には、Orchestrator上でロボットたちに適切な権限を付与する必要がありました。今回のジョブの起動については、「プロセスの閲覧」と「ジョブの作成」が必要です。デフォルトでは多分OFFになっているので、その権限を追加します。

やりかたは、

  • ユーザ >> ロール >> Robot >> 右部の点々から 編集

を選択し、下記のポップアップで「プロセスの閲覧」と「ジョブの作成」にチェックを入れて「更新」をクリック、です。
role

-- 2020/07/03追記 以上 --

以上、ワークフローの引数に情報を渡す方法でした。おつかれさまでしたー。

関連リンク


  1. APIに渡すときとか、あれどっちだっけ?ってなるヤツ 

  2. あちなみに、Studioからの実行はジョブ結果画面には記録されません。 

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4