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

3.2.2. TMTable

前項のGadgetではガジェットの仕様を解説しました。
本項では、ガジェットの内包要素であるTMTableの仕様を解説します。

3.2.2.1. TMTableとは?

TMTableとは、いわゆる帳票形式で表現する場合に利用するブロックです。
動的に入力欄を増やしたり、一覧表示を行う際に使用します。

次の画面では、TMTableを利用して機能を実現しています。
  • 明細ガジェット(経費明細)
../../../../_images/gadget_workflow.png
  • 一覧画面(マスタメンテナンス)(プロジェクトマスタ)
../../../../_images/master_mainte1.png

3.2.2.2. TMTableのプログラミング

TMTableは、タグライブラリのTMTable <k:tmtable>を使用します。
TMTable <k:tmtable>は、<table>に変換されますので、基本的なプログラミング方法は<table>と同様ですが、
<thead>と<tbody>を明確に分けて作成してください。
  • プログラミング例
    <k:tmtable id="sampleTmtable" class="imui-form">
      <thead>
        <tr>
          <th><k:surface surfaceKey="入力欄1" requiredMark="true"/></th>
        </tr>
        <tr>
          <th><k:surface surfaceKey="入力欄2" requiredMark="true"/></th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><k:text name="inputArea1" mode="0"/></td>
        </tr>
        <tr>
          <td><k:text name="inputArea2" mode="0"/></td>
        </tr>
      </tbody>
    </k:tmtable>
    
  • 解説
    <thead>
    ヘッダ行として扱われますので、特に何も変化しません。

    <tbody>
    動的に増減する対象で、複数行(<tr>が複数)あってもそれが1セットの行として増減します。
    たとえば、プログラミング例の様にJSPにてあらかじめ2行(2つの<tr>)を作成しておくと、この2行単位で動的に増減されます。

3.2.2.3. タプルとは?

タプル、またはタプルIDは次の様に定義しています。
  • タプル
    前項の通り、<tbody>にあらかじめ<tr>2つある場合は、この2行単位で動的に増減していきます。
    TMTableでは、この2行の単位をタプルと定義しています。
  • タプルID
    タプルIDは、タプルに対して付与される一意な連番です。
    タプル削除がされると欠番が発生しますし、「上に挿入」などを行った場合には画面表示順とタプルIDの順序は一致しません。
    TMTableの操作は、このタプルIDを利用して操作します。

3.2.2.4. タプル操作のプログラミング

JavaScriptにてタプル操作を行う場合のプログラミング方法を解説します。
次の様な実装で、タプルに対する各種操作が行えます。
  • 最下行に追加
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    // 最下行に1行(1タプル)追加
    tmtable.append();
    
  • 下に挿入
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    // 指定したタプルIDの下にタプルを挿入
    tmtable.insertUnder("タプルID");
    
  • 上に挿入
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    // 指定したタプルIDの上にタプルを挿入
    tmtable.insertUpper("タプルID");
    
  • タプルを1つ削除
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    // 指定したタプルを削除
    tmtable.del("タプルID");
    
  • タプルをすべて削除
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    // タプルをすべて削除
    tmtable.deleteAll();
    

コラム

タプル操作の詳細は、『intra-mart Accel Kaiden! JsDoc』を参照してください。

3.2.2.5. TMTable操作パネル

ユーザ操作で行追加や行削除などを行う場合はTMTable操作パネル <k:tmtableOperationPanel>を使用してください。
次の様にTMTable操作パネル <k:tmtableOperationPanel>を配置するだけで、
行追加・行削除などのタプルに対する基本的な操作が行えます。
  • プログラミング例
    <k:tmtable id="sampleTmtable" class="imui-form">
      <thead>
        <tr>
          <td>
            <k:tmtableOperationPanel position="header" allowAdd="true" allowDel="true" />
          </td>
          <th><k:surface surfaceKey="入力欄1" requiredMark="true"/></th>
          <th><k:surface surfaceKey="入力欄2" requiredMark="true"/></th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>
            <k:tmtableOperationPanel position="detail" allowAdd="true" allowDel="true" />
          </td>
          <td><k:text name="inputArea1" mode="0"/></td>
          <td><k:text name="inputArea2" mode="0"/></td>
        </tr>
      </tbody>
    </k:tmtable>
    

