kintaco編集部です。自社のテーブルデータ初期表示プラグインにある「型に応じて値を整える」処理を題材に、レコード追加画面へ定型行を設定する小さなサンプルを作ります。
製品版の設定保存・項目取得・モバイル処理は含めず、PCの新規作成と、文字列・チェックボックス・ユーザー選択の3種類に絞ります。既存値がある場合は上書きせず、複製作成を対象外にしています。アクション経由では、対象3列に引き継いだ値がある場合に保持します。
検証用のフィールド
- テーブルコード:点検明細。
- テーブル内の文字列(1行):設備名。
- テーブル内のチェックボックス:点検項目。選択肢に「外観」「異音」を用意。
- テーブル内のユーザー選択:担当者。
ラベルではなくフィールドコードを合わせてください。自動計算・ルックアップ・入力不可のフィールドには、そのまま流用しないでください。
(function () {
'use strict';
function toFieldValue(type, value) {
if (!['CHECK_BOX', 'USER_SELECT'].includes(type)) {
return value == null ? '' : String(value);
}
const values = Array.isArray(value) ? value :
String(value || '').split(',').map(v => v.trim()).filter(Boolean);
return type === 'USER_SELECT' ? values.map(code => ({code})) : [...values];
}
function initialize(event) {
if (event.reuse) return event;
const table = event.record['点検明細'];
if (!table || table.type !== 'SUBTABLE') return event;
const rows = table.value;
if (!Array.isArray(rows)) return event;
const types = {設備名: 'SINGLE_LINE_TEXT', 点検項目: 'CHECK_BOX', 担当者: 'USER_SELECT'};
if (rows.some(row => Object.entries(types).some(([code, type]) =>
!row.value[code] || row.value[code].type !== type))) return event;
const hasValue = rows.some(row => Object.keys(types).some(code => {
const value = row.value[code].value;
return Array.isArray(value) ? value.length > 0 : value != null && value !== '';
}));
if (hasValue) return event;
table.value = ['溶接ロボットX', '真空ポンプB'].map(name => ({value: {
設備名: {type: 'SINGLE_LINE_TEXT', value: toFieldValue('SINGLE_LINE_TEXT', name)},
点検項目: {type: 'CHECK_BOX', value: toFieldValue('CHECK_BOX', '外観,異音')},
担当者: {type: 'USER_SELECT', value: toFieldValue('USER_SELECT', [])}
}}));
return event;
}
kintone.events.on('app.record.create.show', initialize);
})();
行のvalueと、フィールドのvalueを区別する
テーブルのvalueは「行オブジェクトの配列」です。各行のvalueには、フィールドコードをキーにしたオブジェクトが入ります。さらに、それぞれにtypeとvalueがあります。文字列は文字列、チェックボックスは選択肢の配列、ユーザー選択は「{code: ユーザーコード}」の配列です。
ユーザー名の表示文字列をcodeへ入れる実装にはしません。実在するコードと、対象利用者の権限・フィールド設定を確認します。このサンプルの担当者は未選択にし、ユーザーコードの変換自体はtoFieldValue単体で確認します。
初期行を入れてよいかを先に判断する
新規作成でも、複製やアクションによって値を引き継ぐ場合があります。「表示イベントだから必ず空」とは限りません。そのため、reuseや既存の対象値を確認してから代入します。テーブルの構造が想定どおりでない場合も、推測して置き換えません。
この空欄判定は、今回の3列専用です。別の列を加える場合は、その列の値も含めて判定を設計してください。製品版は設定行を代入するため、このサンプルとは既存行の扱いが異なります。
確認するケース
- 通常の新規作成で2行が表示される。
- 既存の設備名・チェック・担当者がある場合は保持する。
- 複製作成、対象列に値を引き継いだアクション経由の作成では保持する。
- テーブルや列が見つからない場合は値を変えない。
- 初期行の配列を生成し直しても、前回の変更が混ざらない。
Node.jsの模擬イベントで確認した範囲です。実際のkintone画面・権限・併用カスタマイズでの確認は含まないため、検証用アプリで表示と保存の両方を確かめてください。イベント内ではkintone.app.record.setを呼ばず、変更したeventを返します。
初期行を設定画面から管理する場合
自社のテーブルデータ初期表示プラグインの仕様・設定画面で、設定から利用する方法も紹介しています。サンプルと製品版の対応範囲は異なります。
無料利用では、非契約ドメインのPC・モバイル一覧画面に有償プランの案内バナーが30%の確率で表示されます。契約済みドメインでは表示されません。一度閉じると、同じブラウザー・同じkintoneドメインでは、全Kintacoプラグイン共通で24時間非表示になります。
参考資料
製品仕様と実コードの確認元:TableDataInitial/src/js/desktop.js(1.0.5)。