スーパーバッジ攻略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%も狙えます。
ハンズオンの途中ですが、だいぶ長くなったので、今回はここまでとしましょう。
次で一気に終わらせる予定です。

コメント