フォームブリッジ

新バージョンのフォームブリッジで「開始時刻」が「終了時刻」より後になるような入力がされた場合、エラー表示を出したいです。

実行したコードは下記のとおりですが、うまくいかず、原因はこちら↓とのこと。どのように 修正すればいいかご教示いただけると助かります。
Uncaught TypeError: Cannot read properties of undefined (reading ‘fields’)

実行したコード

(function() {
    "use strict";

    const START_TIME_FIELD_CODE = '開始時刻';
    const END_TIME_FIELD_CODE = '終了時刻';

    function validateTimeRange(currentContext) {
        // ここを context.record.fields に変更
        const fields = currentContext.record.fields;

        if (!fields) {
            // エラーログは開発時のみで、本番環境では不要な場合があります
            console.error("Error: 'fields' object not found in currentContext.record. Make sure context.record.fields is available.");
            return currentContext;
        }

        const startTime = fields[START_TIME_FIELD_CODE] ? fields[START_TIME_FIELD_CODE].value : '';
        const endTime = fields[END_TIME_FIELD_CODE] ? fields[END_TIME_FIELD_CODE].value : '';

        const startField = fields[START_TIME_FIELD_CODE];
        const endField = fields[END_TIME_FIELD_CODE];

        if (!startField || !endField) {
            console.warn(`Warning: One or both time fields (${START_TIME_FIELD_CODE}, ${END_TIME_FIELD_CODE}) not found.`);
            return currentContext;
        }

        if (startTime && endTime) {
            if (startTime >= endTime) {
                startField.error = '開始時刻は終了時刻より前に設定してください。';
                endField.error = '終了時刻は開始時刻より後に設定してください。';
            } else {
                startField.error = '';
                endField.error = '';
            }
        } else {
            // 片方または両方が未入力の場合、エラーをクリア
            startField.error = '';
            endField.error = '';
        }

        return currentContext;
    }

    formBridge.events.on(`form.field.change.${START_TIME_FIELD_CODE}`, function(context) {
        return validateTimeRange(context);
    });

    formBridge.events.on(`form.field.change.${END_TIME_FIELD_CODE}`, function(context) {
        return validateTimeRange(context);
    });

})();

カスタマイズのドキュメントを見ると、 contextrecord プロパティはありません。

getRecord() を使ってデータを取得して setFieldValueError(fieldCode, errorMessage) でエラーメッセージを出せばよいと思います。

1 Like

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。