スーパーバッジ攻略 Data Integration Specialist②

スーパーバッジ攻略Data Integration Specialist編第2回です。
前回ななんだかんだで設定作業で終わってしまったので、いよいよハンズオンから入っていきます。

スポンサーリンク

Step1 アウトバウンドのアプリケーションと連携のセキュリティの設定

ここは、前回の設定の段階で完了しています。

Step2 インバウンドの連携のセキュリティの設定

これも、前回の設定の段階で完了しています。

Step3 Salesforceの商談データとSquare Peg Accountingにある外部システムとの同期

ここからようやくソースコードに手を入れます。
このステップでやりたいことは、外部システムとの連携です。
もっと詳細に言うと、Opportunity更新時にプロセスビルダー経由で、内部クラスの非同期ジョブ内RESTを使って外部システムSquare Peg Accountingと連携させるといった一連の処理を行う必要があります。
いくつかキーワードを散りばめましたが、これらを実現するには、少し細工する必要があります。

ProjectCalloutServiceクラス

まずは、ProjectCalloutServiceクラスの実装から。
このクラスは、プロセスビルダーから呼ばれるためのpostOpportunityToPMSメソッドと、内部で実行するための非同期ジョブQueueablePMSCallクラス(内部クラス)が必要です。
プロセスビルダーから呼ばれるメソッドには、@InvocableMethodアノテーションを記載する必要があります(関連情報)。

内部クラスであるQueueablePMSCallクラスには、非同期ジョブであるQueueableだけでなく、コールアウトを要するため、Database.AllowsCalloutsインタフェースも記述が必要です。

ProjectCalloutServiceクラスの一部を記載すると、こんな感じになります。
TODOのところは埋めてみましょう。
ProjectCalloutService.cls

public class ProjectCalloutService {
    
    @InvocableMethod(label='PostOpportunityToPMS')
	public static void PostOpportunityToPMS(List<Id> oppIdList){
        // 商談を取得し、QueueablePMSCallジョブを起動
        List<Opportunity> oppList = [
            Select id,Name,Account.Name,closeDate,Amount,StageName
            From Opportunity Where ID IN :oppIdList];
        ID jobID = System.enqueueJob(new QueueablePMSCall(oppList));
    }
    
    private class QueueablePMSCall implements Queueable, Database.AllowsCallouts {
        private List<Opportunity> oppList;
        private String token;
        
    	private QueueablePMSCall(List oppData) {
            oppList = oppData;
            
            // TODO カスタム設定ServiceTokensからトークン取得
            // token = xxxxxxx;
        }
        
        public void execute(QueueableContext context) {

            Http http = new Http();
            HttpRequest req = new HttpRequest();
            req.setMethod('POST');
            
            // TODO Named Credentialで作成したProjectServiceを使用する
            req.setEndpoint('callout:XXXXXXXX');
            
            // 取得したトークンをセット
            String authorizationHeader = 'Bearer ' + token;
            req.setHeader('Authorization', authorizationHeader);
            req.setHeader('Content-Type', 'application/json');
            
            // POSTするJSONを作成
            String json = '';
            for(Opportunity opp : oppList){
                json += createJson(opp);
            }
            
            // リクエスト送信
            req.setBody(json);
            HttpResponse res = http.send(req);
            
            // TODO ステータスコードに応じてStageNameを更新する
        }
        
        // POSTするJSONを作成
        private String createJson(Opportunity opp){
            String json = '{';
            json += '"opportunityId": "' + opp.id + '",';
            // TODO 以下、サンプルを参考に作成する
            json += '}';
            return json;
        }
    }
}

プロセスビルダー

ProjectCalloutServiceクラスを作成したら、次はプロセスビルダーです。
Opportunityを軸に条件を満たしたものが、ProjectCalloutServiceクラスのPostOpportunityToPMSメソッドをコールします。
細かい設定は必要ですが、作成したフローはこんな感じになるはずです。
ProjectCalloutServiceクラスをプロセスビルダーに取り込み
条件やアクションの中身は各自考えてみてください。
今まで追加した設定を当て込めば要件を満たせます。

Step4 アウトバウンドApex REST呼び出しのロジックのテスト

ここは、テストクラスの作成です。
ProjectCalloutServiceクラスのカバレージを90%以上にすればOKです。
コールアウトを伴うので、モックが必要です。
ProjectCalloutServiceMockに成功パターン、ProjectCalloutServiceMockFailureに失敗パターンを用意すればOKです。
合格が90%以上ですが、100%も狙えます。

ハンズオンの途中ですが、だいぶ長くなったので、今回はここまでとしましょう。
次で一気に終わらせる予定です。

コメント