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)。