Salesforceに接続する
PlaidCloudをSalesforce組織に接続して、標準オブジェクトとカスタムオブジェクト(取引先、商談、リード、キャンペーン、独自の __c オブジェクトなど)をプロジェクトのテーブルに抽出します。オブジェクトの一覧、項目の一覧、各列の型は、すべて組織自体から読み取られます。
Salesforce側の作業は管理者の担当であり、全体の工程を左右します。必要なのは、External Client App、アプリが実行ユーザー(Run As) として動作する連携ユーザー、そしてアプリのコンシューマーキーとシークレットです。このガイドでは、この設定、PlaidCloud接続、テスト、最初の抽出の順に説明します。
Salesforceで次のものが必要です。
- セットアップでアプリを作成し、そのポリシーを編集できる管理者。
- 連携が実行ユーザーとして使用するSalesforceユーザー。個人のログインではなく、専用の連携ユーザーを使用してください。PlaidCloudが読み取るすべてのデータはこのユーザーの権限の範囲に限定され、個人のアカウントは役割の変更に伴って変わるためです。
- API有効を持つ、そのユーザーのプロファイルまたは権限セット。
PlaidCloudでは、接続を作成する権限(Tools > Connections)が必要です。
My Domainホストを確認する
Section titled “My Domainホストを確認する”すべてのSalesforce組織にはMy Domainがあり、その名前がPlaidCloudの接続先ホストになります。Salesforceでセットアップに移動し、クイック検索で My Domain を検索すると、ドメイン名が表示されます。ホストは、そのドメイン名に .my.salesforce.com を付けたものです。
| 組織 | ホスト |
|---|---|
| 本番環境およびDeveloper Edition | mycompany.my.salesforce.com |
| サンドボックス | mycompany--uat.sandbox.my.salesforce.com — ドメイン名、--、サンドボックス名、続けて .sandbox.my.salesforce.com |
login.salesforce.com や test.salesforce.com ではなく、組織固有のMy Domainホストを使用してください。クライアントクレデンシャルフローは特定の組織に対して認証を行いますが、汎用のログインホストは組織を特定しません。
External Client Appを作成する
Section titled “External Client Appを作成する”-
セットアップで、クイック検索から External Client App Manager を検索し、
New External Client Appをクリックします。 -
External Client App Name(たとえば
PlaidCloud Integration)、自動入力される API Name、Contact Email を入力します。Distribution State はLocalのままにします。 -
API (Enable OAuth) の下で、OAuthを有効にします。このフローではどこにもリダイレクトされませんが、フォームでは Callback URL が必須です。プレースホルダーとして
https://localhost/を指定して問題ありません。 -
OAuthスコープ Manage user data via APIs (api) を追加します。RESTおよびBulk APIはこのスコープを通じて読み取ります。
-
アプリを作成します。
-
アプリを開いて Policies に移動し、
Editをクリックします。クライアントクレデンシャルフローを有効にし、Run As に連携ユーザーを設定します。 -
同じ画面で Permitted Users を
Admin approved users are pre-authorizedに設定し、そのRun Asユーザーのプロファイルまたは権限セットを通じて、アプリをユーザーに割り当てます。 -
アプリの Settings > OAuth Settings に移動し、Consumer Key and Secret を開きます。Salesforceが本人確認を行った後、両方の値が数分間表示されます。安全な場所にコピーしてください。次の手順でPlaidCloudに貼り付けます。シークレットは、その後PlaidCloudから読み戻すことができません。
Run Asユーザーを選択する
Section titled “Run Asユーザーを選択する”クライアントクレデンシャルフローには対話的なログインがないため、アプリは1つのSalesforceのIDだけを持ちます。それが Run As 設定で指定されたユーザーです。この接続を通じてPlaidCloudが読み取るすべてのデータは、そのユーザーとして読み取られます。
そのユーザーは、次の点に注意して意図的に用意してください。
- 抽出するオブジェクトへのアクセス権を付与します。 プロファイルまたは権限セットを通じて、オブジェクトの参照権限と、選択予定の項目の項目レベルの参照権限を付与します。
- 必要な共有設定を付与します。 行レベルのアクセスは、組織の共有モデル(ロール階層、共有ルール、レコードの所有者)によって決まります。階層の下位にいる連携ユーザーには、営業オペレーションのユーザーに見えるレコードのごく一部しか見えません。
- API有効を付与します。 そうしないと、フローは認証すらできません。
- 日常的な管理作業には関与させません。 無関係な理由で権限が変更されるユーザーでは、保存済みのすべての抽出で返される内容が変わってしまいます。
実際にどのユーザーになっているかを確認してください。PlaidCloudの接続をテストはRun Asユーザーの名前を返します。これは、データを送り出す前に、アプリが誤ったIDを指していないかを確認する最も手軽な方法です。
Run Asユーザーがすべてを制限する
Section titled “Run Asユーザーがすべてを制限する”Run Asユーザーが抽出を制限する2つの方法は、失敗の現れ方が正反対です。ここは2度読む価値があります。
行レベルの共有は、何も知らせてくれません。 Run Asユーザーが参照できないレコードは、結果に含まれないだけです。エラーも警告もなく、除外された件数も表示されません。25万件のオブジェクトから40,000行を抽出した結果は、4万件のオブジェクトを完全に抽出した結果とまったく同じに見えます。Salesforceがそれらの行の存在を伝えないため、PlaidCloudはこの違いを検出できません。したがって、行数が少ないと思ったときは、ほかを調べる前に、Run Asユーザーのロール、共有ルール、レコードの所有者を確認してください。自分自身ではなく、Salesforceで同じユーザーとして実行したレポートと比較してください。
項目レベルのセキュリティは、はっきりエラーになります。 PlaidCloudは、送信するクエリで選択したすべての項目を明示的に指定します。そのため、Run Asユーザーが読み取れない項目があると、その項目名を示すエラーで抽出全体が失敗します。部分的なデータが格納されることも、気づかれないまま空白で返されることもありません。
この非対称性には実務上の影響があります。誰かが選択済みの1つの項目の項目レベルの参照権限を取り消した瞬間に、動作していた保存済みのステップが実行されなくなります。 ステップは変わっておらず、PlaidCloudも変わっていません。変わったのはRun Asユーザーの項目アクセスです。数か月間問題なく実行されていた抽出が、突然1つの項目名を示して失敗した場合は、これが原因です。Run Asユーザーにその項目の権限を戻すか、ステップでその項目のチェックを外してください。
接続を作成する
Section titled “接続を作成する”-
Tools > Connections を開き、
New Connectionをクリックします。 -
メニューから REST - Salesforce を選択します。
-
接続にアカウント名を付けます。たとえば
Salesforce Prodです。 -
ホストまたはIPアドレスに、前述の組織のMy Domainホストを設定します。
-
クライアントIDにアプリのコンシューマーキーを、クライアントシークレットにコンシューマーシークレットを貼り付けます。
-
セキュリティモデルを設定して、ワークスペース内で誰がこの接続を使用できるかを制御します。アクティブ(アクセスを許可) はオンのままにして、
Createをクリックします。
接続をスモークテストする
Section titled “接続をスモークテストする”Test Connection をクリックします。PlaidCloudは実際にトークン交換を行い、次の3つを報告します。
| 報告される内容 | 確認する点 |
|---|---|
| 組織ID | 意図した組織であること。サンドボックスの認証情報が本番環境に保存されていないかを確認する最も手早い方法です。 |
| APIバージョン | この組織がサポートする最新のバージョン。抽出は、必ずしもこのバージョンではなく、接続に固定されたバージョンで実行されます。 |
| Run Asユーザー | 個人や管理者ではなく、用意した連携ユーザーであること。 |
認証に失敗した場合は、クライアントIDとシークレットの再入力が求められます。シークレットは、保存後に読み戻すことができないためです。
最初のオブジェクトを抽出する
Section titled “最初のオブジェクトを抽出する”-
ワークフローに Salesforce: オブジェクトのクエリ ステップを追加します。
-
Salesforce接続と環境を設定し、オブジェクトを選択します。最初は
Accountから始めてください。 -
いくつかの項目にチェックを入れます。格納名列には、Salesforce自身の項目メタデータに基づいて、各列が実際に持つ型が表示されます。
Idは常に含まれます。 -
ターゲットテーブルに作業用のテーブルを設定して、ステップを実行します(ワークフロー内で1つのステップを実行するを参照)。
ターゲットテーブルにデータが格納されていれば、アプリ、Run Asユーザーのアクセス権、ホストがすべて正しいことが確認できます。出力を基に構築する前に、ステップ自体のリファレンスページをお読みください。抽出ウィンドウは1回だけ実行されること、削除は追跡されないこと、一部の項目型はまったく抽出できないこと、そして無人で繰り返し実行する取得では、ワークフロー変数を通じて各ウィンドウをウィンドウタグで指定することが説明されています。
トラブルシューティング
Section titled “トラブルシューティング”| 表示される内容 | 原因 | 対処 |
|---|---|---|
| アプリの作成直後に認証が失敗する | アプリがSalesforceのインフラ全体にまだ反映されていません。 | 何も変更せずに数分待ってから、もう一度テストします。 |
| 貼り付けたばかりの認証情報で認証が失敗する | コンシューマーキーまたはシークレットの前後に空白が含まれた状態でコピーされたか、別のアプリのシークレットです。 | Settings > OAuth Settings > Consumer Key and Secret から両方をコピーし直して、貼り付け直します。 |
| 認証が失敗するが、アプリは正しく見える | アプリのポリシーが編集されておらず、クライアントクレデンシャルフローが有効になっていないか、Run As ユーザーが設定されていません。 | アプリの Policies を開き、Edit をクリックして、クライアントクレデンシャルフローを有効にし、Run As を設定します。 |
| PlaidCloudからは認証に失敗するが、同じアプリが自分のマシンからは動作する | IP制限。 Run Asユーザーのプロファイルのログイン IP 範囲、またはIP制限の緩和がないアプリが、トークン交換を拒否しています。Salesforceはこれが原因であるとは知らせてくれません。 | このアプリのIP制限を緩和するか、PlaidCloudの送信元アドレスをプロファイルのログイン IP 範囲に追加します。テナントのアドレスについては、PlaidCloudサポートにお問い合わせください。 |
| 動作していた接続が認証されなくなる | Run Asユーザーが無効化された、アプリが取り消された、または組織内でセッションやIPのポリシーが変更されました。 | Salesforceでユーザーとアプリを確認します。PlaidCloudは古いトークンを破棄して自動的に1回再試行するため、失敗が続く場合は組織内で実際に変更が行われています。 |
| 抽出が1つの項目名を示して失敗する | Run Asユーザーが、選択した項目の項目レベルの参照権限を失いました。 | Run Asユーザーがすべてを制限するを参照してください。 |
- Salesforce: オブジェクトのクエリ — 抽出ウィンドウや拒否される項目型を含む、ステップの完全なリファレンス
- Salesforce RESTコネクタ — 接続フィールドのリファレンス
- 接続の作成と管理 — 編集、テスト、環境ごとの設定、アクセス制御