レコード追加画面では動くが、編集画面では動かない

フィールドAにQRコードによって読み込んだ文字列を
フィールドB、C、Dに各文字列を自動で振り分けて入力されるようにしたいです。
例えば…
フィールドA:1234abc5678 という文字列を読み込んだら

自動で下記が入力される
フィールドB:1234
フィールドC:abcd
フィールドD:5678

レコード追加画面では想定通りの動きをしており
レコード編集画面では、エラーが出て、動きません。

エラー内容:Uncaught TypeError: Cannot read properties of undefined (reading 'substr')

code.substrでエラーが出ていると思われますが
レコード編集画面でのみエラーが出て、動作しないのはなぜでしょうか。

実行したコード

(() => {
    'use strict';
    let table = 'TBL';
    

    kintone.events.on([
        'app.record.create.change.コード',  //レコード追加画面でコードフィールドの値が変更された時
        'app.record.edit.change.コード',  //レコード編集画面でコードフィールドの値が変更された時  
    ], event => {
        for (var i = 0 ; i < event.record[table].value.length ; i ++ ) {
            var code = event.record[table].value[i].value.コード.value
            var hinmei = code.substr(18,8)
            var tsumiba = code.substr(26,4)
            var oroshiba = code.substr(30,3)
            var hinmei_code = code.substr(1,6)
            var tsumiba_code = code.substr(7,4)
            var oroshiba_code = code.substr(11,4)
            event.record[table].value[i].value.品.value = hinmei
            event.record[table].value[i].value.積.value = tsumiba
            event.record[table].value[i].value.卸.value = oroshiba
            event.record[table].value[i].value.品コード.value = hinmei_code
            event.record[table].value[i].value.積コード.value = tsumiba_code
            event.record[table].value[i].value.卸コード.value = oroshiba_code
        };
        return event;
    });

})();

レコード編集画面でのみエラーが出て、動作しないのはなぜでしょうか。

編集画面の場合は codeundefined になっているからです。

if (code) {
    var hinmei = code.substr(18,8)
    // 以下略
} else {
   console.log('codeが存在しない行数:', i)
}

みたいにしたらどうでしょうか?エラーの場合の行数を見て原因を検討するのが良いと思います。

3 Likes

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