FBの回答時間制限について

現在、社内でお弁当注文アプリを作成しています。

注文者はkintoneのアカウントを持っていないため、foambridgeを使って運用をしています。

そこで、注文当日の午前9時以降は、注文フォームへの入力を制限(入力できないように)したいと考えています。(明日以降の注文は可能)

自分で調べたところ、JavaScriptを使えば実現可能とのことでしたが、

AIに聞いたり何回か自分でやってみたのですが、なかなかできず…
もしわかる方がいらっしゃいましたらご教示いただけますと幸いです。

コードをここに入力または貼り付け

やったこと

を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でもいいような気もしました。

返信遅くなってすみません。

試しに教えていただいたJavaScriptをFormBridge側に組み込んでみたのですが、うまく動きませんでした…。

ChatGPTにも聞いてみたところ、
「FormBridge(お弁当入力フォーム)」と「kViewer(注文確認用カレンダー)」を組み合わせて使っているのが原因かもしれないとのことでした。

あと、運営規模は20名ほどなのですが、kintone導入時に試しで作ったアプリをそのまま運用している感じなので、
社内セキュリティ的にもGoogle Sheetsへの変更は難しそうです。

もし他に方法があれば、ご教示いただけると助かります。

よろしくお願いいたします。

横から失礼します。

既に試されているかもしれませんが、、、

この部分のフィールドコードがフォーム設定と合ってないと動かないので、そのままソースを張り付けるだけでは動かない可能性があります。

一度フィールドコードを確認したほうが良いかもしれません。