見出し画像

外部ソリューション から Blue Prismを呼び出す(Salesforce編)

DXの取り組みが進むにつれ、単なる定型作業の自動化にとどまらない、複雑な業務プロセス全体の最適化を行うインテリジェントオートメーション(IA)の実現が必要となってきています。
その中には人の判断や作業も含まれており、BluePrismでは、IAを実現するためのプラットフォームとして、新たにChorus, UX BuilderといったBPMプラットフォームを提供する予定(2024年5月現在)です。
加えて、自動化自体もこれまでのようなアプリケーションを操作するだけの単純な自動化では不十分であり、双方向のインタラクション、つまり外部のソリューションからBlue Prismへの接続も必要となってきます。

今回は、そんな外部ソリューションから Blue Prism に接続する方法の一例として、Salesforce から BluePrism に連携する方法を紹介します。
※本手順は Blue Prism API が導入されており、Blue Prism が Salesforce から接続できる Blue Prism API と Authentication Server の URL を有していることを前提とします。

Salesforce上で開発する方法はいろいろありますが、今回は下記の3つを使用します。

  1. 指定ログイン情報
    接続先にログインするための情報を記録します。URLおよびOauth 2.0に関連した情報を登録します。

  2. 外部サービス
    接続先に対してどんな操作を行うかを定義されます。
    今回は直接設定せず、フローの中で設定します。

  3. フロー
    処理の流れをノーコードでプログラムすることができます。

指定ログイン情報

指定ログイン情報では、Blue Prism APIの宛先とAuthentication Serverの接続情報を登録します。

事前準備

Blue Prism接続時に用いる認証情報として、サービスアカウントとそのシークレットを準備します。

以下のリンク先を参照し、Blue Prism Hubからサービスアカウントを登録し、表示されるシークレットの値を記録します。
この際、アクセス許可としてBlue Prism APIを追加します。

参考: サービスアカウント (blueprism.com)

Blue Prismのユーザーとサービスアカウントを同期させていると、インタラクティブクライアントのユーザー管理画面に追加したサービスアカウントが表示されます(同期させていない場合は下記のリンク先を参考にしてください)。

参考: Authentication Server構成 (blueprism.com)

Blue Prismで操作するための権限が必要なので、サービスアカウントに権限を割り当てます。

これで準備は完了です。
以降の手順はSalesforce上で行います。

外部ログイン情報の登録

先ほど作成したサービスアカウントとAuthentication Serverの接続先の情報をSalesfroceに登録します。
登録は、Salesforceの「外部ログイン情報」に行います。

Salesforceにログインし、設定画面を開き、セキュリティ>指定ログイン情報を開きます。
その後、「外部ログイン情報」タブを開き、「新規」ボタンから外部ログイン情報を作成します。

各項目に情報を入力し、「保存」ボタンを押します

  • 表示ラベル: 任意の値

  • 名前: 任意の値

  • 認証プロトコル: OAuth2.0

  • 認証フロー種別: クライアントの秘密によるクライアントログイン情報フロー

  • 範囲: 空欄

  • IDプロバイダーURL: Authentication ServerのURLを指定
    */connect/tokenを末尾につける

  • リクエストボディでクライアントログイン情報を渡す: チェック

その後、サービスアカウントの情報をプリンシパルに追加します。
表示された画面の中のプリンシパルの項目の「新規」ボタンを押し、以下を入力して「保存」ボタンを押します。

  • パラメーター名: 任意の値

  • 連番: デフォルトの値

  • クライアント ID: サービスアカウントのID

  • クライアントの秘密: サービスアカウントのシークレット

設定したプリンシパルはユーザーには使用できないようになっているので、権限設定をする必要があります。
下記のリンク先を参考にし、実行するユーザーに権限付与をしてください。

参考: Enable External Credential Principals (salesforce.com)

指定ログイン情報の登録

指定ログイン情報にはBlue Prism APIの接続先URLを設定します。
先ほど登録した外部ログイン情報も連携させます

指定ログイン情報を開き、「新規」ボタンを押し、以下の入力を行い「保存」ボタンを押します

  • 表示ラベル: 任意の値

  • 名前: 任意の値

  • URL: Blue Prism APIのURLを指定

  • 外部ログイン情報: 先ほど作成した外部ログイン情報の名前を選ぶ

上記以外はデフォルトで問題ありません。

設定が完了したら保存します。
設定完了後、それぞれ下記のようになります。

フロー

Salesforceのフローは、Salesforce組織や外部システムで情報を収集、更新、編集、作成するプロセスを自動化するためのノーコードツールで、Blue Prismとの連携を設定することも可能です。
今回はレコードが操作されたときに実行されるレコードトリガーフローを作成します。

