intra-mart Accel Kaiden! プログラミングガイド 第11版 2019-12-01

4.1.3. サーバサイド

本項では、マスタメンテナンスのサーバサイドのプログラミング方法について解説します。

4.1.3.1. マスタメンテナンスActionクラスプログラミング

マスタメンテナンスActionクラスのサーバサイドプログラミングについて解説します。

4.1.3.1.2. マスタメンテナンス初期表示処理

マスタメンテナンス機能の初期表示処理をアクションクラスのindexメソッドに実装します。

チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのアクションはこちら
  • プログラミング例
/**
 * チュートリアルマスタメンテナンス(Action).
 */
public class MasterTutorialAction extends AbstractTermMasterMaintenanceAction {
    
    // 中略・・・
    
    /** 入力ページパスを返却します. */
    @Override
    @Execute(validator = false)
    // @Authz(uri = "service://kaiden/master/tutorial", action = "execute")
    public String index() throws KaidenSystemException {
        // プロパティファイルからマスタメンテナンス機能の設定を読み込み
        MasterMainternanceSettingsReader reader = new MasterMainternanceSettingsReader();
        // 設定読み込み処理にActionクラスを引数に渡します
        masterTutorialDto.settings = new MasterMainternanceSettingsDto(reader.read(MasterTutorialAction.class));
        
        // 入力ページパスを返却します
        return super.index();
    }
    
    // 中略・・・
}
  • 解説
    マスタメンテナンス機能設定ファイルを読み込み、MasterTutorialDto.settingsにセットします。
    設定読み込み処理にチュートリアルマスタメンテナンスActionクラスを渡すことで、
    intra-mart Accel Kaiden!基底処理でチュートリアルマスタのマスタメンテナンス機能設定ファイルを特定し、読み込んでいます。

コラム

「アクションクラスの同一パッケージ」で「クラス名の先頭(Actionを除去) + “MasterMaintenanceSettings.xml”」が
マスタメンテナンス機能設定ファイルとして認識されます。

コラム

マスタメンテナンス機能設定ファイルの内容は「マスタメンテナンス機能設定ファイル 」を参照ください。

コラム

return super.index();はintra-mart Accel Kaiden!基底クラスが、intra-mart Accel Kaiden!共通のマスタメンテナンス画面JSPのパスを返却しています。

4.1.3.1.3. 各種処理

マスタメンテナンス機能の検索や登録に対応するメソッドに実装します。

チュートリアルのプログラムは intra-mart Accel Kaiden!基底クラスのメソッドを呼び出しているだけなので、
ここでは基底クラスの処理を紹介します。登録処理のみをピックアップします。
  • プログラミング例
    public String entry() {
        LogicResultDto result;
        try {
            result = getLogic().entryAjax(getForm());
        } catch (KaidenHaventAuthorityToCompanyException e) {
            result = LogicResultDto.makeErrorResult(e);
        } catch (KaidenDuplicationEntryException e) {
            result = LogicResultDto.makeErrorResult(e);
        }
        ResponseWriter.writeJSon(JSON.encode(result));
        return null;
    }
  • 解説
    マスタメンテナンスLogicクラスのメソッドを実行し、結果をJSON形式でレスポンスに出力しています。
    ExceptionのキャッチはAction処理で行っています。
    エラー結果をレスポンスに出力することで、クライアント処理はそれを解析し画面にエラーメッセージを表示します。

4.1.3.2. マスタメンテナンスLogicクラスプログラミング

マスタメンテナンスLogicクラスのサーバサイドプログラミングについて解説します。

4.1.3.2.2. キーワード検索対象カラム返却

マスタメンテナンスLogicクラスにキーワード検索対象カラム返却メソッドに実装します。

チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのロジックはこちら
  • プログラミング例
    /** キーワード検索対象カラムを返却. */
    @Override
    protected String[] getKeywordSearchTargetCol() {
        // プロパティファイルからマスタメンテナンス機能の設定を読み込み
        MasterMainternanceSettingsReader reader = new MasterMainternanceSettingsReader();
        MasterMainternanceSettingsDto settings;
        try {
            settings = new MasterMainternanceSettingsDto(reader.read(MasterTutorialAction.class));
        } catch (KaidenSystemException e) {
            throw KaidenRuntimeException.makeInstance(e);
        }
        // キーワード検索対象カラムをサブクラスより返却します
        return settings.searchTargetCol.toArray(new String[] {});
    }
  • 解説
    マスタメンテナンス機能設定ファイル 」で設定したファイルを読み込み、キーワード検索対象カラムの配列を返却しています。
    設定ファイルはActionクラスの初期表示処理で読み込んだファイルと同じものです。

コラム

チュートリアルマスタメンテナンスの設定ファイルでは「チュートリアルコード」、「チュートリアル名称」が返却されます。

4.1.3.2.3. 国際化対応フィールド返却

マスタメンテナンスLogicクラスに国際化対応フィールド返却メソッドに実装します。

チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのロジックはこちら
  • プログラミング例
    /** 国際化対応するフィールドを返却. */
    @Override
    protected List<String> getI18nTargetField() {
        // 国際化対応するフィールドをサブクラスより返却します
        return Arrays.asList("tutorialName");
    }

