現在、社内でお弁当注文アプリを作成しています。
注文者はkintoneのアカウントを持っていないため、foambridgeを使って運用をしています。
そこで、注文当日の午前9時以降は、注文フォームへの入力を制限(入力できないように)したいと考えています。(明日以降の注文は可能)
自分で調べたところ、JavaScriptを使えば実現可能とのことでしたが、
AIに聞いたり何回か自分でやってみたのですが、なかなかできず…
もしわかる方がいらっしゃいましたらご教示いただけますと幸いです。
コードをここに入力または貼り付け
aaa
2
やったこと
をChromeブラウザで開いてコンテキストに仕様ページを参照させ、Gemini in Chromeの機能を使って質問者の質問内容を貼り付けて実行したところ
(function() {
'use strict';
// 🚨【要変更】お弁当の「注文日」を入力する日付フィールドのフィールドコードに変えてください
const DATE_FIELD_CODE = '注文日';
// 注文締め切り(当日9時以降)を判定する共通関数
function isOrderClosed(selectedDateStr) {
if (!selectedDateStr) return false;
const now = new Date();
// 今日の日付を "YYYY-MM-DD" 形式で取得
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const todayStr = `${year}-${month}-${day}`;
// 「選択された日付が今日」かつ「現在時刻が9時以降」の場合に締め切りと判定
if (selectedDateStr === todayStr && now.getHours() >= 9) {
return true;
}
return false;
}
// 1. 確認ボタン・回答ボタンクリック時の制御(送信をブロック)
const submitEvents = ['form.confirm', 'form.submit'];
submitEvents.forEach(function(eventName) {
formBridge.events.on(eventName, function(context) {
const record = formBridge.fn.getRecord();
const selectedDate = record[DATE_FIELD_CODE]?.value;
if (isOrderClosed(selectedDate)) {
alert('当日の注文は午前9時に締め切りました。明日以降の日付を選択してください。');
context.preventDefault(); // 画面遷移や送信をキャンセル
}
});
});
// 2. 日付変更時の制御(フィールドにリアルタイムでエラーを表示)
formBridge.events.on(`form.field.change.${DATE_FIELD_CODE}`, function(context) {
const selectedDate = context.value;
if (isOrderClosed(selectedDate)) {
context.setFieldValueError(DATE_FIELD_CODE, '当日の注文は午前9時で締め切りました。明日以降の日付を選択してください。');
} else {
context.setFieldValueError(DATE_FIELD_CODE, null); // 条件を満たしていればエラーを消去
}
});
})();
という内容が出力され動いているようです。
このコードは動きますが、
isOrderClosed関数内で現在時間と比較するというよくない書き方になっています。ぜひ、修正できるか試してみてください。
運用規模がわかりませんが、お弁当注文ぐらいならGoogle Sheetsでもいいような気もしました。