この記事はSalesforce 開発者向けブログ投稿キャンペーンへのエントリー記事です。
Salesforce 開発者向けブログ投稿キャンペーン 第4弾 開催のお知らせ
[2] Salesforce のコーディング開発
概要
-
Salesforce Spring'21でゲストユーザの下記権限が削除されます。
- 編集
- 削除
- すべてのデータの変更
- すべてのデータの参照
非推奨ではありますが、どうしてもゲストユーザに編集・削除を実行させたい場合のプラクィス紹介になります。
組織での動作検証を必ず行ってください。
こちらの方法は2020/12時点での対処方法です。今後のアップデートでこちらの記事で紹介した方法が対応不可になる可能性があります。
参考
Spring ’21 リリース以降では、ゲストユーザに「編集」、「削除」、「すべてのデータの変更」、「すべてのデータの参照」の権限を割り当てることはできなくなります。
HowTo
- 編集・削除を行いたいオブジェクトのId + 編集したい項目がある場合は対象の項目も含めてクエリします。
- クエリしてきたオブジェクトを
オブジェクト.clone(false, true, true, false)
でクローンし、インスタンス変数で保存します。
※クローンする際にはclone(preserveId, isDeepClone, preserveReadonlyTimestamps, preserveAutonumber)のpreserveIdをfalseに設定し、クローンされるオブジェクトのIdをクリアにします。クリアしない場合は編集・削除を実行できません。
(Apex 開発者ガイド - SObject クラス) - クエリしたオブジェクトIdをインスタンス変数で保存します。
(Visualforce画面などではクローンしたオブジェクトを編集させてください。) - Update or Deleteする際には、インスタンス変数に保持しているオブジェクトIdを再度クローンしたオブジェクトに設定し直してUpdate or Deleteを実行してください。
サンプルコード
public without sharing class XXXXX {
public Account acc { get; set; }
private Id accId;
private static void queryAccount(Id param) {
List<Account> accList = [
SELECT
Id,
Name
FROM
Account
WHERE
Id = :param
];
if (accList.isEmpty()) { return; }
this.accId = objList[0].Id;
this.acc = objList[0].clone(false, true, true, false);
}
private static void updateAccount () {
this.acc.Id = this.accId;
update acc;
}
}
備考
もし何か修正点がございましたら、コメントでご教授いただければ幸いです。