【UiPath】外部サービスをトリガにしたプロセス起動方法（Integration Service）

# はじめに
UiPathには、Integration ServiceというiPaaS的なプロダクトがあり、これを使うと外部サービスのイベントをトリガにして、UiPathのプロセスを簡単に起動することができます。

Integration Serviceと類似したWorkatoというiPaaS製品についても記事を書いていますので、合わせてご覧ください。

https://qiita.com/shuy/items/6b97408de1000d229719

https://qiita.com/shuy/items/585306d0d18c44f86b53

# 使うもの
※クラウド環境は2022年4月時点のもの
* UiPath Integration Service
* UiPath Cloud Orchestrator
* UiPath Studio 2021.10.4

# コネクションを作成
今回は、Salesforceで取引先レコードが作成されたことをトリガにして、ロボットを起動してみます。
Integration Serviceの「コネクター」から対象のサービスを選択します。
![コネクター1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/68967efb-2b9c-266d-fbf2-d04289eb6a4d.png)

以降は選択した外部サービスによって変わります。
Salesforceの場合は、対象環境が「Production」か「Sandbox」かを選択します。
![コネクター2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/54ccd2b0-b37b-c204-1ebc-c99cee1b5f1a.png)

OAuth認証に対応しているサービスの場合は、認証ページに飛ばされ、アクセスを許可します。お馴染みの流れです。
![コネクター3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/8b1c6d05-246e-ffaa-b526-5a5a45c9dac1.png)

作成できました。
![コネクター4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/ac029163-7611-d92f-39ba-b7fdbafdef1e.png)

# ワークフローを実装
次にトリガから呼び出されるワークフローを実装します。
基本的には好きなように実装すればいいのですが、1点だけルールがあります。

以下の引数を作成してください。これらの引数はトリガからジョブが実行される際に自動的に値がセットされます。

* [IN] String UiPathEventConnector
* [IN] String UiPathEvent
* [IN] String UiPathEventObjectType
* [IN] String UiPathEventObjectId

![ワークフロー1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/ec0eafed-c538-2086-f58e-758233bbabdd.png)

実装が完了したら、Orchestratorへパブリッシュして、プロセスを作成しておきます。
現時点のIntegration Serviceの仕様では、トリガからジョブを実行する際、特定のマシンやアカウントを指定することができないので、マシンを特定の1台に絞りたい場合は、フォルダーを分けて対応してください。
![プロセス1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/e14943ca-6ff8-13d1-2422-b6ee3b8e171d.png)

# トリガを作成
Integration Serviceに戻り、トリガを作成します。
接続コネクターと、トリガイベント、実行するプロセスを選択します。

トリガイベントは外部サービスによって異なりますが、Salesforceの場合は「レコード作成時」と「レコード変更時」をトリガとすることができます。
また、対象のオブジェクト（テーブル）（Integration Service上では「記録」とか、ちょっと翻訳が変）は、接続したSalesforceの環境上のものが選択できます。標準オブジェクトもカスタムオブジェクトも選択できます。ちなみにオブジェクト名が、API参照名（物理名）での表示なので、表示名（論理名）にしてほしいなあと思っています。
![トリガ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/37fc1194-eaf2-4286-b507-39fa829d141d.png)

:::note warn
注意：フォルダー名に日本語（2バイト文字）を使用すると、トリガ作成時にエラーになるようです。
この程度のバグは直ぐにFixされると思うので、気にする必要はないかと思いますが。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/b42e18ee-ba25-1c67-9d99-c3560048fde0.png" width=50% alt="エラー1.png">
:::

# 試してみます
まずは、Salesforceで取引先を作成します。
![SFDC1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/0311b048-871b-a553-9781-d0aa7403505d.png)

数分後、ジョブが実行されたことが確認できました。
公式のドキュメントによると、5分おきのポーリングでSalesforceの状態を監視しているようです。現時点の仕様ではポーリング間隔の変更はできません。
![ジョブ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/a604bd2f-9d20-1340-8af7-cfc6ad37124d.png)

Orchestratorのジョブ画面でも確認できます。実行元が「連携トリガー」となっています。
![OCジョブ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/a59a8131-436b-fce6-3105-395caa5bb1e8.png)

ジョブの引数を確認してみます。
「UiPathEventObjectId」にセットされた値は、Salesforce上の作成された取引先レコードの主キーとなるものです。
Salesforceからは作成した取引先レコードの中身（会社名や電話番号などの値）は渡されないのが残念です。ワークフロー内で作成されたレコードの値を使いたい場合は、別途Integration Serviceアクティビティパッケージを使って、値取得する必要があります（UiPathEventObjectIdをキーにしてレコード取得）。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/f14e10f6-b62e-e2dc-b892-f044196e8734.png" width=50% alt="OCジョブ2.png">

:::note info
参考：ワークフロー内でIntegration Serviceを使用する場合は、別途アクティビティパッケージをダウンロード・インストールします。
Salesforceの場合は、UiPath.Salesforce.IntegrationService.Activitiesです。SFDC系アクティビティパックは複数存在するので紛らわしいです。UiPath.Salesforce.Activitiesではありません。
![ワークフロー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/d93ca5ed-930d-f442-7e3b-f02a0b1e70ce.png)

:::

# おわりに
いかがだったでしょうか。割と簡単だったと思います。
外部サービスのイベントをトリガにできることにより、更に自動化の幅が広がるかと思うので、積極的に活用していきたいプロダクトだと思いました（通常のStudioやRobotのライセンスにIntegration Serviceの無償枠が付いているようです）。

本記事は以下の公式情報を参照しています。

https://docs.uipath.com/integrations/lang-ja/docs/triggers