3.2.2.6. TMTableの関連API

本項では、TMTableのタプルの操作やデータの設定・取得の方法を紹介します。
各APIの詳細は『intra-mart Accel Kaiden! JsDoc』を参照してください。

3.2.2.6.1. タプルへのデータ設定

タプル内のエレメント(テキストボックスなど)に値を設定する場合には、次のAPIを使用してください。
  • append(data, exclude)
    最下行にタプルを追加し、そのタプルに対しdataを設定
  • insertUpper(tupleId, data, exclude)
    指定タプルの上にタプルを挿入、そのタプルに対しdataを設定
  • insertUnder(tupleId, data, exclude)
    指定タプルの下にタプルを挿入、そのタプルに対しdataを設定
  • setTupleData(tupleId, data, exclude)
    指定タプルに対しdataを設定
  • replaceAll(datas, exclude)
    全行削除後、datas(配列)の分だけ行追加しデータを設定します ※タプルIDを復元する
  • replaceAllNewTupleId(datas, exclude)
    全行削除後、datas(配列)の分だけ行追加しデータを設定します ※タプルIDを復元せずに新たなタプルIDを付与
  • appendAllNewTupleId(datas, exclude)
    datas(配列)の分だけ行追記しデータを設定します ※タプルIDを復元せずに新たなタプルIDを付与

コラム

次のソースは、TMTableに行を追加し、text1に”txt1”をtext2に”txt2”を設定する例です。
excludeにtext3が指定されているため、text3は値が設定されません。
// TMtableの取り出し
var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
//タプルを追加するとともにデータを設定
tmtable.append({text1:"txt1", text2:"txt2", text3:"txt3"}, {text3:true});

3.2.2.6.2. タプルのデータ取得

タプルのデータを取得する場合には、次のAPIを使用してください。
  • getTupleData(tupleId, includeLabel)
    特定のタプルのデータをjavascriptオブジェクトの形式で返却
  • getCount()
    Tmtableの行数を返却
  • getAvailabilityTupleIds()
    現在有効なタプルIDを配列で返却
  • getDataSet()
    タプルデータの配列をjavascriptオブジェクトの形式で返却
  • getColumnValues(fldName)
    タプルのうち特定のフィールドキー(もしくはフィールドキーの配列)の入力データをすべて返却

3.2.2.6.3. タプルのイベント処理

タプルのイベント処理は次の様に実装してください。
  • タプル追加(挿入)直前
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    //タプル追加(挿入)直前イベント
    tmtable.addEventPreNewRow(function(tupleId, tmtableAccessor) {
      //引数:tupleId        :挿入起点となるタプルID
      //引数:tmtableAccessor:当該TMtableへのAccessor
    });
    
  • タプル追加(挿入)直後(データ設定前)
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    //タプル追加(挿入)直後(データ設定前)イベント
    tmtable.addEventPostNewRowBeforeSetData(function(tupleId, tmtableAccessor, data) {
      //引数:tupleId        :新たに挿入されたタプルID
      //引数:tmtableAccessor:当該TMtableへのAccessor
      //引数:data           :挿入されたタプルに設定しようとしている値
    });
    
  • タプル追加(挿入)直後(データ設定後)
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    //タプル追加(挿入)直後(データ設定後)イベント
    tmtable.addEventPostNewRow(function(tupleId, tmtableAccessor, data) {
      //引数:tupleId        :新たに挿入されたタプルID
      //引数:tmtableAccessor:当該TMtableへのAccessor
      //引数:data           :挿入されたタプルに設定された値
    });
    
  • タプル削除時
    // TMtableの取り出し
    var tmtable = KAIDEN.getGadget("ガジェットID").tmtables["TMTableID"];
    //タプル削除時イベント
    tmtable.addEventDecreaseRowFunc(function() {
    });