コラム

チュートリアルマスタメンテナンスでは「チュートリアル名称」が国際化対応フィールドです。

4.1.3.2.4. 入力データ返却

マスタメンテナンスLogicクラスに入力データ返却メソッドに実装します。

チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのロジックはこちら
  • プログラミング例
    /** 登録・更新用の入力データをサブクラスより返却. */
    @Override
    protected Map<String, Object> getInputData(AbstractMasterMaintenanceForm form) {
        // 登録・更新用の入力データをサブクラスより返却します
        return JsonUtil.getMap(form.updateDataJson, Arrays.asList("inputArea"));
    }

コラム

“inputArea”はJSPに記載した入力データエリアのキーです。

4.1.3.2.5. サーフィス定義マップ返却

マスタメンテナンスLogicクラスにサーフィス定義マップ返却メソッドに実装します。

チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのロジックはこちら
  • プログラミング例
    /** サーフェス定義マップを返却. */
    @Override
    protected Map<String, String> getSurfaces() {
        // サーフェス定義
        // 入力チェックエラー発生時のエラーメッセージラベルに使用します。
        Map<String, String> result = new HashMap<String, String>();
        result.put("companyCd", propertyHelper.getSurface(TutorialProp.S.COMPANY));
        result.put("tutorialCd", propertyHelper.getSurface(TutorialProp.S.TUTORIAL_CD));
        result.put("startDate", propertyHelper.getSurface(TutorialProp.S.START_DATE));
        result.put("endDate", propertyHelper.getSurface(TutorialProp.S.END_DATE));
        result.put("tutorialName", propertyHelper.getSurface(TutorialProp.S.TUTORIAL_NAME));
        return result;
    }
  • 解説
    サーフィス定義のMapを生成し、返却します。
    ここで生成したMapはManagerクラスのバリデートメソッドに渡され、発生したエラーメッセージのラベルに使用されます。

4.1.3.3. マスタメンテナンスManagerクラスプログラミング

マスタメンテナンスManagerクラスのサーバサイドプログラミングについて解説します。

4.1.3.3.1. 構成

構成については Manager を参照してください。

4.1.3.3.2. 各種API

マスタメンテナンスManagerクラスに各種APIを実装します。
intra-mart Accel Kaiden!標準版のマスタマネージャは以下APIを提供しています。
  • 機能一覧(非期間化マスタ、期間化マスタ共通)
機能概要 メソッド
主キー検索 select
主キー検索(認可設定無視) selectIgnoreAuthCompany
汎用検索 selectList
汎用検索(認可設定無視) selectListIgnoreAuthCompany
ロケール検索 selectLocales
ロケール検索(認可設定無視) selectLocalesIgnoreAuthCompany
参照検索 selectListWithReference
参照検索(認可設定無視) selectListWithReferenceIgnoreAuthCompany
キーワード検索 selectListKeywordFilter
キーワード検索(認可設定無視) selectListKeywordFilterIgnoreAuthCompany
有効化 toEnabled
有効化(認可設定無視) toEnabledIgnoreAuthCompany
無効化 toDisabled
無効化(認可設定無視) toDisabledIgnoreAuthCompany
登録 entry
登録(認可設定無視) entryIgnoreAuthCompany
削除 remove
削除(認可設定無視) removeIgnoreAuthCompany
更新 renew
更新(認可設定無視) renewIgnoreAuthCompany
  • 機能一覧(期間化マスタ専用)
機能概要 メソッド
期間検索 selectTerms
期間検索(認可設定無視) selectTermsIgnoreAuthCompany
基準日指定検索 selectListIncluedsSearchDate
基準日指定検索(認可設定無視) selectListIncluedsSearchDateIgnoreAuthCompany
期間分割 divideTerm
期間分割(認可設定無視) divideTermIgnoreAuthCompany
期間変更 moveTerm
期間変更(認可設定無視) moveTermIgnoreAuthCompany

コラム

intra-mart Accel Kaiden!マスタは「期間化マスタ」と「非期間化マスタ」の2種類が存在します。
開始日終了日を保持しているかどうかではありません。
・データ新規登録時、システムの開始日から終了日までの全期間のデータが、重複や間断なく連続して登録される。
・削除フラグを保持し、有効無効の切り替えを行うことができる
に該当すれば「期間化マスタ」、該当しなければ「非期間化マスタ」です。

コラム

各種APIの挙動については、それぞれのマスタマネージャのintra-mart Accel Kaiden! JavaDoc』を参照してください。

4.1.3.3.3. 重複チェックフィールド返却

マスタメンテナンスManagerクラスに重複チェックフィールド返却メソッドに実装します。
チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのマネージャはこちら
  • プログラミング例
    /** 重複チェック確認フィールドを返却. */
    @Override
    protected List<String> getDuplicationCheckField() {
        return Arrays.asList(new String[] {"companyCd", "tutorialCd"});
    }
  • 解説
    会社コードとチュートリアル名称を返却しています。
    Managerクラスの新規登録処理時、ここで返却するフィールドキーの重複チェック処理を intra-mart Accel Kaiden!内部の基底クラスにて行っています。

