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編集部です。自社のテーブルデータ初期表示プラグインにある「型に応じて値を整える」処理を題材に、レコード追加画面へ定型行を設定する小さなサンプルを作ります。

製品版の設定保存・項目取得・モバイル処理は含めず、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)。

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?