見出し画像

【SFDC】Advanced Apex Specialist

なんとか年内に取得するべく、ようやくここまで来ました。

キャプチャ

1つ目、2つ目はnoteにも書きましたが、Auraは忘れてた・・・
会議管理アプリは書くほどのことはなく、むしろ難易度としてはApex Specialistより下だろうというレベルなので記録しなくても良しとする。

いざ、Advanced Apex Specialistに着手。

日本語サイトを探す

はい、これ一番大事。
英語力がないくせに「なるべく英語で頑張ろう」とかやると、結局苦しむので親切な人を探す方が絶対効率いい。
今回はこちら。Auraのときにもお世話になりました。さすがです。

あと、こちらも。単なる翻訳ではなく、気を付けるポイントを書いてくださっているので気付きに繋がり、とても役立ちました。

私の性格的に、完璧にやってChallenge1回で突破というのは絶対に無理なので、ちょっとやってはChallengeし、エラーを見てまた進めていくという手段を取りました。

Challenge1

いきなり「Challenge 1を完了したら」と書いてあったので、「え、管理パッケージ入れたら完了ってこと??」と思って一応CheckChallengeをクリックしてみたものの、、、「Please ensure that the Select One label was created.」と。
まぁ、それはそうですよね。真面目にやりましょう。。。

カスタム表示ラベル、定数、カスタムメタデータ型、カスタムメタデータレコードを作成し、再度Check。すると、今度は「Ensure that you create the DEFAULT_ROWS constant and that it is an immutable property.」と。定数はpublic必須のようです。

public static final Integer DEFAULT_ROWS = 5;

あと、PriceBookレコードってどれだよと思い、STANDARD_PRICEBOOK_IDを空欄にしておいたら、「Ensure the STANDARD_PRICEBOOK_ID constant returns the expected value.」とも言われました。すでにレコードがあるから、そのIDを指定しないとダメなんですね。

Challenge2

OrderHelperクラスのコメントを参考にしつつ、なんとなく実装して、あとはエラーメッセージが教えてくれることを期待してChallenge。

「Ensure that orderHelper runs as the system.」
そもそも起動していない??
と思い、ログを見ると
[30]|e|"common.apex.runtime.impl.DmlExecutionException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, Product2 is not enabled for feeds: []"|0x4ae09fa9
理由がよくわからないけど、「Feed Tracking」でProductをOnにしてトリガは正常終了するようになったことを確認。

再Challenge。
「Ensure that orderHelper runs as the system.」

もはや何のヒントもない残念なエラーメッセージです。。。ググってみると、「with sharing」が良くないという情報を発見。別に関係ないじゃんと思いつつ、一応やってみました。

再々Challenge。
「We couldn't find the 'Inventory Announcements' Chatter Group. Please ensure that the group was created and try again.」
いや、作れって言われてないし・・・と思いつつ、やってみると成功。ふに落ちないけど、次に進むことにします。

Challenge3

ここはなんかもうゴリゴリと書いていくしかない感じでした。
ここまで3時間くらいかかっているので、思ったよりも苦戦しています。

Challenge4

ここはテストデータを作るクラスを埋めていくだけなので簡単でした。
手間取ったのは各オブジェクトの必須項目がわからんということだけ。
ググれば参考になるコードがたくさんあるので、ここは問題なし。

Challenge5

今度はテストコード作成。こちらも簡単。ラッキー。・・・・と思いきや、Challengeが全然通らない。
ググると、まさにこれ。

でも、書いてあるソースコードの内容はほとんど同じなので疑問は解消せず。「これでOKだったら意味わからん」と思いつつ、一応上記を参考に直してみると、、、クリアでした。しかも、一気に直してしまったから、元のコードのどこがダメだったのかもわからず仕舞い。
この謎のせいで数時間を無駄にしてしまったので、無理やり気持ちを切り替えて次に進みます。

Challenge6

指定されたクラス、トリガのコメントに沿ってコードを埋めるだけでした。
ConnectAPIが全然わからないので多少苦労したもののググって解決するレベルで、Challengeは1発成功。初の失敗なしw

Challenge7

OrderExtensionクラスを完成させろという超ざっくり指令です・・・
仕方ないので、OrderExtensionクラスを上から埋めていくことに。

ここで出会ったエラーは「Ensure that you implement all the pagination methods using the corresponding StandardSetController methods.」でした。
ちゃんと使ってるんだけどなと思いつつログを見ると、「System.AssertException: Assertion Failed: ext.getTotalPages() did not return the expected result.」が出ていて、なんだかページ数が違う模様。しかし、計算が間違っているとは思えないので、ググる。

これを見ると、どうやらProductのレコード数が多いとダメみたいなので、12レコードにしました。(10にしたら少ないと言われたので12)
あとは、コンストラクタにorderItemMap設定処理が抜けていて、「既存レコードがあるときの処理がダメ」的なことを言われた。これはごもっともだったので、処理を追加してクリアできました。

Challenge8

Create Unit Testsに書いてあることをやってRunAllしたところ、ChartHelperのカバレッジが足りなかったので、Product2Testsクラスに追加して、再Challenge。

成功しました!!

キャプチャ

これで条件は満たしたことになるけど、勝手に資格が付与されるんだろうか?TrailheadとTrailblazerとWebassessorと、何がどう紐づいているのかよくわからないので、しばらくは様子見。

とにかくこのSuperBadgeが取れてよかった!今年の目標達成!

ーーーーーーーーーーーー
追記
1時間くらい経ってから、Trailblazerのプロファイルを見てみたら資格が追加されていました。

キャプチャ


この記事が気に入ったらサポートをしてみませんか?