見出し画像

[Summer '24] 気になるリリースをピックアップ ~Apex関連~

こんにちは、荒武です。
Summer'24のリリースノートから気になるリリースをピックアップするシリーズ記事となります。
この記事では自分がSummer '24のリリースノートの中からApex関連で気になったトピックをピックアップして紹介します。
今回私がピックアップしたのは以下の4つになります。

  • Apex での 5 レベル親-子リレーション SOQL クエリのサポート

  • 拡張 SOQL クエリ結果のカーソルのサポートの使用 (ベータ)

  • より効率的な Apex スケジュール済みジョブの監視

  • Apex 例外メールの追加情報を使用した未対応の例外のより迅速な解決

Apex での 5 レベル親-子リレーション SOQL クエリのサポート

SOQLで最大5レベルまでの親子リレーションクエリを実行できるようになりました。親ルートから最大 4 レベルの深さの子リレーションを含めることができます。

List<Account> accts = 
[SELECT Name,
    (SELECT LastName,
        (SELECT AssetLevel,
            (SELECT Description,
                (SELECT LineItemNumber FROM WorkOrderLineItems)    
            FROM WorkOrders)    
        FROM Assets)    
    FROM Contacts)    
FROM Account];

拡張 SOQL クエリ結果のカーソルのサポートの使用 (ベータ)

カーソルはSOQLクエリの結果を分割するための仕組みです。カーソルを用いれば大規模なクエリ結果セットを効果的に扱えるようになります。

public class QueryChunkingQueuable implements Queueable {
    private Database.Cursor locator;
    private integer position;

    public QueryChunkingQueuable() {
        locator = Database.getCursor
                  ('SELECT Id FROM Contact WHERE LastActivityDate = LAST_N_DAYS:400');
        position = 0;
    }

    public void execute(QueueableContext ctx) {
        List<Contact> scope = locator.fetch(position, 200);
        position += scope.size();
        // do something, like archive or delete the scope list records
        if(position < locator.getNumRecords() ) {
            // process the next chunk
            System.enqueueJob(this);
        }
    }
}

検証してみて気になったこと

  • レコードの数を超えてfetchするとSystem.InvalidParameterValueException: Fetch beyond bound detectedエラーが出る

  • SOQLが返すレコードの数が0件のだとSystem.UnexpectedException: Salesforce System Error: 75195413-51791 (-791244442) (-791244442)エラーが出る

  • デフォルトでシステムモードで実行される。AccessLevel.USER_MODEを引数に渡すとユーザーモードで実行される


より効率的な Apex スケジュール済みジョブの監視

[すべてのスケジュール済みジョブ] ページから Apex ジョブをスケジュールしたり、cron 式を使用してスケジュールされているジョブを管理したりできるようになりました。また、スケジュール済みジョブに関連付けられた CronTrigger オブジェクトの ID を詳細リストに表示することもできます。

Apex 例外メールの追加情報を使用した未対応の例外のより迅速な解決

Apex コードで未対応の例外が発生したときに、例外が発生した組織、ユーザー、[私のドメイン] の名前が Apex 例外メールに含まれるようになりました。