LoginSignup
0
0

More than 3 years have passed since last update.

Salesforce Spring ’21 以降で削除されるゲストユーザーの編集・削除権限を回避して、ゲストユーザーで編集・削除を実行する方法

Last updated at Posted at 2020-12-28

この記事はSalesforce 開発者向けブログ投稿キャンペーンへのエントリー記事です。
Salesforce 開発者向けブログ投稿キャンペーン 第4弾 開催のお知らせ

[2] Salesforce のコーディング開発

概要

  • Salesforce Spring'21でゲストユーザの下記権限が削除されます。

    • 編集
    • 削除
    • すべてのデータの変更
    • すべてのデータの参照
  • 非推奨ではありますが、どうしてもゲストユーザに編集・削除を実行させたい場合のプラクィス紹介になります。

  • 組織での動作検証を必ず行ってください。

  • こちらの方法は2020/12時点での対処方法です。今後のアップデートでこちらの記事で紹介した方法が対応不可になる可能性があります。

参考

Spring ’21 リリース以降では、ゲストユーザに「編集」、「削除」、「すべてのデータの変更」、「すべてのデータの参照」の権限を割り当てることはできなくなります。

HowTo

  1. 編集・削除を行いたいオブジェクトのId + 編集したい項目がある場合は対象の項目も含めてクエリします。
  2. クエリしてきたオブジェクトをオブジェクト.clone(false, true, true, false)でクローンし、インスタンス変数で保存します。
    ※クローンする際にはclone(preserveId, isDeepClone, preserveReadonlyTimestamps, preserveAutonumber)のpreserveIdをfalseに設定し、クローンされるオブジェクトのIdをクリアにします。クリアしない場合は編集・削除を実行できません。
    (Apex 開発者ガイド - SObject クラス)
  3. クエリしたオブジェクトIdをインスタンス変数で保存します。
    (Visualforce画面などではクローンしたオブジェクトを編集させてください。)
  4. 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;

    }
}

備考

もし何か修正点がございましたら、コメントでご教授いただければ幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0