4.1.3. サーバサイド¶
本項では、マスタメンテナンスのサーバサイドのプログラミング方法について解説します。
4.1.3.1. マスタメンテナンスActionクラスプログラミング¶
マスタメンテナンスActionクラスのサーバサイドプログラミングについて解説します。
4.1.3.1.2. マスタメンテナンス初期表示処理¶
プログラミング例/** * チュートリアルマスタメンテナンス(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. キーワード検索対象カラム返却¶
プログラミング例/** キーワード検索対象カラムを返却. */ @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. 国際化対応フィールド返却¶
プログラミング例/** 国際化対応するフィールドを返却. */ @Override protected List<String> getI18nTargetField() { // 国際化対応するフィールドをサブクラスより返却します return Arrays.asList("tutorialName"); }コラム
チュートリアルマスタメンテナンスでは「チュートリアル名称」が国際化対応フィールドです。
4.1.3.2.4. 入力データ返却¶
プログラミング例/** 登録・更新用の入力データをサブクラスより返却. */ @Override protected Map<String, Object> getInputData(AbstractMasterMaintenanceForm form) { // 登録・更新用の入力データをサブクラスより返却します return JsonUtil.getMap(form.updateDataJson, Arrays.asList("inputArea")); }コラム
“inputArea”はJSPに記載した入力データエリアのキーです。
4.1.3.2.5. サーフィス定義マップ返却¶
プログラミング例/** サーフェス定義マップを返却. */ @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)にてバリデーションが実施されます。コラム
バリデーション定義については バリデーション を参照してください。