Platform デベロッパーの Apex の新機能の学習

学習の目的

この単元を完了すると、次のことができるようになります。

  • SOQL クエリで WITH SECURITY_ENFORCED を使用する。
  • ユーザインターフェースを使用してカスタムプラットフォームイベントへの Apex トリガ登録を管理する。
  • ロック解除済みパッケージをリリースする前にコードカバー率の要件を確認する。
  • Apex コードから直接カスタム通知を作成、設定、送信する。
  • プラットフォームイベントメッセージの公開後に Apex コールアウトを実行する。

Salesforce 認定資格

認定 Salesforce Platform デベロッパー資格を保有している場合、その認定資格を維持するためには期日までにこのモジュールを修了する必要があります。資格を維持するためのもう 1 つ重要な点は、Trailhead アカウントと Webassessor アカウントをリンクさせておくことです。

認定を受けることに関心がある場合は、Salesforce Platform デベロッパーの資格を参照してください。

Salesforce では多数の機能を強化しています。今回のリリースの機能強化の中でも重要なものを確認していきましょう。

注意: 誰でもこのバッジを取得できますが、このモジュールは Salesforce 認定 Platform デベロッパーの有資格者を対象としています。 

SOQL クエリの WITH SECURITY_ENFORCED を使用した項目レベルとオブジェクトレベルの権限チェックの有効化

新機能

Spring ’20 で、WITH SECURITY_ENFORCED を使用した SOQL クエリが正式リリースされました。WITH SECURITY_ENFORCED 句を使用して、Apex コードの SOQL SELECT クエリの項目レベルとオブジェクトレベルのセキュリティ権限を確認できます。WITH SECURITY_ENFORCED 句を使用すると、SELECT 句に FLS/CRUD 違反があるクエリがランタイムで失敗します。

そのしくみ

WITH SECURITY_ENFORCED 句を使用して、SOQL SELECT クエリの項目レベルとオブジェクトレベルのセキュリティ権限を確認できます。 

SELECT 句で WITH SECURITY_ENFORCED を使用して参照されている項目またはオブジェクトへのアクセス権限がユーザにない場合、権限が不十分であることを示す例外が発生し、データが返されません。 

例:

List<Contact> contactsWithSecrets = [SELECT name, social_security_number__c
FROM Contact WITH SECURITY_ENFORCED];

多態的な項目

WITH SECURITY_ENFORCED を使用して多態的な参照項目を照会するときの新しい制限があります。多態的な参照項目とは、複数のエンティティを参照できるリレーション項目です。

  • 多態的な項目のリレーションのトラバースは、WITH SECURITY_ENFORCED を使用したクエリではサポートされません。
  • ELSE 句と組み合わせた TYPEOF 式の使用は、WITH SECURITY_ENFORCED を使用したクエリではサポートされません。
  • 多態的な参照項目 OwnerCreatedByLastModifiedBy は、この制限から除外され、多態的なリレーションをトラバースできます。

WITH SECURITY_ENFORCED は API バージョンが 45.0 以降の Apex クラスまたはトリガで使用することをお勧めします。

ユーザインターフェースからのプラットフォームイベントトリガ登録の管理

新機能

ユーザインターフェースを使用してカスタムプラットフォームイベントへの Apex トリガ登録を一時停止や再開できるようになりました。一時停止されたトリガ登録を、一時停止中に公開されたイベントを一切失わずに、停止した場所の使用可能な最も古いイベントメッセージから再開できます。エラーの原因となったイベントメッセージや、不要となったメッセージをバイパスするには、登録を最新のイベントメッセージから再開します。 

Winter ’21 より前は、トリガを無効にする以外、登録を一時停止する手段がありませんでした。再び有効にすると、最新のメッセージから登録が再開され、未処理のイベントメッセージが失われていました。

そのしくみ

プラットフォームイベント詳細ページにアクセスするには、[設定] の [クイック検索] ボックスに「プラットフォームイベント」と入力し、[プラットフォームイベント] をクリックしてから、プラットフォームイベントをクリックします。トリガ登録を管理するには、プラットフォームイベント詳細ページの [登録] の下にリストされている Apex トリガの横の [管理] をクリックします。

プラットフォームイベントの登録者のリスト

登録詳細ページで、登録を管理できます。

登録詳細ページで登録を管理

一時停止した登録を再開できます。

登録詳細ページで登録を再開

ロック解除済みパッケージのコードカバー率の適用

新機能

