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

«  ロジッククラスの呼び出し   ::   コンテンツ   ::   申請書ガジェットLogicクラスプログラミング  »

表示値の書式変換処理

ガジェットに表示する値の書式変換処理は、Actionクラスに書式変換クラスを実装し、Logic呼び出し時の引数に指定しています。
チュートリアルで作成したチュートリアルガジェットでは、「金額」項目に対して書式変換しています。
チュートリアルのプログラムを抜粋したものを以下に掲載します。(チュートリアルガジェットのアクションはこちら
/**
 * チュートリアルガジェット基底クラス(Action).
 */
public abstract class AbstractGadgetTutorialActionBase implements GadgetActionIF {
    
    /** 処理画面のデータロード. */
    @Override
    @Execute(validator = false)
    public String loadProcess() {
        ResponseWriter.writeJSon(JSON.encode(getViewData()));
        return null;
    }
    
    /** 画面表示用データを返却. */
    @Override
    public LogicResultDto getViewData() {
        return getLogic().view(getForm(), getConvertor());
    }
    
    /** 書式変換設定を返却. */
    protected TutorialConvertor getConvertor() {
        return new TutorialConvertor(getForm());
    }
    
    /** チュートリアルガジェットの書式変換. */
    private class TutorialConvertor extends ConvertForJsonSource {
        
        /** リクエストパラメータ. */
        private final AbstractImwPageForm frm;
        
        /** NumberHelper. */
        private final NumberHelper numberHelper;
        
        /** コンストラクタ. */
        public TutorialConvertor(AbstractImwPageForm frm) {
            this.frm = frm;
            numberHelper = SingletonS2Container.getComponent(NumberHelper.class);
        }
        
        /** 入力項目用書式変換. */
        @Override
        protected Map<String, Object> formatPlainValue(Map<String, Object> map, Stack<String> fldNameStack) {
            
            Map<String, Object> result = new HashMap<String, Object>(map);
            
            // 金額の書式変換
            if (result.containsKey(TUTORIAL_AMOUNT)) {
                BigDecimal amount = (BigDecimal) result.get(TUTORIAL_AMOUNT);
                
                Object currencyCd = result.get(TUTORIAL_CURRENCY_CD);
                result.put(TUTORIAL_AMOUNT,
                        numberHelper.formatCurrencyAmount4Input(amount, frm.searchCriteriaCompany, (String) currencyCd));
            }
            
            return result;
        }
        
        /** 表示項目用書式変換. */
        @Override
        protected Map<String, String> formatFormatedValue(Map<String, Object> map, Stack<String> fldNameStack) {
            Map<String, String> result = super.formatFormatedValue(map, fldNameStack);
            
            // 金額の書式変換
            if (map.containsKey(TUTORIAL_AMOUNT)) {
                BigDecimal amount = (BigDecimal) map.get(TUTORIAL_AMOUNT);
                Object currencyCd = map.get(TUTORIAL_CURRENCY_CD);
                result.put(TUTORIAL_AMOUNT,
                        numberHelper.formatCurrencyAmount4View(amount, frm.searchCriteriaCompany, (String) currencyCd));
            }
            
            return result;
        }
        
    }
}

解説

チュートリアルではTutorialConvertorという書式変換クラスをインナークラスで作成しています。
書式変換クラスには、入力項目用書式変換を行うformatPlainValueメソッドと、表示項目用書式変換を行うformatFormatedValueメソッドを実装します。
このインナークラスは、Logic呼び出し時に引数に渡し、Logicで書式変換処理を実行します。

ノート

業務固有の書式変換処理が不要である場合は、jp.co.slcs.kaiden2.base.foundation.util.ConvertForJsonSourceクラスを渡してください。

«  ロジッククラスの呼び出し   ::   コンテンツ   ::   申請書ガジェットLogicクラスプログラミング  »