見出し画像

kintone制限値チャレンジ1 – フィールドの制限値

今回調べたこと

kintoneアプリに制限値を超えたフィールドを追加しようとすると、追加操作はできるものの、フォームを保存する際にエラーメッセージが表示され、フォームを保存できないことがわかりました。

[フォームを保存]をクリックした直後の図

調べた理由


kintoneのヘルプを見ると、1つのアプリに追加できるフィールド数には、500個までの制限があることがわかります。

ただし、制限値を超えたフィールドを追加しようとした場合、どのような動作が起こるのかはヘルプを見てもわからず、フォームが保存できないのか、アプリを公開できないのか、エラーメッセージが出るのか、どこにメッセージが表示されるのかも不明でした。
そこで、制限値を超えた場合の動作を確認することにしました。

確認方法

フォームの設定画面から手動でフィールドを500個追加することも可能ですが、非常に手間がかかるため、カスタマイズによってフィールドを自動的に500個追加できないか考えました。
chatGPTに聞いてみたところ、追加するフィールドを定義しておいてREST APIを投げればよいとわかりました。

そこで、以下のJavaScriptプログラムを用意しました。

/**
 *
 * createFields.js
 *
 **/
(() => {
  "use strict";
  kintone.events.on(["app.record.index.show"], (event) => {
    const mButton = document.createElement("button");
    mButton.id = "my_index_button";
    mButton.innerText = "フィールド追加";
    mButton.onclick = btn_click;
    kintone.app.getHeaderMenuSpaceElement().appendChild(mButton);
  });

  async function btn_click() {
    // アプリIDを取得
    var appId = kintone.app.getId();
    // ここを500回繰り返す。
    for (let i = 0; i < 501; i++) {
      const resp = await go_RestAPI(appId, i);
    }
    alert("作成できました");
  }

  async function go_RestAPI(appID, recID) {
    // 000から始まる3桁の連番を用意しています。
    const mKey = "文字列1行_" + recID.toString().padStart(3, "0");
    // 文字列1行フィールドを準備しています。
    const body = {
      app: appID,
      properties: {
        [mKey]: {
          type: "SINGLE_LINE_TEXT",
          code: mKey,
          label: mKey,
          expression: "",
          defaultValue: "",
        },
      },
    }; // REST-APIに渡すパラメタ
    const resp1 = await kintone
      .api(
        kintone.api.url("/k/v1/preview/app/form/fields.json", true),
        "POST",
        body
      )
      .catch((error) => {
        console.log("error", error);
        alert(error.message);
        const resp1 = undefined;
      });
      console.log(resp1);
      return resp1;
  }
})();

このプログラムでは kintone のレコード一覧画面にボタンを配置し それをクリックすることで 500回の繰り返し処理を行っています。繰り返し処理の中身は以下のようなものです。

  1. 繰り返し回数に応じた連番を用意する。

  2. その番号で文字列1行フィールドを準備する。

  3. REST-APIを使ってフィールドを追加する。

このプログラムを実行することで、アプリに500個の文字列1行フィールドを作成することができました。
その後、フォームを確認すると500個の文字列1行フィールドが上から下に順番に配置されていました。例えば左から右に並ぶようにするなど、レイアウトを指定するには別の方法が必要になりそうでした。

[アプリの設定] > [フォーム]タグ。500フィールドの追加が終わった直後

1つ目の確認 - 501個目の文字列1行フィールドを配置できるか


ここからは手動でアプリの設定を変更しました。
フォームの設定画面で文字列1行フィールド追加してみたところ、画面上には問題なく配置することができました。但し、[フォームを保存ボタン]をクリックすると、下の画面のようなエラーメッセージが表示され、フォームの保存はされませんでした。
よって、アプリが公開前であるかどうかにかかわらず、制限値を超えたフィールドを配置することはできないことがわかりました。

エラーメッセージ。ブラウザの開発ツールでもコンソールにエラー出してました。

2つ目の確認 - ラベルフィールドとかなら配置できるのか


kintoneのヘルプを見ると、制限値にカウントされないものとして、[ラベル]、[罫線]、[スペース]フィールドがあるとのこと。

そこで、[ラベル]、[罫線]、[スペース]フィールドを配置してみました。
設定画面上には問題なく配置することができ、フォームを保存することも、アプリを公開することも出来ました。
よって、[ラベル]、[罫線]、[スペース]フィールドの場合、制限値に関係なく、またメッセージなども表示されずに配置できることがわかりました。

レベル追加後のアプリ更新ダイアログ。4月のアップデート後なので更新内容出てます!

[ラベル]、[罫線]、[スペース]フィールドが配置できました。(スペースは見えないですが・・・

確認後に行ったこと


フィールドを追加した時と同じ方法でREST APIを使ってフィールドを削除することもできそうでした。

ですがこのアプリは、今回のためだけに作ったので、アプリごと削除しました。

さいごに


フィールドを500個追加できることは確認できたのですが、設定画面などの動作は「もっさり」していました。今回データ入力は行っていませんが、レコード数が増えていくとパフォーマンスが心配です。
実際にはアプリ設計を見直すなどして、500個のフィールド配置は避けた方がよいと思いました。

今回は以上です。


この記事が気に入ったらサポートをしてみませんか?