Postman : Salesforceで使う時の処理手順(Salesforceの接続環境を切り替える)

[Postmanのまとめに戻る](https://qiita.com/Keiji_otsubo/items/84098dc24465d5787ea6)


# トークンの取得 (新しいトークンを取得することによって Playground を Postman に接続します。)

1. Salesforceの環境にログインします。
2. Postman Web アプリケーションにログインします。
3. コレクションを選択します
4. Authorizationタブをクリックして、下にスクロールすると Get New Access Tokenがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/46140345-57d4-d2fd-6a6a-245f06110cf6.png)

5\. Get New Access Tolenをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b469096c-59d5-f3bc-b79f-e72e32e92539.png)

6\. Salesforceの認証画面で認証します。

7\. instance_url が Trailhead Playground を指していることを確認します。このURLをコピーします。 ＜－－重要です。
もしかしたら、lightning.force.comがmy.salesforce.comになっているかもしれませんが、このURLを使います。

:::note
コレクション変数の_endpointがmy.salesforce.com でなく、lightning.force.comで終わっている場合はエラーになります
:::

8\. Use Tokenをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/94ffb58b-cdc3-bb1d-9d46-7546da401c9f.png)

9\. Variables タブをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ecac0969-6e48-278c-5881-a38c34d6e496.png)

_endpoint 行の CURRENT VALUE 列に、**手順 7 でコピーした instance_url 値を貼り付けます。**

入力箇所がよく分からん。　先頭にカーソルをもっていく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f0157be0-797f-57b1-1f9c-69a2488e9568.png)

10\.  Saveボタンをクリックします。

どこにある？　色が薄くて探しにくい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d83e9ba7-4645-c8b3-4b84-88a458204a41.png)

何か変更した時だけ機能するようです。

**Salesforceの接続先を変えるたびに_endpointをinstance_urlを変更しないといけませんね。**

# 自動的に_endpointを変更できないのか？


testのタブに以下を設定しましたが、うまく置き換わりませんでした。pm.responseじゃないよね。

```
pm.test("An instance url is returned", () => {
   pm.expect(pm.response.json()).to.have.property('instance_url')
   pm.expect(pm.response.json().instance_url).to.be.a('string')
   pm.collectionVariables.set('_endpoint', pm.response.json().instance_url)
})
```

探してみると環境変数が使えそうです。

+ [How to set Postman's Authorization property in headers via variables to a value of Null / None?](https://stackoverflow.com/questions/56874767/how-to-set-postmans-authorization-property-in-headers-via-variables-to-a-value)
+ [徹底解説：Postmanの変数の利用ガイド](https://apidog.com/jp/blog/what-is-variables-in-postman-and-how-to-use-it/)

以下のように、playgrandと本番環境の二つを定義します。
接続先に合わせて、クリックしておけば_endpointが上書きされるみたいです。
これで接続先を変えるたびに_endpointの値を設定する手間が省けました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/cb97fc35-7581-a54c-74d6-8f423926a180.png)

# コードを使用した Salesforce へのログイン

+ [コードを使用した Salesforce へのログイン](https://help.salesforce.com/s/articleView?id=sf.domain_name_login_code.htm&type=5)

**推奨: [私のドメイン] のログイン URL**

[私のドメイン] のログイン URL には、会社固有の [私のドメイン] の名前が含まれます。[私のドメイン] の名前は一意であるため、[私のドメイン] のログイン URL を使用するとセキュリティが一層強化されます。

システム管理者は [私のドメイン] の設定を介して、SOAP API コールで組織の [私のドメイン] のログイン URL を使用したログインを要求する場合があります。また、組織が別のインスタンスに移行しても、このログイン URL は引き続き機能します。

こうした理由から、[私のドメイン] のログイン URL を使用してコードで組織にアクセスすることをお勧めします。

コードで [私のドメイン] のログイン URL を使用する場合、1 つの考慮事項があります。[私のドメイン] の名前を変更した場合 (ブランド名や会社名が変更された場合など)、[私のドメイン] のログイン URL が変更されます。この状況では、コード内の以前の [私のドメイン] のログイン URL への参照を更新するまで、コードは機能しません。

API インテグレーションでは、ログイン要求で返された metadataServerUrl または serverURL の値を使用します。Apex で [私のドメイン] のログイン URL のホスト名を取得するには、System.DomainCreator クラスの getOrgMyDomainHostname() メソッドを使用します。[私のドメイン] の変更後にこれらのメソッドは引き続き動作します。

**デフォルトの Salesforce ログイン URL**

デフォルトの Salesforce ログイン URL (本番組織および Developer Edition 組織の場合は https://login.salesforce.com、Sandbox の場合は https://test.salesforce.com) がコード内で適切に機能します。これらの URL は、組織が別のインスタンスに移行して [私のドメイン] の名前が変更されたときでも、引き続き機能します。

ただし、これらのデフォルトのログイン URL には、会社固有の [私のドメイン] の名前が含まれないため、セキュリティは強化されません。また、システム管理者は [私のドメイン] の設定を介して、SOAP API コールで組織の [私のドメイン] のログイン URL を使用したログインを要求する場合があります。その設定が有効になっている場合、これらのデフォルトのログイン URL は SOAP API コールでは機能しません。

**インスタンス化された Salesforce URL**

コードを使用するかユーザーとして Salesforce にログインする場合、インスタンス化された URL はお勧めしません。組織が別の Salesforce インスタンスに移行すると、インスタンス化された URL を使用したコードが機能しなくなります。コード内にインスタンス化された URL がある場合は、[私のドメイン] のログイン URL またはデフォルトの Salesforce ログイン URL に置き換えてください。