intra-mart Accel Kaiden! / プログラミングガイド

«  その他・ガジェット間通信の実装方法   ::   コンテンツ   ::   申請書ガジェットManagerクラスプログラミング  »

その他・アーカイブ処理の実装方法

アーカイブ処理の実装方法について解説します。
IM-Workflow のアーカイブ処理で、案件の情報が過去案件として退避されますが、intra-mart Accel Kaiden! 側で合わせて退避する必要があれば実装することになります。
サンプルとして、チュートリアルで作成したチュートリアルガジェットにアーカイブ処理を追加していきます。

ノート

IM-Workflow のアーカイブ処理では「テーブル名 + “yyyyMM”」のテーブルに退避しており年月ごとのテーブルが作成されますが、
intra-mart Accel Kaiden! 標準では退避テーブルは一つで、年月のカラムを保持します。

アーカイブ用のテーブルを用意

(過去案件)チュートリアルガジェットテーブル「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  

解説

チュートリアルガジェットテーブル と比較すると、「ロケールID」「アーカイブ年月」「通貨名」が追加されています。
  • ロケールID
    アーカイブ処理時にシステムロケール分のレコードを作成します。
  • アーカイブ年月
    アーカイブ処理を実施した年月を「YYYYMM」形式で格納します。
  • 通貨名
    アーカイブ時点のマスタ情報を格納します。
    マスタ情報変更の過去案件情報に影響及ぼさないようにします。

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

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;
    }
    
    // 中略・・・
}

解説

アーカイブに関連するメソッドを実装します。
  • 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
    アーカイブ処理時に実行されます。
    過去案件用テーブルにデータ登録後、チュートリアルガジェットテーブルのデータを削除するためのマネージャを返却しています。

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);
    }
}

解説

アーカイブに関連するメソッドを実装します。
intra-mart Accel Kaiden! 内部の基底クラスの呼び出しで実装は完了します。
基底マネージャの処理を簡単に解説します。
  • selectViewArchive
    (過去案件)チュートリアルガジェットテーブルから全アーカイブ年月分のデータを取得し返却します。
    検索条件にはLogicクラスから渡されるcriteriaを使用しています。
    ただし、検索条件のうちアーカイブ年月は明示的にクリアしています。
  • matterArchiveRegister
    (過去案件)チュートリアルガジェットテーブルにデータを登録します。
    登録の際、dataListの各登録データに対して、criteriaの「ロケールID」「アーカイブ年月」を補完しています。
  • matterArchivePostDelete
    チュートリアルガジェットテーブルのデータを削除します。
  • removeAllArchive
    (過去案件)チュートリアルガジェットテーブルのデータを削除します。

«  その他・ガジェット間通信の実装方法   ::   コンテンツ   ::   申請書ガジェットManagerクラスプログラミング  »