Category Archives: Salesforce

FOR LOOP内でのSOQLを回避する方法

前書き 「Mapを使え。以上。」で終わりなのですが、あまりに味気ないので実際にありそうな具体例を二つご紹介いたします。 例1:Trigger.newに対するループ内のSOQLを回避する Bad Example ↑取引先に紐づく取引先責任者を取得するにあたって、forループ内でSOQL文を書いてしまっています。… Read More »

営業日ベースの日数判定ロジックの実装方法

前書き センスのない会社ほどよく実装したがる「営業日ベースで〇日後に通知送りたい」や「○営業日後の日付が自動で入力されるようにしたい」といった要件への対応方法 ※推奨代替案:シンプルに「〇日後」で実装して後は運用回避 実装方針 「日付」項目と「休日フラグ」項目を持った「休日カレンダー」カスタムオブジェクトを作成し、それを用いて営業日数計算を行う。 例えば、2021/07/01(木)の三営業日を取得したい場合は…… Read More »

開発者コンソールのログレベルを変更する

前書き 作り込まれている組織でない限りあまり操作する機会はないかもしれませんが、デバッグログレベルの変更方法を備忘録も兼ねてご紹介します。 詳細は公式ヘルプ記事「開発者コンソールのログの操作」をご参照ください。 最適なデバッグログレベルについて デバッグレベルは以下のレベルが下に行けば行くほど高く(=記録が詳細に)なっていきます。 NONE… Read More »

Database.rollback()の簡単解説(初心者向け)

前書き 初心者の方向けにDatabase.rollback()の仕様と使い方について簡単解説しますノ Database.rollback()とは? Database.rollback()メソッドを利用することで、Database.setSavepoint()によって事前登録されていたsavepointまで処理をロールバックすることが可能です。 例えば↓の例では、4行目のDatabase.rollback(sp)によって2行目のSavepointまでロールバックされ、「色々な処理B」がなかったことになります。 実務で一番多いユースケース… Read More »

ApexでレコードIDからオブジェクトを判定する

前書き やり方色々ありますが、今回下記の三つをご紹介します。 ①sObjectTypeの一致判定②オブジェクト名の一致判定③オブジェクトPrefixの一致判定 本記事で用いる例:レコードIDからContactかどうかを判定する 推奨:sObjectTypeの一致判定 非推奨:オブジェクト名の一致判定… Read More »

標準レポートタイプの命名規則

前書き 「商品が関連する商品(Opportunities with Products)」といったレポートタイプの名前(※下記画像で表示される名前)に関する規則を見ていきます。 命名の法則1 子がカスタムオブジェクトの場合「親… Read More »

特定プロファイルのユーザとしてApexテストを実行する方法

前書き 通常システムコンテクストで実行されるApexテストに関して、任意のユーザコンテクストでの実行を行いたい場合、System.runAs()メソッドを利用します。 例えば、PlatformライセンスのユーザとしてApexを実行した場合に問題が発生しないかどうかをテストしたい場合、テストクラス内でPlatformライセンスのユーザを生成したうえでrunAsメソッドを用いることにより、PlatformライセンスのユーザとしてApex Testを実行することが可能となります。 サンプルコード(権限セットなしの場合) サンプルコード(権限セットありの場合)