LoginSignup
1
2

Salesforce FlowからSalesforce APIをCallするまでの手順

Last updated at Posted at 2024-01-24

はじめに

  • Winter'24からフローからAPIコールアウトができるようになった
  • 相当複雑でなければApexをいちいち書かなくて良くなった
  • コールアウトやってみた系の記事は多いのだが、外部サービスへのコールアウトが多く、Salesforce APIを組織からコールアウトするHow toが少なかったため作成

1. 接続アプリを作成する

  • API Call時の認証アプリを作る
  • Salesforce APIは認証が必須のため
  • 例はOAuth設定を有効化し、選択したOAuth範囲を いつでも要求を実行フルアクセスとしている
  • コールバックURLは作成時はなんでもよい(あとで変更する)
  • 作成後、コンシューマーキーと秘密を取得(コピー)しておく

image.png

2. 認証プロバイダの作成

  • 接続アプリで使用する認証プロパイダーの作成
  • 接続アプリで指定したコンシューマーキーと秘密、OAuthの範囲を指定する

image.png

  • 作成したら、下記の[Salesforce 設定]のコールバックURLを1.接続アプリのコールバックURLに設定しておく

image.png

3. 外部ログイン作成

  • 設定 > 指定ログイン情報のタブから外部ログイン情報を先に作成する
  • 認証プロバイダーは2.で作成したものを使用(そして認証プロトコルはOAuth 2.0)

image.png

3-1. プリンシパルを作成

  • ID種別: 指定ユーザとして作成

image.png

  • 設定された認証プロバイダーを使って[認証]を行う
  • 正しく設定されていれば、認証状況が認証済みになる

image.png

4. 指定ログイン作成

  • フローでのコールアウトで使用するURIと3.で作成した外部ログイン情報を設定する

image.png

Connect REST APIのInstace名について

  • 今回、例としてScheduling APIを設定した。例えばこちらのAPIになるのだが、リソースがhttps://yourInstance.salesforce.com/services/data/v59.0/connect/scheduling/waitlist-checkinという風になっており、このyourInstanceが何なのかハマってしまった。
  • 単純に設定 > 私のドメイン > 現在の [私のドメイン] の URL でよかったオチである
  • 下記のような方法もあるらしく、参考にどうぞ
curl
curl -X POST 'https://yourInstance.my.salesforce.com/services/oauth2/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'grant_type=client_credentials' \--data-urlencode 'client_id=3MVG9wt4IL4O5wvIwuDUz4YUlU.pQ2qL9PA5YrVvkAxtBkMRcDwEDN9inEg3ujTTrZRbl2KnRD7F8iFxxxxx' \--data-urlencode 'client_secret=B5E4AA8F293C052D96C9010866AAXXXXXX6E4A16CA5250806BE943A5F1E7360'
return. IDは適当にしてある
{"access_token":"00D5i000002OxQr!ARQAQF3EywD2Pzde2D7_ie.vZTZY3sG95ExZ6z.Gn8hFR3o.DiWgOBdGhKJWGEAT7IMBCk1zslR.9Pqboxaz_rBgFzDbpA1B","signature":"QrLexiLQ8PN0ncptHASq/iMwhSydslmbimq7A1YV5R8=","instance_url":"https://yourInstance.my.salesforce.com","id":"https://login.salesforce.com/id/00DXXXXXXXXXX/005XXXXXXXXXXXXXXX","token_type":"Bearer","issued_at":"1705988512338"}%   
  • この instance_urlが間違いなくyourInstanceの値となります
  • ずっと my.をつけ忘れていて数時間彷徨った

{"error":"invalid_grant","error_description":"no client credentials user enabled"}が発生したとき

  • クライアントログインフローの実行ユーザが設定されていない.
  • helpを参照して接続アプリケーションの実行ユーザを指定する
  • 接続アプリケーション内の[ポリシーを編集]を押さないとこの設定箇所は見えないので注意.

5. あとはフローをゴニョゴニョ作成

6. フローを使用するユーザに対しての権限セットを作成して割り当てする

6.1. プリンシパル設定

  • 3-1.で作ったプリンシパルを、[外部ログイン情報プリンシパルアクセス]に追加しておく

image.png

6.2. オブジェクト設定

  • [ユーザの外部ログイン情報]の参照権限を付与する

image.png

6.3. APIアクセス権限の付与

  • システム権限の[APIの有効化]をONにする

image.png

7. おまけ: Postmanの設定

  • Salesforce APIを試したい時は、まずPostmanの設定から入る方も多いのではないでしょうか。しかし、そこまでAPIAPIしていない生活だと、Postman開くたびに環境が変わると設定を忘れるので、メモしておきます

7-1. 接続アプリを作成する

  • これは上記1.の接続アプリを同じ手順

7-2. Salesforce APIをForkするか、ForkしたCollectionsを選択

  • ForkするURLなどはこちら
  • [Authorization]タブを選択し、Type: OAuth 2.0を選択
  • Callback URLはブラウザで認証にしておけばSalesforceのWebログイン画面で認証
  • {{url}}https://login.salesforce.com
  • {{clientid}}は接続アプリケーションのコンシューマーキー
    • 上記は[Variables]に設定されている
  • Scopeはapiとする
  • [Get New Access Token]ボタンをクリック

image.png
image.png

  • 認証に成功すると、Access Tokenが保存されるため、任意の名前をつけて保存

7-3. 対象のAPIのURIなどを設定、開く

  • [Authorization]タブのTokenにて、先ほど作成したTokenを選択

image.png

  • Bodyにパラメータを詰めて[Send]でいけるはず

参考情報

  • とても助かりました

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2