Salesforseから外部サービスをコールアウトする案件がいくつか続き
指定ログイン情報の知見がたまったので設定方法とよくあるエラーをまとめました!
※旧の指定ログイン情報は非推奨となっているため、当記事ではWinter '23にリリースされた新の指定ログイン情報についての内容となります。
※プロファイルでの権限付与は廃止される予定なので、権限セットで権限付与する方法で記載しています。
指定ログイン情報とは?
Apexでエンドポイントとかヘッダーとかごにょごにょ書かないで設定に外出ししよ。ってやつです。
コード見せたほうが早いのでサンプルをば
HttpRequest req = new HttpRequest();
req.setHeader('Content-Type', 'application/json');
req.setHeader('Accept', 'application/xml');
req.setEndpoint('https://piepie-sample.com/api/v1/data');
req.setMethod('POST');
req.setBody('{"aaa":"bbbbbb"}');
HttpResponse res = new Http().send(req);
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:piepie');
req.setMethod('POST');
req.setBody('{"aaa":"bbbbbb"}');
HttpResponse res = new Http().send(req);
指定ログイン情報なしの2~4行目が req.setEndpoint('callout:piepie');
の1行になります。
URLや認証情報をハードコードしないので管理しやすいですね。
指定ログイン情報の設定方法
1.外部ログイン情報の作成
設定で「指定ログイン情報」の画面を開き、外部ログイン情報を作成する
setHeader()にあたる部分はカスタムヘッダーに登録する
2.指定ログイン情報の作成
設定で「指定ログイン情報」の画面を開き、指定ログイン情報を作成する
1で作成した外部ログイン情報を設定する
3.コーディング
setEndpoint()の引数は 'callout:★★★'
のようにする。
★★★は2で設定した名前を入れるが大文字と小文字を区別するらしいので注意。
また、以下のように文字列連結も可能
req.setEndpoint('callout:piepie' + '/piepie');
4.権限セットの作成とユーザへの割り当て
標準オブジェクトのユーザの外部ログイン情報の参照権限を付与する
その他、このコールアウトをする機能(オブジェクト・Apex・VF)の権限一式をこの権限セットに入れるのもおすすめです。
やらなくていいこと「リモートサイトの設定」
外部連携といえば「リモートサイトの設定」ですが、指定ログイン情報を使用する場合は不要です。
よくあるエラー
設定は済んだのでいざ実行!ってしてみたら、なんかエラーになっちゃったシリーズ
検索してもなかなか出てこなかったのでメモしておきます(*'ω'*)
We couldn't access the credential(s). You might not have the required permissions, or the external credential "piepie_ext" might not exist.
原因
・権限セットがユーザに割り当てられていない
・権限セットに外部ログイン情報プリンシパルアクセスが追加されていない
The callout couldn't access the endpoint. You might not have the required permissions, or the named credential "piepie" might not exist.
原因
・権限セットに標準オブジェクト「ユーザの外部ログイン情報」の権限が付与されていない
→シス管には付与されているのでテストまで気づかないことがあり、、
参考