技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Salesforce Platform Developer の資格維持

Salesforce の資格は一度とったら終了ではなく、定期的にスキルをアップデートしなければならないご様子。
これは、Trailhead にログインして、自分のステータスを見るときに

f:id:white-azalea:20210824215849p:plain

こんな感じで表示される。
更新に関しては下記のバッチを取ればいいらしい

trailhead.salesforce.com

Apex

WITH SECURITY_ENFORCED

SOQL のケツにつけることができる修飾句。
SELECT と FROM で列挙されている項目のアクセス権限がチェックできる。

権限がないと例外を起こすとのこと。
これ項目のアクセス権限の事前チェックしなくても良くなる系?

※ 多態項目は原則サポートされません。例外として Owner, CreatedBy, LastModifiedBy は除外され、適用できるとのこと。

プラットフォームイベントの再開

プラットフォームイベントを Apex トリガで受け取る際、何らかの理由(デバッグ中だったとか)でトリガをスキップしたい場合、これまではトリガを無効にしてイベント実行→復帰しなければならず、その間のイベントは永久にトリガで処理できなくなっていました。
が、 Winter21 からは任意の一時停止、復帰の他、復帰時に停止中に流れたイベントを再処理させることができるようになったと。

「プラットフォームイベント」のトリガ詳細から「Suspend」「Resume」でこれが可能になるとのこと。

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

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

昇格って言い回しが謎だけど多分「リリース」かな。
まぁ元より新しい物作るときは 75% のカバー率を要求されるので、得てしてこんなものかなと…

Messaging.CustomNotification

Messaging.CustomNotification クラスが新規に入った。
ユーザに簡単に通知を投げる手段のようだ。

[Salesforce]カスタム通知機能を使用 - コードワールド

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

これまでは DML (DB でいう CreateUpdateDelete)とか処理した後でコールアウト(外部APIのHTTP呼び出しの事)を実行できず、プラットフォームイベントも同様に DML とみなされていた。
が、Winter '21 から「すぐに公開」としていれば、DML操作とはみなされなくなる模様。

…あんま使った記憶ないけど(汗

LWC

track アノテーションの一部不要化

html 上で利用する変数に @track を入れておかないと、値の変更時に画面に適用されなかった…は過去の話。
Spring ’20 以降では、配列でなければ原則不要になりました。

…ってことは原則全変数で値の監視してるって事かな… Proxy オブジェクトラップとかデバッグ時に追いづらくて嫌なんやけど(汗

Lightning Message Service

Summer ’20 でGA

DOM (これは HTML のDOMな)全体の VF/Aura/LWC で通信を行う仕組み。
LWC で画面上の値を変更&保存したときに「おらーVF!Aura!おめーらが参照してるデータ更新されたで!」みたいな通知できるわけだ。

サンプルは Component Library らしい

Lightning Web コンポーネントのユーザ権限の確認

カスタム権限を設定しているとき、そのカスタム権限が現在のユーザで利用可能であるかどうかをチェックする機構が入ったとのこと。
因みにカスタム権限は これ 参照。

標準権限

import hasPermission from '@salesforce/userPermission/StandardPermissionName';

カスタム権限

import hasPermission from '@salesforce/customPermission/namespace__CustomPermissionName';

標準とカスタムで取得元違うの何なの…

項目レベルとオブジェクトレベルのセキュリティや安全なナビゲーション演算子

Security.StripInaccessible

Security.StripInaccessible を使って、指定した権限の無い項目や行をフィルタ出来る。

SObjectAccessDecision securityDecision =
       Security.stripInaccessible(AccessType.UPDATABLE,
             [SELECT Name, BudgetedCost, ActualCost FROM Campaign]
             );
// Print stripped records
for (SObject strippedAccount : securityDecision.getRecords()) {
    System.debug(strippedAccount);
}

簡易的な null の扱い

JavaScript から Apex に持ってきたのかな…これは使い勝手がいい

a?.b // Evaluates to: a == null ? null : a.b