0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kintoneのフィールド定義をJavaScriptで一覧化する|テーブル内項目とレコードデータを分けて扱う

0
Posted at

kintacoです。自社のアプリ情報出力プラグインには、フィールド定義からテーブル内の項目も取り出すflatten処理があります。この記事では、一覧用の配列に変換し、所属テーブルを残す小さな関数に再構成します。

入力はフォームのフィールド定義APIが返すpropertiesを想定したオブジェクトです。レコードの値を取得するAPIとは構造も目的も異なります。サンプルでは固定のデータを使い、APIへ通信しません。

propertiesだけを浅く列挙すると、テーブル内の列を見落とす

サブテーブルはtypeがSUBTABLEで、その中のfieldsへ子項目が入ります。親だけを一覧へ入れると、商品名・数量などの列を確認できません。そこでテーブル自身を出力し、子のfieldsへ進みます。

function collectFields(properties) {
  const rows = [];
  function walk(fields, tableCode = '') {
    Object.entries(fields || {}).forEach(([key, field]) => {
      if (!field || typeof field.type !== 'string') {
        throw new Error('フィールド定義の形式を確認してください。');
      }
      const code = field.code || key;
      rows.push({code, label: field.label || code, type: field.type, tableCode});
      if (field.type === 'SUBTABLE') walk(field.fields, code);
    });
  }
  walk(properties);
  return rows;
}

所属を残して、値と定義を混同しない

例えば行が「テーブル: 明細、コード: 数量、type: NUMBER」であれば、フォームの列定義を表します。数量の実データを出しているわけではありません。この関数にはレコードの取得・追加・更新処理はありません。

実コードのflattenはコードをキーにした辞書を作ります。この記事では所属テーブルを確認しやすい配列へ変換し、扱う情報を名前・コード・型に絞っています。製品版のExcel出力、権限一覧、参照先名称の取得は含みません。

フォームの見た目順にはならない

この関数の順番はpropertiesとfieldsの列挙順であり、画面の配置順ではありません。グループやラベルを含む見た目に合わせたい場合は、フォームのレイアウト定義も取得し、配置をたどる必要があります。

製品版はフィールド定義とレイアウトを組み合わせ、ラベルやグループ所属なども出力します。この短いサンプルを、完全な設計書出力として扱わないでください。

検証例

console.log(collectFields({
  件名: {type: 'SINGLE_LINE_TEXT', label: '件名'},
  明細: {type: 'SUBTABLE', label: '明細', fields: {
    数量: {type: 'NUMBER', label: '数量'}
  }}
}));

通常項目・テーブル・空の定義・コードの補完・入力を変更しないことをNode.jsで確認しました。実際のアプリ管理権限やAPI応答、Excelの出力結果をテストしたものではありません。

実際にAPIへ接続する場合

運用中と設定中のどちらを取得するか、取得するユーザーの権限、取得失敗をどう表示するかを設計します。設定を含む出力ファイルは、共有先にも注意します。設定一覧はバックアップやユーザー別の実効権限の計算とは異なります。

設定と権限をExcelへまとめたい場合

自社のアプリ情報出力プラグインの仕様・設定画面に、設定から利用する方法もまとめています。サンプルと製品版の対応範囲は異なります。

無料利用では、非契約ドメインのPC・モバイル一覧画面に有償プランの案内バナーが30%の確率で表示されます。契約済みドメインでは表示されません。一度閉じると、同じブラウザー・同じkintoneドメインでは、全Kintacoプラグイン共通で24時間非表示になります。

参考資料

製品仕様と実コードの確認元:AppInfoExport/src/js/export-model.js(1.0.2)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?