![見出し画像](https://assets.st-note.com/production/uploads/images/102795323/rectangle_large_type_2_7e8b5a7be9ce2feb4a4ac42824c6e363.png?width=1200)
kintone制限値チャレンジ1 – フィールドの制限値
今回調べたこと
kintoneアプリに制限値を超えたフィールドを追加しようとすると、追加操作はできるものの、フォームを保存する際にエラーメッセージが表示され、フォームを保存できないことがわかりました。
![](https://assets.st-note.com/img/1681258129829-fbkaYwpA4S.png?width=1200)
調べた理由
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行フィールドを準備する。
REST-APIを使ってフィールドを追加する。
このプログラムを実行することで、アプリに500個の文字列1行フィールドを作成することができました。
その後、フォームを確認すると500個の文字列1行フィールドが上から下に順番に配置されていました。例えば左から右に並ぶようにするなど、レイアウトを指定するには別の方法が必要になりそうでした。
![](https://assets.st-note.com/img/1681258303641-c8LHxSPNk8.png?width=1200)
1つ目の確認 - 501個目の文字列1行フィールドを配置できるか
ここからは手動でアプリの設定を変更しました。
フォームの設定画面で文字列1行フィールド追加してみたところ、画面上には問題なく配置することができました。但し、[フォームを保存ボタン]をクリックすると、下の画面のようなエラーメッセージが表示され、フォームの保存はされませんでした。
よって、アプリが公開前であるかどうかにかかわらず、制限値を超えたフィールドを配置することはできないことがわかりました。
![](https://assets.st-note.com/img/1681258513254-hNNEJO7f4x.jpg?width=1200)
2つ目の確認 - ラベルフィールドとかなら配置できるのか
kintoneのヘルプを見ると、制限値にカウントされないものとして、[ラベル]、[罫線]、[スペース]フィールドがあるとのこと。
そこで、[ラベル]、[罫線]、[スペース]フィールドを配置してみました。
設定画面上には問題なく配置することができ、フォームを保存することも、アプリを公開することも出来ました。
よって、[ラベル]、[罫線]、[スペース]フィールドの場合、制限値に関係なく、またメッセージなども表示されずに配置できることがわかりました。
![](https://assets.st-note.com/img/1681258763838-GT0kyrDPPT.png?width=1200)
![](https://assets.st-note.com/img/1681258906076-1fayI4RuT0.png?width=1200)
確認後に行ったこと
フィールドを追加した時と同じ方法でREST APIを使ってフィールドを削除することもできそうでした。
ですがこのアプリは、今回のためだけに作ったので、アプリごと削除しました。
さいごに
フィールドを500個追加できることは確認できたのですが、設定画面などの動作は「もっさり」していました。今回データ入力は行っていませんが、レコード数が増えていくとパフォーマンスが心配です。
実際にはアプリ設計を見直すなどして、500個のフィールド配置は避けた方がよいと思いました。
今回は以上です。
この記事が気に入ったらサポートをしてみませんか?