4.1.3.3.4. バリデート処理

マスタメンテナンスManagerクラスにバリデート処理メソッドに実装します。
チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルマスタのマネージャはこちら
  • プログラミング例
    /** 登録時入力チェック. */
    @Override
    public List<KaidenValidateResult> validate4Entry(List<?> dtoList, Map<String, String> surfaces) {
        if (dtoList == null) {
            throw KaidenIllegalParametersException.makeInstance();
        }
        return makeValidateExecuter(dtoList, surfaces, getValidateDefsDtoList4Entry()).executeAll(
                ErrorMode.ERROR_CONTINUE);
    }
    
    /** 更新時入力チェック. */
    @Override
    public List<KaidenValidateResult> validate4Renew(List<?> dtoList, Map<String, String> surfaces) {
        if (dtoList == null) {
            throw KaidenIllegalParametersException.makeInstance();
        }
        return makeValidateExecuter(dtoList, surfaces, getValidateDefsDtoList4Renew()).executeAll(
                ErrorMode.ERROR_CONTINUE);
    }
    
    /** 登録時入力チェック. */
    @Override
    public List<ValidateDefsDto> getValidateDefsDtoList4Entry() {
        List<ValidateDefsDto> result = new ArrayList<ValidateDefsDto>();
        result.add(new ValidateDefsDto("companyCd", VALID_REQUIRED));
        result.add(new ValidateDefsDto("companyCd", VALID_COMPANY_EXISTS, "companyCd", "", "true"));
        result.add(new ValidateDefsDto("tutorialCd", VALID_REQUIRED));
        result.add(new ValidateDefsDto("tutorialCd", VALID_MAX_LENGTH, "100"));
        result.add(new ValidateDefsDto("tutorialCd", VALID_KAIDEN_ID));
        result.add(new ValidateDefsDto("localeId", VALID_REQUIRED));
        result.add(new ValidateDefsDto("localeId", VALID_LOCALE));
        result.add(new ValidateDefsDto("tutorialName", VALID_REQUIRED));
        result.add(new ValidateDefsDto("tutorialName", VALID_MAX_LENGTH, "250"));
        result.add(new ValidateDefsDto("startDate", VALID_REQUIRED));
        result.add(new ValidateDefsDto("startDate", VALID_DATE));
        result.add(new ValidateDefsDto("endDate", VALID_REQUIRED));
        result.add(new ValidateDefsDto("endDate", VALID_DATE));
        result.add(new ValidateDefsDto("endDate", VALID_DATE_MIN, "startDate"));
        result.add(new ValidateDefsDto("deleteFlag", VALID_FLAG));
        return result;
    }
    
    /** 更新時入力チェック. */
    @Override
    public List<ValidateDefsDto> getValidateDefsDtoList4Renew() {
        List<ValidateDefsDto> result = new ArrayList<ValidateDefsDto>();
        result.add(new ValidateDefsDto("companyCd", VALID_REQUIRED));
        result.add(new ValidateDefsDto("companyCd", VALID_COMPANY_EXISTS, "companyCd", "", "true"));
        result.add(new ValidateDefsDto("tutorialCd", VALID_REQUIRED));
        result.add(new ValidateDefsDto("tutorialCd", VALID_MAX_LENGTH, "100"));
        result.add(new ValidateDefsDto("tutorialCd", VALID_KAIDEN_ID));
        result.add(new ValidateDefsDto("termCd", VALID_REQUIRED));
        result.add(new ValidateDefsDto("termCd", VALID_MAX_LENGTH, "50"));
        result.add(new ValidateDefsDto("termCd", VALID_KAIDEN_ID));
        result.add(new ValidateDefsDto("localeId", VALID_REQUIRED));
        result.add(new ValidateDefsDto("localeId", VALID_LOCALE));
        result.add(new ValidateDefsDto("tutorialName", VALID_REQUIRED));
        result.add(new ValidateDefsDto("tutorialName", VALID_MAX_LENGTH, "250"));
        result.add(new ValidateDefsDto("startDate", VALID_REQUIRED));
        result.add(new ValidateDefsDto("startDate", VALID_DATE));
        result.add(new ValidateDefsDto("endDate", VALID_REQUIRED));
        result.add(new ValidateDefsDto("endDate", VALID_DATE));
        result.add(new ValidateDefsDto("endDate", VALID_DATE_MIN, "startDate"));
        return result;
    }
  • 解説
    新規登録前にvalidate4Entryメソッド、更新前にvalidate4Renewメソッドが実行されることを想定しています。
    チュートリアルでは intra-mart Accel Kaiden!基底クラスにて新規登録時と更新時に呼び出されています。(そのためチュートリアルのLogicには記載がありません。)

    new ValidateDefsDto(“フィールドキー”, “バリデーションID”, 引数...)とすることで、バリデーションの定義ができます。
    バリデーション定義をリストにセットしていき、makeValidateExecuter(dtoList, surfaces, list)にてバリデーションが実施されます。

コラム

バリデーション定義については バリデーション を参照してください。