新規フローの作成とトリガーの設定

設定メニューからプロセスの自動化 > フロー を選択し、右上の「新規フロー」ボタンを押します。

今回はレコードが操作されたときに実行される「レコードトリガーフロー」を作成します。

レコードトリガーフローでは、レコードを作成、更新、または削除したときに起動するもので、オブジェクト、トリガー、エントリー条件などは任意に設定していただければよいですが、外部のソリューションであるBlue Prismに接続するためには非同期で処理を実行する必要があります。

非同期処理を設定するためには画面最下部の以下の項目にチェックを入れます。

  • トリガーレコードの元のトランザクションが正常にコミットされた後に外部システムにアクセスするには、非同期に実行パスを含めます。: チェックを入れる

非同期に実行フローができるので、そこにアクションを追加します。

アクション(Blue Prismへのコールアウト)の作成

非同期に実行フロー中の 「+」 ボタンをクリックし、Blue Prismへの接続を行うアクションを追加します。
表示されたメニューの中から「アクション」を選択し、「HTTPコールアウトを作成」をクリックします。

「HTTPコールアウトを作成」からBluePrismに接続する外部サービスを自動で作成することができます。
「名前」を任意の値に指定し、「指定ログイン情報」で先に作成したものを選択することで接続先のURLが自動で表示されます。

今回はワークキューにアイテムを追加する以下のAPIを使用します。
https://bpdocs.blueprism.com/bp-7-3/ja-jp/bp-api/7-3/api-spec-7-3-0.html#tag/ワークキュー/operation/createWorkQueueItems

APIの接続情報を以下のように入力し、「次へ」を押します。

  • 表示ラベル: 任意の値

  • メソッド: POST

  • URLパス: /workqueues/{workQueueId}/items/batch

  • workQueueIdのデータ型: 文字列
    *workQueueIdの項目はURLパスを入力し、他の項目を選択すると表示されます

次にリクエストの内容を定義します。
「サンプルJSON要求」の項目にJSON形式のサンプルを貼り付け、「確認」ボタンを押すだけで定義することが可能で、サンプルのJSONは、通常、Blue Prism APIのリファレンスなどから確認できます。

ただし、ワークキューへアイテムを追加するAPIに記載されているサンプル(createWorkQueueItemsなどに記載)は、アイテムの列名の定義がないため、そのままでは動作せず、画像の赤枠の箇所を変更する必要があります。

  • 以下は実行可能なサンプルで列名としてItem1を指定しています

[
  {
    "data": {
      "rows": [
        {
          "Item1":{
            "valueType": "Text",
            "value": "Value1"
          }
        }
      ]
    },
    "deferredDate": "2020-10-02T12:34:56+01:00",
    "priority": 3,
    "tags": [
      "Example tag 1",
      "Example tag 2"
    ],
    "status": "Example status",
    "sla": 7200,
    "processName": "Example process name",
    "isSuggested": false
  }
]

赤枠の部分を変更することで、複数列のアイテムの追加や一回のリクエストで複数のアイテムを追加することも可能です。
以下にいくつかサンプルを記載します。

  • 2つの列のアイテム

リクエスト結果
         "rows": [
            {
               "Item1": {
                  "valueType": "Number",
                  "value": 321
               },
               "Item2": {
                  "valueType": "Date",
                  "value": "2020-10-02T12:34:56+01:00"
               }
            }
         ]
  • 2件のキューアイテムを追加

リクエスト結果
      "rows": [
        {
          "Item1":{
            "valueType": "Number",
            "value": 321
          }
        },
        {
          "Item2":{
            "valueType": "Date",
            "value": "2020-10-02T12:34:56+01:00"
          }
        }
      ]

「確認」ボタンを押してデータ構造が登録されたことを確認したら「保存」を押します。

次にレスポンスの定義を行います。
今回は「応答の例を使用」を選択し、「次へ」を押します。
*「スキーマ用に接続」は実際にリクエストを行い、その応答を基に定義するものです。

リクエストと同様にJSONのサンプルを「サンプルJSON応答」に入力し、「確認」ボタンを押してデータ構造が登録されたことを確認したら「保存」を押します。

{
  "ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ]
}

保存すると新規アクションの設定画面に戻るので、以下の項目を指定して「完了」を押します。

  • 表示ラベル: 任意の値

  • API参照名: 任意の値

  • キーworkQueueId: 対象のワークキューIDを指定
    *ワークキューIDは、BluePrismのデータベースをSSMSなどで開きBPAWorkQueueテーブルを確認する、SwaggerやPostmanから「環境内のワークキューのリストを取得する」を実行するなどで取得できます。

  • キーbody: 新規リソースを作成 *後述

