レコード保存時のスクリプトの実行順序

お世話になっております。

下記のサイトを参考にメインのスクリプト(main.js)から
2つのスクリプトを呼び出すスクリプトを書いています。
※仮にスクリプトa:error_category.js
スクリプトb:set_table_no.jsとする

https://developer.cybozu.io/hc/ja/community/posts/360015092003-スクリプトの実行順番 

具体的な動作としては下記の通りです。
・アプリではカテゴリーを有効化していて、必須入力チェックをスクリプトaでかけています。
・アプリにはサブテーブル(フィールドコード[receipts])が配置されていて、レコード保存時に
サブテーブル一番左の文字列「No.」(フィールドコード[no])に連番が自動設定されるように
スクリプトbを組んでいます。

必須入力項目を1つも入力しない状態でレコードを保存すると
コンソールログに下記の通りの出力がされます。
1回目:「test1 test2」※スペースは改行
2回目:「test1 test2 check1 check2」
3回目:「test1 test2 check1 check2 check1 check2」
4回目:「test1 test2 check1 check2 check1 check2 check1 check2」

レコード保存時にはスクリプトaでエラーがあればスクリプトbに進まないように。
その際のコンソールログは「check1 test1 」
何もエラーがない場合のコンソールログは「check1 test1  check2 test2」と表示されるように
したいです。

testとcheckが逆転する理由は下記のコードがメイン以外のスクリプトに
入っているせいだということが判明いたしましたが、この部分を削除すると
カテゴリーが認識されません。

kintone.events.on(events, function(event) {

エラー内容
Uncaught TypeError: Cannot read property ‘カテゴリー’ of undefined at Object.MYAPP.error_category

上記の問題に対してご教示いただけますと幸いです。
よろしくお願いいたします。

main.js

(function() {
    "use strict";
    var events = [
        'app.record.create.submit',
        'app.record.edit.submit'
    ];

    kintone.events.on(events, function(event) {
      MYAPP.error_category();
      console.log("test1");
      MYAPP.set_table_no();
      console.log("test2");
    });
  })();

 

error_category.js

window.MYAPP = window.MYAPP || {};
MYAPP.error_category = function(){
    (function() {
        "use strict";
        var events = [
            'app.record.create.submit',
            'app.record.edit.submit'
        ];

        kintone.events.on(events, function(event) {
            var record = event.record;
            var categoryItems = record['カテゴリー']['value']
            
            // カテゴリーの選択が無い場合エラー表示
            if (categoryItems.length === 0) {
                event.error = 'カテゴリーを選択してください。';
            } else {
                if(categoryItems.length >= 2) {
                    event.error = 'カテゴリーは1つだけ選んでください。';
                }
            }
            console.log("check1");
            return event;
        });    
    })();
}

 

set_table_no.js

window.MYAPP = window.MYAPP || {};
MYAPP.set_table_no = function(){

    (function() {
        "use strict";
        var events = [
            'app.record.create.submit',
            'app.record.edit.submit'
        ];

        kintone.events.on(events, function(event) {
            var record = event.record;
            var count = record.receipts.value.length;

            // テーブルの左端列「no」に連番を設定
            for( var i = 0; i < count; i++ ){
                record.receipts.value[i].value.no.value = i + 1;
            }

            console.log("check2");
            return event;
        });    
    })();
}

MYAPP.error_category 関数は、イベント時にイベント処理を登録するだけになっています。

‘app.record.create.submit’ イベントが発生すると、MYAPP.error_category 関数を呼び出しますが、処理としてはイベント処理を登録するだけです。

‘app.record.create.submit’ イベントが完了すると、詳細画面に遷移しますので、MYAPP.error_category 関数で登録されたイベント処理が実行されることは、ありません。

 

対策としては、MYAPP.error_category を、イベント処理を登録するのではなく、直接処理を実行するように変更します。

event については、呼び出し時にパラメータで渡します。

あと、main.js で return event; しないと結果が反映されません。

下記対応案は、切り貼りしただけなので検証はお願いします。

 

main.js

(function()&nbsp;{
    "use&nbsp;strict";
    var events = [
        'app.record.create.submit',
        'app.record.edit.submit'
    ];
    kintone.events.on(events, function(event)&nbsp;{
      MYAPP.error_category(event);
      console.log("test1");
   if (!event.error) {
       MYAPP.set_table_no(event);
      console.log("test2");
}
   return event;
    });
  })();

error_category.js

window.MYAPP = window.MYAPP || {};
MYAPP.error_category = function (event) {
    "use strict";
    var record = event.record;
    var categoryItems = record['カテゴリー']['value']

    // カテゴリーの選択が無い場合エラー表示
    if (categoryItems.length === 0) {
        event.error = 'カテゴリーを選択してください。';
    } else {
        if (categoryItems.length >= 2) {
            event.error = 'カテゴリーは1つだけ選んでください。';
        }
    }
    console.log("check1");
}

rex0220様

ご回答いただきありがとうございました。
set_table_no.jsについても直接処理を実行するように変更したところ、
希望通りの動作確認がとれました。

レコード保存時のスクリプトが複雑化していたので、
このコードを参考に作り直してみようと思います。
重ねてお礼申し上げます。