スーパーバッジ攻略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メソッドをコールします。
細かい設定は必要ですが、作成したフローはこんな感じになるはずです。
条件やアクションの中身は各自考えてみてください。
今まで追加した設定を当て込めば要件を満たせます。
Step4 アウトバウンドApex REST呼び出しのロジックのテスト
ここは、テストクラスの作成です。
ProjectCalloutServiceクラスのカバレージを90%以上にすればOKです。
コールアウトを伴うので、モックが必要です。
ProjectCalloutServiceMockに成功パターン、ProjectCalloutServiceMockFailureに失敗パターンを用意すればOKです。
合格が90%以上ですが、100%も狙えます。
ハンズオンの途中ですが、だいぶ長くなったので、今回はここまでとしましょう。
次で一気に終わらせる予定です。
コメント