イベント発火時や独自ボタンをクリックした時など、テーブルに新しい行を追加したい場合が往々にしてあると思います。
アプリの構成が絶対に変化しない時は、テーブル内の全フィールドをオブジェクトとしてインラインで定義すればいいのですが…
テーブルにフィールドを追加したりすると、カスタマイズが壊れてしまうと思います。
また、REST APIが許容するテーブル構造とJavaScript APIが許容するテーブル構造が違うので、同じ勢いで書くこともできない…
そこで、汎用的なメソッドを作って使いまわしたいな~と思っているのですが、皆さんはこういう時どういうメソッドを書いていますか?
私がやったことあるのは、以下のようなやり方です。
① テーブルの既存行をコピーする
新規画面でも編集画面でも、テーブルには自動で1行作られる仕様を利用して、1行目をコピーして中身を初期化するメソッドを用意しておく。
// 即興で書いているので動かないかも
function createNewRow(record: any, fieldCode: string): any {
  if (record[fieldCode]) {
    // ディープコピー
    const copied = JSON.parse(JSON.stringify(record[fieldCode].value[0].value));
    // フィールドを回る
    for (const key of Object.keys(copied)) {
      // フィールド種類によって初期化方法を変える
      switch (copied[key].type) {
        case: 'CHECK_BOX':
        case: 'UESR_SELECT':
        /* ... */
        case: 'FILE': {
          copied[key].value = [];
          break;
        }
        default: {
          copied[key].value = '';
          break;
        }
      }
    }
    return copied;
  } else {
    return null;
  }
}
// こんな感じかな?
② REST API でフィールド構成を取得して構築
REST API から情報を取ってきて、フィールドを全て生成する
※あんまり使わない
③ window.cybozu オブジェクトから情報を取ってきて、フィールドをすべて生成する
②と同じだけどAPIコール数を使わない
※あんまり使わない
考え得るのはこのくらいで、いつもはコール数を消費しない①を使っているのですが、他にも方法はあったりするのでしょうか。
もし皆さんがやっている方法があれば、教えていただきたいです。