久しぶりのスーパーバッジ編です。
今回はApex Specialist。Apexについての知識が問われる内容です。
Lightning Component Framework Specialistの難易度が100だとしたら、Apex Specialistは15くらいでしょうか。
ボリュームも少なめです。
そのため、解説もこの1回のみとします。
まずは問題文の理解から
まずはスーパーバッジ攻略の上で、鬼門となる問題文の翻訳から。
今回もGoogle先生と海外未経験の感覚英語を駆使すると思いきや、
Salesforce Developers Japan Blogに解説と日本語訳が、これはかなり有り難いです!
(僕はこの存在を知らずに課題をやったので、早く知りたかった。。。)
むしろこのブログがいらないんじゃないかとなるかもしれませんが、
ここはよりスーパーバッジの課題に近づけた内容を記載したいと思います。
今回のメインとなるのは
このスーパーバッジで問われることは
- トリガ
- コールアウト
- スケジューラ
- テストクラス
以上の4つになります。
Apex SpecialistだけあってApexに関して様々な知識が問われますが、ビジネスロジックの作成がメインで、VisualForceやLightningコンポーネントを使用した画面周りは問われません。
画面がないぶん、かなり楽だと思います。
Step1 レコード作成の自動化
下準備かと思いきや、一番やることが多いです。
-
- 非管理パッケージのインストール
- Caseのラベル名をMaintenance Request に変更、ProductのラベルをEquipment変更
→Rename Tabs and Labels(タブと表示ラベルの名称変更)から変更する
- ページレイアウトのCase (HowWeRoll) Layout、Product (HowWeRoll) Layoutを全プロファイルに割り当てる
- CaseのTypeにあるRoutine Maintenanceが無効化されているので有効化する
また、Repairを値に追加する - 「パッケージに含まれるコンテンツを利用して」とあるので、MaintenanceRequestHelper.clsとMaintenanceRequest.triggerを使用して
クローズ時に新しいCaseを作成する処理を入れる。
clone関数を使うとやりやすいです。
※ラベルの変更を伴うので、言語はEnglishにしておきましょう
Step2 Salesforceデータと外部システムの同期
コールアウトの実行です。
WarehouseCalloutServiceクラスにコールアウトする処理を行い、EquipmentにUpsertします。
Upsertする際、SalesforceIdではなく、Warehouse_SKUをキーとします。
- リモートサイトの設定
リモートサイトURLに「https://th-superbadge-apex.herokuapp.com」を設定 - WarehouseCalloutServiceクラス、runWarehouseEquipmentSyncメソッドの実装
→非同期かつコールアウトを伴う処理のため、@future(callout=true)を宣言する - JSON変換用のクラスがあるとベター
- 開発コンソールでWarehouseCalloutService.runWarehouseEquipmentSync()メソッドを実行
成功すると、EquipmentにデータがUpsertされる
Step3 同期のスケジュール
ここはスケジュールの自動化部分。
すぐ終わります。
-
- WarehouseSyncScheduleクラス修正、implementsにSchedulableを入れる。
executeメソッドはWarehouseCalloutServiceクラスのrunWarehouseEquipmentSync()メソッドを呼び出すだけなので瞬殺 - 作成したスケジュールクラスをスケジューリングする
- WarehouseSyncScheduleクラス修正、implementsにSchedulableを入れる。
毎日0:00に起動するようにセット
Step4〜6 テストクラス作成
ここからは、Step1〜3で作成したクラスのテストクラス作成になります。
InstallationTestsクラスにテストケースを作ります。
クリア条件はカバレージが100%になること。
特にコールアウトのテストはMockを使用しないと100%にならないので、Mockの使い方Test.setMockを扱えるようにしましょう。
スケジュールのテストも必要なので、System.scheduleを使用しましょう。
本来は指定した時刻での起動となりますが、Test.startTest()とTest.stopTest()で囲むことで、即時実行されるのでそれを使います。
- Step1〜3で作成したクラスのテストをInstallationTestsクラスに作成する
- コールアウトのテストでは、WarehouseCalloutServiceMockを作成する
- カバレージが100%をにする
これにて、スーパーバッジ取得です!
ポイントもごっそり入るので、トレイルヘッドのランクアップにもなります。
上級デベロッパー試験目的でなくても取りやすいスーパーバッジなので、是非挑戦しましょう!
コメント
Apex Specialistの記事参考にさせていただきました。
ありがとうございます。
1点質問なのですが、
Step1の[challengeを確認]ボタンを押した際、
「セキュリティは大丈夫か?(一瞬だったので、正確な文は見ていないです。)」
のようなアラートが表示されました。
こちらのアラートは表示されましたでしょうか。(他のStepでは表示なし)
表示されていない場合、私のやり方が悪いので見直そうと思います。
記事を見ていただきありがとうございます!
そうですね、僕の時はアラートは出てきませんでしたね。
Salesforceのバージョンや環境によって振る舞いが異なることもあるので、もしまた出てきたら教えてください。