Salesforce API連携入門(SF→外部システム編)

概要

Salesforceから外部システムのAPIを叩く方法についてご紹介致します。

今回は、SFで取引先レコードが作成されたら、外部システムにもそれをPOSTするという例を手掛かりとして解説していきます。

方法

①外部システム側のAPI認証情報を取得する。

APIを叩く際のリクエストの形式を確認します。

  • エンドポイントURL
  • APIトークン
  • APIキー
  • HTTPメソッド
  • コンテンツタイプ
  • BODYの形式

②Calloutロジックを開発する。

APIを叩くCallout ClassをApex TriggerやFlowから呼び出します。

Callout Classは非同期にする必要があるため、@futureをつけるかQueueableインターフェースを利用するかのどちらかです。

今回はApex TriggerからCallout Classを呼び出す場合のサンプルコードを紹介します。

Trigger Classサンプル

trigger AccountPostTrigger on Account (after insert) 
	for(Account record :trigger.new){
		JSONGenerator gen = JSON.createGenerator(true);

		gen.writeStartObject();      
		gen.writeStringField('name', Name);
		gen.writeEndObject();    

		String jsonS = gen.getAsString();

		AccountApiPost.makeApiPost(jsonS);                  
            }
}

※実際にはfor文の中でfutureメソッドを呼び出すのはアンチパターンですが、今回は最低限必要なコードのみご紹介しております。

Callout Classサンプル

public class AccountApiPost{
        @future(callout=true)
        public static void makeApiPost(String jsonS){
                Http http = new Http();
                HttpRequest request = new HttpRequest();
                request.setEndpoint('https://api.test.co.jp');
                request.setMethod('POST');
                request.setHeader('Content-Type', 'application/json');
                request.setHeader('Authorization', 'APIトークン');
                request.setHeader('x-api-key', 'APIキー');
                request.setBody(jsonS);
                HttpResponse response = http.send(request);
                if (response.getStatusCode() == 200 || response.getStatusCode() == 201) {
                    System.debug('API linkage was successful: ' +
                        response.getStatusCode() + ' ' + response.getStatus()+ ' ' + response.getBody());
                } else {
                    System.debug('The status code returned was not expected: ' +
                    response.getStatusCode() + ' ' + response.getStatus()+ ' ' + response.getBody());
                }
        }
}

※現実のコードではfutureメソッドの引数に配列を取ります。

Salesforce

Posted by regardie