LoginSignup
5
4

More than 1 year has passed since last update.

【Salesforce】Apex共通レスポンス基底クラス

Last updated at Posted at 2021-11-22

目的

LWCでApexクラスを呼出す基底クラスを作成する方法を紹介します。
LWCでApexクラスを呼出すときの返却値は主に正常系、警告系と異常系がありますので、そのパターンにより共通レスポンス基底クラスを作成します。

実装

BaseClass.cls
public abstract class BaseClass  {
    /**
     * LWCへのレスポンス.
     */
    public virtual class Response {
        //成功フラグ
        @AuraEnabled
        public Boolean success {
            get; set;
        }
        //エラーフラグ
        @AuraEnabled
        public Boolean error {
            get; set;
        }
        //メッセージ
        @AuraEnabled
        public String message {
            get; set;
        }
        //返却データ
        @AuraEnabled
        public Object data {
            get; set;
        }
    }

    /**
     * 成功時のレスポンス.
     */
    public class SuccessResponse extends Response {
       /**
         * メッセージなしの成功レスポンス.
         * @param {Object} data データ
         */
        public SuccessResponse(Object data) {
            this.success = true;
            this.error = false;
            this.message = null;
            this.data = data;
        }

        /**
         * メッセージ付きの成功レスポンス.
         * @param {Object} data データ
         * @param {String} message メッセージ
         */
        public SuccessResponse(Object data, String message) {
            this.success = true;
            this.error = false;
            this.message = message;
            this.data = data;
        }
    }
    /**
     * 警告のレスポンス.
     */
    public class WarnResponse extends Response {
        /**
         * データなしの警告レスポンス.
         * @param {String} message メッセージ
         */
        public WarnResponse(String message) {
            this.success = false;
            this.error = false;
            this.message = message;
            this.data = null;
        }
        /**
         * データ付きの警告レスポンス.
         * @param {Object} data データ
         * @param {String} message メッセージ
         */
        public WarnResponse(Object data, String message) {
            this.success = false;
            this.error = false;
            this.message = message;
            this.data = data;
        }
    }
    /**
     * エラーのレスポンス.
     */
    public class ErrorResponse extends Response {
        /**
         * データなしのエラーレスポンス.
         * @param {String} message メッセージ
         */
        public ErrorResponse(String message) {
            this.success = false;
            this.error = true;
            this.message = message;
            this.data = null;
        }

        /**
         * データ付きのエラーレスポンス.
         * @param {Object} data データ
         * @param {String} message メッセージ
         */
        public ErrorResponse(Object data, String message) {
            this.success = false;
            this.error = true;
            this.message = message;
            this.data = data;
        }
    }
}
Demo.cls
public with sharing class Demo extends BaseClass{
    @AuraEnabled
    public static Response demoMethod(String test) {
        try {
            Integer count = [SELECT count() FROM User];
            if (count > 0) {
                List<User>  result =  [SELECT Id, Name FROM User];
                return new SuccessResponse(result, '検索に成功しました。');
            } else {
                return new WarnResponse('データが存在しません。');
            }
        } catch (Exception e) {
            return new ErrorResponse('予期せぬエラーが発生しました。システム管理者へお問い合わせください。 ');
        }
    }
}
5
4
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
5
4