キーbodyには新規リソースを作成して登録します。
項目をクリックするとメニューが開くので、「+新規リソース」を選択し、API参照名を指定して「完了」ボタンを押します。

ダイアログをすべて「完了」ボタンを押して閉じ、アクションの作成したら、次はbodyに値を連携する処理を行います。

リソースの追加

作成したbodyに連携する情報を設定する際、複数の値が設定できるコレクション変数を扱うのが複雑になるため、設定をやりやすくするために2つのリソースを作成します。

bodyはコレクション変数(複数のリソースをまとめたもの)であるため、そのうちの1つをリソースとして定義します。

ツールボックスを開き、「新規リソースを作成」をクリックします。

以下を指定して「完了」ボタンを押し、リソースを作成します。

  • リソース種別: 変数

  • API参照名: 任意の値(ここではbody1として設定)

  • データ型: Apex定義

  • 複数の値を許可(コレクション): チェックを入れない

  • Apexクラス: ExternalService_<外部サービス名>_<アクションの表示ラベル>_IN_body
    *外部サービス名、アクションの表示ラベルはHTTPコールアウト作成時に指定したもの

body内のrowもコレクション変数であるため、そのうちの1つをリソースとして定義します。

先ほどの手順を繰り返し、「新規リソース」ボタンを押し、以下を指定して「完了」ボタンを押し、リソースを作成します。

  • リソース種別: 変数

  • API参照名: 任意の値(ここではrowとして設定)

  • データ型: Apex定義

  • 複数の値を許可(コレクション): チェックを入れない

  • Apexクラス: ExternalService_<外部サービス名>_<アクションの表示ラベル>_IN_body_data_rows
    *外部サービス名、アクションの表示ラベルはHTTPコールアウト作成時に指定したもの

割り当て要素の追加

HTTPコールアウトで作成したアクションの前にbodyの中身を連携する「割り当て」要素を追加します。
フロー上の「+」ボタンをクリックして、「割り当て」を選択し、以下を入力して「完了」ボタンを押します。

  • 表示ラベル: 任意の値

  • API参照名: 任意の値

  • 変数値を設定(以下は例ですので、任意に変更してください)

    • 1行目
      *ワークキューの Item1列の値を設定します。
      ここでは、レコードのIDをワークキューに連携するように設定します。

      • 変数: {!row.Item1.value}

      • 演算子: 次の文字列に一致する

      • 値: {!$Record.Id}

    • 2行目
      *ワークキューの Item1列の型を設定します。

      • 変数: {!row.Item1.valueType}

      • 演算子: 次の文字列に一致する

      • 値: Text

    • 3行目
      *コレクション変数にrowを追加します。
      rowに対する変更はこれより上に追加します。

      • 変数: {!body1.data.rows}

      • 演算子: 追加

      • 値: {!row}

    • 4行目
      *コレクション変数にbody1を追加します。

      • 変数: {!body}

      • 演算子: 追加

      • 値: {!body1}

デバッグ

設定が完了後、動作を確認するためにデバッグを行います。

画面右上の「保存」ボタンを押し、以下の情報を入力して保存します。

  • 表示ラベル: 任意の値

  • API参照名: 任意の値

保存すると「デバッグ」ボタンが押せるようになるので、押します。

Blue Prismと連携する処理は非同期のパスです。
以下を入力して実行します。

  • デバッグ実行のパス: 非同期に実行

  • 開始条件の要件をスキップ: チェックを入れる

  • ケース: 任意のケースを選択

実行結果が表示されるので、アクション名の欄を開き、出力に2XXと表示されていることを確認します。

連携先のワークキューにもアイテムが追加されていることが確認できます。

動作に問題が無ければ「有効化」ボタンを押すことで、トリガー設定に基づき呼び出すことができます。

外部サービス

HTTPコールアウトで設定した内容は、外部サービスに登録されています。変数名やデータタイプなどを変更したい場合は、外部サービスから変更を行います。

外部サービスを開き、対象のアクションの「▼」ボタンを押して、「アクションを表示」を選択します。

「▼」ボタンを押して、「HTTPコールアウトアクションを編集」を選択することで、作成時と同じ画面を開くことができます。

最後に

いかがでしたでしょうか。
手順を見ただけでは難しく感じられるかもしれませんが、実際にやってみると思いのほか簡単にできるのではないかと思います。

ただ、今回の連携を行うためには Blue Prism が Salesforce から接続できるBlue Prism API とAuthentication の URL が必要な点にご注意ください。
上記の URL さえあれば、Developer Edition の Salesforce でも設定可能ですので、ぜひお試しください。