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

3.3.5. Mode&Formated

intra-mart Accel Kaiden!ではテキストボックスなどのモードやフォーマットを簡単に切り替える機構を用意しています。
本項では、モードやフォーマットの仕様を解説します。

3.3.5.1. モードとは?

intra-mart Accel Kaiden! のタグライブラリでは、mode属性に設定した値によってモードを変更することができます。

モードはタグライブラリのmode属性に設定した値により自動的に設定され、
mode属性に”0”を設定した場合は入力モードとして扱われ、”1”を設定した場合は表示モードとして扱われます。

主に申請書の入力画面(申請画面)と処理画面(承認画面)で使用している機能で、
入力画面ではmode属性に”0”を、処理画面ではmode属性に”1”を設定し、一つのJSPで入力画面と処理画面を実現しています。

3.3.5.2. フォーマットとは?

intra-mart Accel Kaiden! では未フォーマットの値とフォーマット済の値の両方をクライアント(厳密にはAccessor)へ渡します。
渡された値は、タグライブラリのformated属性により、表示する値を変更することができます。
  • formated属性により使用される値

    formated属性の値 mode=”0”の場合 mode=”1”の場合
    “input” 未フォーマットの値 未フォーマットの値
    “view” 未フォーマットの値 フォーマット済の値
    “both” フォーマット済の値 フォーマット済の値

  • JSPのコーディング例
    <k:text name="txt1" mode="0" formated="view" />
    <k:text name="txt2" mode="1" formated="view" />
    
    // ブロックに対するAccessor
    var blockAccessor   = KAIDEN.getGadget("ガジェットID").blockAccessors["ブロックID"];
    
    //値を設定する
    blockAccessor("txt1").setValue(["2000/01/01","2000年01月01日"]);  //txt1には"2000/01/01"が設定される
    blockAccessor("txt2").setValue(["2000/01/01","2000年01月01日"]);  //txt2には"2000年01月01日"が設定される
    

  • Javaのコーディング例
    jp.co.slcs.kaiden2.base.foundation.util.ConvertForJsonSourceにフォーマット変換を行う機能があり、
    このクラスをサブクラス化し以下のようにformatFormatedValueをオーバーライドすることで、
    特定のフィールドのフォーマット変換と配列化を行うことができます。
    class Converter extends ConvertForJsonSource {
    
        @Override
        protected Map<String, String> formatFormatedValue(Map<String, Object> map, Stack<String> fldNameStack) {
            // 標準フォーマット変換
            Map<String, String> result = super.formatFormatedValue(map, fldNameStack);
    
            // 開始日のフォーマット変換
            Object startDate = map.get("startDate");
            if (startDate != null) {
                String formated = /*フォーマット変換後の文字列*/"";
                result.put("startDate", formated);
            }
    
            // 終了日のフォーマット変換
            Object endDate = map.get("endDate");
            if (endDate != null) {
                String formated = /*フォーマット変換後の文字列*/"";
                result.put("endDate", formated);
            }
    
            // フォーマット変換した文字列のMapを返却することで、
            // 「未フォーマットの値」と「フォーマット済の値」の配列が作成されます。
            return result;
        }
    }
    
    /* ~略~ */
    
    // フォーマット変換・コンバート実行
    Converter converter = new Converter();
    Map<String, Object> convertedMap = converter.mapConvert(/*フォーマット変換対象Map*/);
    
    // String[] { /*未フォーマットの値*/, *フォーマット済の値*/} が返却されます。
    convertedMap.get("startDate");