4.3.3.2.4. その他・アーカイブ処理の実装方法¶
アーカイブ処理の実装方法について解説します。
IM-Workflow のアーカイブ処理で、案件の情報が過去案件として退避されますが、intra-mart Accel Kaiden! 側で合わせて退避する必要があれば実装することになります。
サンプルとして、チュートリアルで作成したチュートリアルガジェットにアーカイブ処理を追加していきます。
コラム
IM-Workflow のアーカイブ処理では「テーブル名 + “yyyyMM”」のテーブルに退避しており年月ごとのテーブルが作成されますが、
intra-mart Accel Kaiden! 標準では退避テーブルは一つで、年月のカラムを保持します。
4.3.3.2.4.1. アーカイブ用のテーブルを用意¶
(過去案件)チュートリアルガジェットテーブル「ka99t_tutorial」のレイアウトは下記の通りです。
No. 論理名 物理名 型 長さ 必須 PK 1 システム案件ID system_matter_id varchar2 20 Y 1 2 ユーザデータID user_data_id varchar2 20 Y 2 3 ガジェットクラス gadget_class varchar2 100 Y 3 4 ガジェットインスタンス gadget_instance number 18,0 Y 4 5 ロケールid locale_id varchar2 50 Y 4 6 アーカイブ年月 archive_month varchar2 6 Y 4 7 ガジェットID gadget_id varchar2 220 Y 8 ガジェットバリエーション gadget_variation varchar2 100 Y 9 テキスト tutorial_text varchar2 1000 10 通貨コード tutorial_currency_cd varchar2 100 11 通貨名 tutorial_currency_name varchar2 1000 12 金額 tutorial_amount number 28,10 13 予備項目A extension_a varchar2 1000 14 予備項目B extension_b varchar2 1000 15 予備項目C extension_c varchar2 1000 16 予備項目D extension_d varchar2 1000 17 予備項目E extension_e varchar2 1000 18 予備項目F extension_f varchar2 1000 19 予備項目G extension_g varchar2 1000 20 予備項目H extension_h varchar2 1000 21 予備項目I extension_i varchar2 1000 22 予備項目J extension_j varchar2 1000 23 登録日時 entry_ts timestamp Y 24 登録者コード entry_user_cd varchar2 100 Y 25 更新カウンタ renew_cnt number 18,0 Y 26 更新日時 renew_ts timestamp Y 27 更新者コード renew_user_cd varchar2 100 Y
4.3.3.2.4.1.1. 解説¶
チュートリアルガジェットテーブル と比較すると、「ロケールID」「アーカイブ年月」「通貨名」が追加されています。
ロケールIDアーカイブ処理時にシステムロケール分のレコードを作成します。 アーカイブ年月アーカイブ処理を実施した年月を「YYYYMM」形式で格納します。 通貨名アーカイブ時点のマスタ情報を格納します。マスタ情報変更の過去案件情報に影響及ぼさないようにします。
4.3.3.2.4.2. S2JDBC-Gen自動生成ソース¶
(過去案件)チュートリアルマスタテーブルを作成後、S2JDBC-Gen にて以下のソースファイルを自動生成します。
- jp.co.slcs.kaiden2.tutorial.foundation.model.entity.Ka99tTutorial
- jp.co.slcs.kaiden2.tutorial.foundation.model.entity.Ka99tTutorialNames
- jp.co.slcs.kaiden2.tutorial.foundation.model.service.Ka99tTutorialCondition
- jp.co.slcs.kaiden2.tutorial.foundation.model.service.Ka99tTutorialService
4.3.3.2.4.3. Logicクラスの実装¶
チュートリアルガジェットのLogicクラスを修正します。変更個所のみを記載しています。(チュートリアルガジェットのロジックはこちら)/** * チュートリアルガジェット基底クラス(Logic). */ public abstract class AbstractGadgetTutorialLogicBase extends AbstractExpensePluginGadgetLogic { // 中略・・・ /** 過去案件削除処理時に実行されるメソッド. */ @Override public int arcMatterDelete(KaidenDto dto) throws KaidenSystemException, KaidenApplicationException { int rv = gadgetTutorialManager .removeAllArchive(super.convCriteriaForSqlDtoForArchive(super.getGadgetDto().imwPluginParameterDto)); return rv; } // 中略・・・ /** 初期表示用検索詳細処理. */ @Override protected Map<String, Object> selectBlockDatasForView(CriteriaForSqlDto criteria) { Map<String, Object> result = new HashMap<String, Object>(); if (StringUtil.isEmpty(criteria.systemMatterId) || (StringUtil.isEmpty(criteria.userDataId) && !criteria.searchFromArchiveFlag)) { // 新規申請の場合 result.put(BLOCK_KEY_TUTORIAL_TABLE, new ArrayList<GadgetTutorialManagerDto>()); } else { // 新規申請でない場合 result.put(BLOCK_KEY_TUTORIAL_TABLE, gadgetTutorialManager.selectView(criteria)); } return result; } // 中略・・・ /** 過去案件用検索詳細処理. */ @Override protected Map<String, Object> selectBlockDatasForArchive(CriteriaForSqlDto criteria) { Map<String, Object> result = new HashMap<String, Object>(); result.put(BLOCK_KEY_TUTORIAL_TABLE, gadgetTutorialManager.selectViewArchive(criteria)); return result; } // 中略・・・ /** 案件退避処理時の登録処理. */ @Override protected int matterArchiveRegister(KaidenDto dto, CriteriaForSqlDto criteria, Map<String, Object> dataMap) { @SuppressWarnings("unchecked") List<GadgetTutorialManagerDto> list = (List<GadgetTutorialManagerDto>) dataMap.get(BLOCK_KEY_TUTORIAL_TABLE); int rv = gadgetTutorialManager.matterArchiveRegister(criteria, list); return rv; } /** 退避済完了案件削除対象マネージャリストを返却. */ @Override protected List<PluginGadgetManager<? extends KaidenDto>> getDeleteTargetsForArchiveManagers() { List<PluginGadgetManager<? extends KaidenDto>> list = new ArrayList<PluginGadgetManager<? extends KaidenDto>>(); list.add(gadgetTutorialManager); return list; } // 中略・・・ }
4.3.3.2.4.3.1. 解説¶
アーカイブに関連するメソッドを実装します。
selectBlockDatasForArchive過去案件詳細画面表示時に実行されます。intra-mart Accel Kaiden! 基底クラスからcriteriaが渡されており、これがそのままManagerの検索条件となります。criteriaにセットされている情報は下記の通りです。
- システム案件ID
- ユーザデータID
- 検索基準会社
- ログインユーザのロケールID
- ガジェットクラス
- ガジェットインスタンス
- 検索基準日
matterArchiveRegisterアーカイブ処理時に実行されます。intra-mart Accel Kaiden! システムロケール数分繰り返し実行されます。intra-mart Accel Kaiden! 基底クラスから渡されているcriteriaの情報は下記の通りです。
- システム案件ID
- ユーザデータID
- ガジェットクラス
- ガジェットインスタンス
- ロケールID
- アーカイブ年月
dataMapには、過去案件用テーブルに登録するデータがセットされています。intra-mart Accel Kaiden! 基底クラスにて「システム案件ID」「ユーザデータID」を検索条件としてデータを取得した結果をセットしています。取得のメソッドはselectBlockDatasForViewを使用しています。コラム
「WEB-INF/classes/jp/co/slcs/kaiden2/extension_imw_constants.xml」にて、アーカイブ処理時に履歴データ(ユーザデータID違いのデータ)を退避するかどうかの設定ができます。履歴データも退避するよう設定されている場合は、上記の過去案件用テーブル登録データの取得条件からユーザデータIDがクリアされます。デフォルトは「履歴データは退避しない」に設定されています。
getDeleteTargetsForArchiveManagersアーカイブ処理時に実行されます。過去案件用テーブルにデータ登録後、チュートリアルガジェットテーブルのデータを削除するためのマネージャを返却しています。
4.3.3.2.4.4. Managerクラスの実装¶
チュートリアルガジェットのManagerクラスを修正します。変更個所のみを記載しています。(チュートリアルガジェットのマネージャはこちら)package jp.co.slcs.kaiden2.tutorial.foundation.manager.tutorial.impl; import java.util.List; import javax.annotation.Resource; import jp.co.slcs.kaiden2.base.foundation.util.CollectionUtil; import jp.co.slcs.kaiden2.extension_imw.foundation.manager.AbstractWfManager; import jp.co.slcs.kaiden2.extension_imw.foundation.manager.CriteriaForSqlDto; import jp.co.slcs.kaiden2.tutorial.foundation.manager.tutorial.GadgetTutorialManager; import jp.co.slcs.kaiden2.tutorial.foundation.manager.tutorial.GadgetTutorialManagerDto; import jp.co.slcs.kaiden2.tutorial.foundation.model.service.K99tTutorialService; /** * チュートリアルガジェットテーブルへの各種操作を提供するAPI. */ public class GadgetTutorialManagerImpl extends AbstractWfManager<GadgetTutorialManagerDto> implements GadgetTutorialManager { // 中略 /** サービスクラス. */ @Resource protected Ka99tTutorialService ka99tTutorialService; // 中略・・・ /** 過去案件検索. */ @Override public List<GadgetTutorialManagerDto> selectViewArchive(CriteriaForSqlDto criteria) { return super.selectListForViewForArchive(ka99tTutorialService, criteria); } // 中略・・・ /** 過去案件登録. */ @Override public int matterArchiveRegister(CriteriaForSqlDto criteria, List<GadgetTutorialManagerDto> dataList) { return super.entryArchive(ka99tTutorialService, criteria, dataList); } /** 過去案件処理時削除. */ @Override public int matterArchivePostDelete(CriteriaForSqlDto criteria) { return super.deleteNoUsedUserDataId(k99tTutorialService, criteria); } /** 過去案件一括削除. */ @Override public int removeAllArchive(CriteriaForSqlDto criteria) { return super.deleteNoUsedUserDataIdForArchive(ka99tTutorialService, criteria); } }
4.3.3.2.4.4.1. 解説¶
アーカイブに関連するメソッドを実装します。intra-mart Accel Kaiden! 内部の基底クラスの呼び出しで実装は完了します。基底マネージャの処理を簡単に解説します。
selectViewArchive(過去案件)チュートリアルガジェットテーブルから全アーカイブ年月分のデータを取得し返却します。検索条件にはLogicクラスから渡されるcriteriaを使用しています。ただし、検索条件のうちアーカイブ年月は明示的にクリアしています。 matterArchiveRegister(過去案件)チュートリアルガジェットテーブルにデータを登録します。登録の際、dataListの各登録データに対して、criteriaの「ロケールID」「アーカイブ年月」を補完しています。 matterArchivePostDeleteチュートリアルガジェットテーブルのデータを削除します。 removeAllArchive(過去案件)チュートリアルガジェットテーブルのデータを削除します。