【UiPath】タイムトリガーの情報をAPIで取得する

# はじめに

- 本記事では、OCのタイムトリガーの情報をWebAPIで操作する方法を紹介します。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 23.10 バージョンのもので構成しています。

# OC Manager だとスケジュールはCRON式しかとれない。。。

↑↑こんなお悩みをお持ちの方向けの実装サンプル（***WebAPI をもちいた専用ロボ***）を紹介します。
サンプルはタイムトリガーの情報を取得する内容ですが、エンドポイントや設定を少し変えるだけで様々な自動化に応用できます。

***OCのUIアクセスは制限しているが、ジョブのスケジュール（タイムトリガーの設定）は最新のものをユーザーに参照させたいケースなどで役に立ちます！***

## 実装サンプル

まず、WebAPIでOCにアクセスするために、外部アプリケーションを登録しましょう！以下は参考

https://qiita.com/Jun96427231/items/ec8fb6cac168a82195c0#3%E5%A4%96%E9%83%A8%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

![トリガーの有効無効操作1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e101d6bc-2a1b-9ccb-8de3-b1f7bb47789a.jpeg)

➀：上で作成した外部アプリケーションの「***アプリID***」と「***シークレットの値***」を Credential型のアセットとして登録し、「資格情報を取得」アクティビティを配置して呼び出します。（出力変数には「client_id」と「client_secret」を設定）

➁：「HTTP要求」アクティビティを配置し、次の内容を設定します。
- 本文形式：application/x-www-form-urlencoded
- パラメーター＞grant_type："client_credentials"
- パラメーター＞client_id：client_id
- パラメーター＞client_secret：new System.Net.NetworkCredential("",client_secret).Password
- パラメーター＞scope：{★外部アプリケーションで許可したスコープ}　（例）"OR.Jobs OR.Jobs.Read"
- 要求URL："https://cloud.uipath.com/identity_/connect/token"
- 要求メソッド：POST
- 応答コンテンツ：応答コンテンツ
- 応答ステータス：ステータスコード

![トリガーの有効無効操作2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/d237a8d8-482f-65c9-f1da-bfde2f16ab0f.jpeg)

➂：「JSON を逆シリアル化」アクティビティを配置し、次の内容を設定します。
- JSON文字列：応答コンテンツ
- 出力＞JSONオブジェクト：応答コンテンツのJオブジェクト

➃：「代入」アクティビティを配置し、次の内容を設定します。
- 左辺：アクセストークン
- 右辺：応答コンテンツのJオブジェクト("access_token").ToString

![トリガー情報取得1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/a62b766d-10bf-30d6-b704-2ad6767225a9.jpeg)

➄：「HTTP要求」アクティビティを配置し、次の内容を設定します。
- 本文形式：application/json
- ヘッダー＞Authorization："Bearer "+アクセストークン
- ヘッダー＞X-Uipath-Organizationunitid：フォルダID.ToString
- 要求URL："https://cloud.uipath.com/{★組織ID}/{★テナント名}/orchestrator_/odata/ProcessSchedules"
- 要求メソッド：GET
- 応答コンテンツ：応答コンテンツ
- 応答ステータス：ステータスコード

↓

「JSONを逆シリアル化」アクティビティで『応答コンテンツのJオブジェクト（JObject）』を作成します。

↓

![トリガー情報取得2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/95eda7fc-26fa-e9fe-c908-481a288b5852.jpeg)

次の様に入出力を設定します↓↓
入力：
***応答コンテンツのJオブジェクト.Properties.ElementAt(2).Value.ToString***
出力：
JSON配列のオブジェクト（JArray）

↓

（JSON配列のオブジェクト（JArray）の繰り返し）
![トリガー情報取得3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/8a22724a-fd14-edcd-ff6c-f1787717f0ab.jpeg)

トリガー情報の補完例
- トリガーの表示名称　＝　currentArrayItem.Item("Name").ToString
- ***CRON式の設定概要　＝　currentArrayItem.Item("StartProcessCronSummary").ToString***
- トリガーID　＝　currentArrayItem.Item("Id").ToString
- 有効無効　＝　currentArrayItem.Item("Enabled").ToString

```
## 参考：フィールド名と値のサンプル
   ""Key"": ""789c346e-efa9-477a-ad46-533d15d12e6f"",
   ""Enabled"": false,
   ""Name"": ""テスト"",
   ""ReleaseId"": 594227,
   ""ReleaseKey"": ""37b7a354-288e-44ef-8ad0-0e02dcebbdd6"",
   ""ReleaseName"": ""待機時間コントロール"",
   ""PackageName"": ""待機時間コントロール"",
   ""EnvironmentName"": null,
   ""EnvironmentId"": """",
   ""JobPriority"": null,
   ""SpecificPriorityValue"": null,
   ""RuntimeType"": ""Unattended"",
   ""StartProcessCron"": ""0 0/5 * 1/1 * ? *"",
   ""StartProcessCronDetails"": ""{\""type\"":0,\""minutely\"":{\""atMinute\"":5},\""hourly\"":{},\""daily\"":{},\""weekly\"":{\""weekdays\"":[]},\""monthly\"":{\""weekdays\"":[]},\""advancedCronExpression\"":\""\""}"",
   ""StartProcessCronSummary"": ""Every 5 minutes"",
   ""StartProcessNextOccurrence"": null,
   ""StartStrategy"": 1,
   ""StopProcessExpression"": """",
   ""StopStrategy"": null,
   ""KillProcessExpression"": null,
   ""ExternalJobKey"": null,
   ""ExternalJobKeyScheduler"": ""69d4d92a-0e8c-0100-6340-0b43f321794b"",
   ""TimeZoneId"": ""UTC"",
   ""TimeZoneIana"": ""UTC"",
   ""UseCalendar"": false,
   ""CalendarId"": null,
   ""CalendarName"": null,
   ""CalendarKey"": null,
   ""StopProcessDate"": null,
   ""InputArguments"": ""{\""繰り返し回数\"":10,\""指定経過時間_分\"":3}"",
   ""QueueDefinitionId"": null,
   ""QueueDefinitionName"": null,
   ""ActivateOnJobComplete"": null,
   ""ItemsActivationThreshold"": 1,
   ""ItemsPerJobActivationTarget"": 1,
   ""MaxJobsForActivation"": 2,
   ""ResumeOnSameContext"": false,
   ""Description"": null,
   ""AlertPendingExpression"": null,
   ""AlertRunningExpression"": null,
   ""RunAsMe"": false,
   ""ConsecutiveJobFailuresThreshold"": 0,
   ""JobFailuresGracePeriodInHours"": 0,
   ""IsConnected"": false,
   ""Id"": 132887,
   ""MachineRobots"": [
     {
       ""MachineId"": 1808144,
       ""MachineName"": ""URテスト"",
       ""RobotId"": 711192,
       ""RobotUserName"": null,
       ""SessionId"": 11364007,
       ""SessionName"": null
     }
```

（出力例）
![トリガー情報取得4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/010ba951-d43b-7f10-7913-fb3b28261d98.jpeg)

# さいごに

いかがでしたでしょうか。
WebAPI をつかった自動化は、必要な情報さえあれば実装は容易ですし、処理も安定しやすいので、ニーズがありそうな際は是非上を参考に試してみていただければとおもいます。
最後までお読みいただきありがとうございます！(・ω・)ノ

# 関連記事

https://qiita.com/Kajiita/items/ea5af1645615382bab74