【UiPath】Orchestrator APIで送信するJSONデータの操作方法【POST編】

## はじめに

Orchestrator APIでのPOSTリクエストに必要な要求本文を作成する方法についてご紹介します。要求本文自体はJSON形式の文字列であるため、文字列として直接定義することも可能ですが、JSONオブジェクトとして取り扱った方がフィールドの定義や値の更新、繰り返し処理等の点で便利です。その点について本記事が参考になれば幸いです。

ここでは、例としてOrchestratorのジョブ実行のリクエストを送信する方法をご紹介します。

## 前提条件

- UiPath Studioから『OrchestratorへのHTTP要求』アクティビティを利用してPOSTリクエストを送信する
- UiPath Studio v2024.10.6を使用する
- Orchestrator API、JSONについては以下の記事を参照する

https://qiita.com/ts_saito/private/11bb7249f88eea395fca

## JSON操作方法

### 事前準備：UiPath.WebAPI.Activitiesパッケージのインストール

JSONオブジェクトを操作するために、NewtonSoft.JSONのアクティビティパッケージが必要です。それを依存関係に含むUiPath.WebAPI.Activitiesパッケージをインストールして、JSONオブジェクトを操作できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/c5fbd2b3-8a46-9818-1507-19752f3a713f.png)


### Step1. POSTリクエストに必要なJSON本文の内容確認

POSTリクエストの内容を確認する方法として、以下のような方法が挙げられます。
- 公式ドキュメントを参照する（ドキュメントに記載がある場合）
- Swaggerで確認する

公式ドキュメントに対応する要求本文の記載がない場合、Swaggerの定義から確認できます。
Swaggerのページ > 対応するエンドポイント > Parameters > body の項目に定義すべき要求本文の例が記載されています。以下はジョブ実行のエンドポイント `/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs` の当該箇所の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/c34c0c31-31d0-3291-a05f-9de6af8e148e.png)

Swaggerの利用方法については以下の記事に詳細が記載されています。

https://qiita.com/cazu/items/284444110c93ceb7bd09


### Step2. JSON本文の作成

[公式ドキュメント](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/api-guide/jobs-requests#starting-a-job)に記載の要求本文の例は以下の通りです。
今回は、このJSON形式の要求本文をUiPath Studioのワークフロー上で定義することを考えます。

``` JSON
{
  "startInfo": {
    "ReleaseKey": "795cbab2-8008-4a54-b1cb-f9ff1ece139e",
    "Strategy": "All",
    "RobotIds": [],
    "NoOfRobots": 0
  }
}
```

手順は以下の通りです。要求本文が要求本文の中に複数のフィールドを含む"startInfo"という要素が入れ子になっている構造であるため、最初に"startInfo"の内容を格納したJObjectを作成し、それを要求本文のJObjectに格納します。

1. 『代入』アクティビティを使用してJObject型の変数を定義する
    左辺： `startInfoJObj (JObject型)`
    右辺： `New JObject`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/93fd867e-d9e5-dd9c-4d97-f4f764a5ebea.png)

1. 『代入』アクティビティでReleaseKeyの値を格納する
    左辺： `startInfoJObj("ReleaseKey")`
    右辺： `"{実行対象プロセスのReleaseKey}"`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/f7e4dd2e-9ca8-f17b-fffe-f5b7aa69a579.png)

1. 『代入』アクティビティで要求本文となるJObject型の変数を定義する
    左辺： `requestBodyJObj (JObject型)`
    右辺： `New JObject`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/850bb119-87b6-9d9a-5e01-92e089b86671.png)

1. 『代入』アクティビティでstartInfoJObjをrequestBodyJObjに格納する
    左辺： `requestBodyJObj("startInfo")`
    右辺： `startInfoJObj`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/dcbebb74-c297-9490-aa05-8097a7ac2c0c.png)


定義した要求本文の内容を確認するため、『メッセージをログ』アクティビティに`requestBodyJObj.ToString`を設定してログに出力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/87c49e5c-4a4c-a6bc-7b84-408892da738d.png)

:::note
要求本文に含まれる"ReleaseKey"は実行対象のプロセスを特定するために必要な情報です。取得方法については後述の[ReleaseKeyの取得方法](https://qiita.com/drafts/5f3c36de90c726a37c76/edit#releasekey%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95)の章をご確認ください。
動作確認したところ、ジョブ実行のために最低限必要なフィールドは"ReleaseKey"のみで、他の値は特に指定せずジョブの実行が可能です。
:::

:::note
上記の例では『代入』アクティビティを使用して代入操作を行っていますが、『複数代入』アクティビティやコード化されたワークフロー等を使用しても同様の操作は可能です。
:::

### Step3. 『OrchestratorへのHTTP要求』アクティビティの設定

Step2で定義した要求本文を『OrchestratorへのHTTP要求』アクティビティに設定します。
設定内容は以下の通りです。"JSONペイロード"の項目はString型を受け付けるため、requestBodyJSON (JObject型)をToStringメソッドを使用してString型に変換します。

エンドポイントの相対パス：`"/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs"`
JSONペイロード: `requestBodyJObj.ToString`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/6b455c66-6191-9ea4-088f-5cf446e8155c.png)

上記の手順で構築したワークフローを実行すると、ReleaseKeyに指定されたプロセスが実行されます。


## 補足

### ReleaseKeyの取得方法

上述のジョブ実行リクエストの要求本文に必要なReleaseKeyの値の取得方法についてご紹介します。
ReleaseKeyはOrchestrator上に登録されたプロセスに対して一意に与えられる値です。ReleaseKeyを使用して実行対象となるプロセスを指定します。
ReleaseKeyは  /odata/Releases のエンドポイントにGETリクエストを送信することで取得できます。レスポンスの内、各プロセスの"Key"フィールドに格納されている値がReleaseKeyの該当します。
本記事で使用している『OrchestratorへのHTTP要求』アクティビティを使用してリクエストを送信することもできます。他の方法として、Swaggerを使用することでも簡単に確認できます。
以下にSwaggerでReleaseKeyを取得する方法について簡単にご紹介します。尚、ここではAutomation Cloud上のOrchesratorを前提とします。

1. `https://cloud.uipath.com/{組織名}/{テナント名}/orchestrator_/swagger/`にブラウザからアクセスする

1. Swagger画面右上の"Authorize"のアイコンをクリックし、開いたウィンドウの内容を変更せずに"Authorize"をクリックして認証させる（鍵アイコンが閉じた状態になっていると、認証が通っている状態です。認証が出来ていない場合、鍵が開いた状態のアイコンになります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/ee71b02d-b501-f15e-61e8-f5ec95f16904.png)

1. Releases > /odata/Releases の項目を開き、 "Try it out"をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/6ba9c695-a076-ab1f-327d-24d991d2db99.png)

1. "Execute"をクリックしてリクエストを送信し、応答本文を確認する（各プロセスの"Key"フィールドに格納されている値が"ReleaseKey"です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334074/ae164516-29a5-35a0-9940-a98a85c6a74e.png)


## 免責事項

本記事中でご紹介した内容は個人の見解および検証結果に基づくものであり、組織を代表した見解ではないこと、また動作を保証するものではないことをご了承ください。


## おわりに

本記事ではOrchestrator APIのPOSTリクエストに必要なJSON要求本文の操作方法についてご紹介しました。日々の開発作業の参考になれば幸いです。