コードカバー率の要件を満たすことで、ロック解除済みパッケージの Apex コードのテストカバー率が適切であることを検証できます。Winter ’21 以降、ロック解除済みパッケージを昇格してリリースするためには、Apex コードが 75% 以上というコードカバー率要件を満たす必要があります。

Winter '21 以降で作成されたパッケージバージョンのうち、このコードカバー率を満たさないものは、スクラッチ組織と Sandbox にしかインストールできません。Winter ’21 より前にリリース済み状態に昇格されたロック解除済みパッケージバージョンは、コードカバー率要件の対象外です。

そのしくみ

Salesforce CLI でコードカバー率を計算するには、force:package:version:create コマンド実行時に --codecoverage パラメータを使用します。 

Tooling API を使用してコードカバー率を計算するには、パッケージバージョンを作成するときに、Package2VersionCreateRequest オブジェクトの CalculateCodeCoverage 項目を true に設定します。

コードカバー率の計算時にパッケージバージョンの作成に時間がかかることがあるため、開発サイクルのどの時点でコードカバー率パラメータを含めるかを検討します。

Apex からのカスタム通知の送信

新機能

Messaging.CustomNotification を使用して、トリガなどの Apex コードから直接カスタム通知を作成、設定、送信します。カスタム通知を作成するために、Apex から API への HTTP コールアウトを実行しないようにします。新しい Apex の CustomNotification サポートを直接使用します。

この方法では必要なコード行が減り、API コールアウトや認証が複雑にならずに済みます。また、効率性が上がるため、特にトリガから通知を送信する場合や多数の通知を送信する場合に役立ちます。

そのしくみ

Messaging.CustomNotification クラスを使用すると、簡単に Apex からカスタム通知を作成して送信できます。 

CustomNotification を使用する場合、次の 2 種類のアプローチで通知を作成して設定できます。

  1. デフォルトのコンストラクタを使用してインスタンスを作成し、さまざまな setter メソッドを使用して通知の属性を設定する。
  2. インスタンスを作成し、コンストラクタのコール時に通知のパラメータを指定してパラメータも同時に設定する。

カスタム通知が設定されたら、send() をコールして通知を送信します。

 以下の例のコードスニペットは、1 つ目のアプローチを示しています。

 例:

デフォルトのコンストラクタを使用して、CustomNotification の新しいインスタンスを作成します。

Messaging.CustomNotification notification = new Messaging.CustomNotification();

通知に必要なコンテンツ、種別、対象を設定します。

notification.setTitle('Apex Custom Notification');
notification.setBody('These notifications are coming from inside Apex code.');
notification.setNotificationTypeId(typeId);
notification.setTargetId(targetId);

カスタム通知が設定されたら、send() をコールして通知を送信します。

notification.send(recipientsIds);

詳細は、『Apex 開発者ガイド』の「CustomNotification クラス」を参照してください。

プラットフォームイベントメッセージの公開後の Apex コールアウトの実行

新機能 

Winter ’21で、[すぐに公開] 動作が設定されているイベントでは、イベントメッセージを公開した直後に Apex コールアウトを実行できるようになりました。以前は、このようなイベントを公開しても、Apex コードからコールアウトを実行することができませんでした。すぐに公開されるイベントには、Apex DML ステートメントの制限とは異なる新しい制限があります。 

そのしくみ

[すぐに公開] 動作が設定されているイベントは、トランザクションが正常に完了したかどうかに関係なく、コールの実行時に公開されます。これらのイベントは、トラッキングやロギングに使用できます。

この変更により、これらのイベントがトランザクションの DML 操作の一部と見なされなくなるため、公開後の Apex コールアウトの実行を妨げることがなくなります。これらのイベントには、EventBus.publish() コール 150 件という新しい公開リミットが適用されます。[コミット後に公開] 動作が設定されているイベントでは、公開がトランザクションの DML 操作の一部と見なされるため、この変更は適用されません。これらのイベントの公開には、Apex DML ステートメントの制限が引き続き適用されます。そして、公開後には、引き続き Apex コールアウトを実行できます。

すぐに公開するためのコールの使用制限を追跡するには、次のメソッドを使用します。

Limits.getPublishImmediateDML(): すぐに公開するよう設定されたプラットフォームイベントで行われた EventBus.publish コールの数を返します。

Limits.getLimitPublishImmediateDML(): すぐに公開するよう設定されたプラットフォームイベントでコール可能な EventBus.publish ステートメントの合計数を返します。

リソース

無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる