if判定で添付ファイル名が無し判定ができない

何を実現したいのかを書きましょう

テーブルに『Menkyosho』という添付ファイル用のフィールドコードがあります。
諸条件により振り分けたいので必須項目には、していません。
新規申請の場合は、免許証も車検証も添付が必要だが
免許証の更新の場合は、免許証の添付のみでOKのため

Menkyoshoは、NGだが ShakenshoはOKの場合、
免許証の写しを添付してくださいとアラートを表示したいです。

どのようにif文を書けばいいのか、ご教授ください。

発生した問題やエラーメッセージを具体的に書きましょう

添付ファイル名が入っていたときは、if判定が働きますが
添付ファイル名が入っていなかった場合にelseを通らずに
スルーされてしまいます。

実行したコードをコピー&ペーストしましょう

/*
  新規申請時に『保存』ボタンクリック後、エラーチェックをし、OKだったら
  自動的に『申請』ステータスへ進む
*/
(() => {
    'use strict';
    kintone.events.on([
        'app.record.create.submit.success',
        'app.record.edit.submit.success'], (event) => {
            const record = event.record;
            const appId = event.appId;
            const recordId = event.recordId;
            const authorizer = record.authorizer_1.value[0].code;

            const rdoApplVal = event.record.radio_application.value;
            let menkyoshoCK = '';
            let shakenshoCK = '';

            const menkyosho = () => {
                for (const row of record.AttachFile1.value) {

                    for (const menkyoshofile of row.value.Menkyosho.value) {
                        if (menkyoshofile.length !== 0) {
                            menkyoshoCK = 'OK';
                        }else {
                            menkyoshoCK = 'NG';
                        }
                    }
                }
                return menkyoshoCK;
            }

            const shakensho = () => {
                for (const row of record.AttachFile1.value) {

                    for (const shakenshofile of row.value.Shakenshou.value) {
                        if (shakenshofile.length !== 0) {
                            shakenshoCK = 'OK';
                        } else {
                            shakenshoCK = 'NG';
                        }
                    }
                }
                return shakenshoCK;
            }

            switch (rdoApplVal) {
                case '新規':
                    menkyosho();
                    shakensho();
                    break;

                case '運転免許証':
                    menkyosho();
      break;

                case '車検証':
                case '自賠責保険':
                    shakensho();
            }

            let NgText = '';
            if (menkyoshoCK == 'NG') {
                NgText += `\n免許証(写)`;
            }

            if (shakenshoCK == 'NG') {
                NgText += `\n車検証(写)`;
            }

            if (NgText !== '') {

                alert(NgText + 'に、ファイルが添付されていません。' + `\n` + '添付してください');
            } else {
                const body = {
                    'app': appId,
                    'id': recordId,
                    'action': '申請する',
                    'assignee': authorizer
                };

                return kintone.api(kintone.api.url('/k/v1/record/status.json', true), 'PUT', body).then((resp) => {
                    alert('申請が処理されました。');
                    return event;
                }, (error) => {

                    return false;
                });
            }
        });
})();

こんばんは!

以下の説明ではわかりにくいので…

  • どのif文のことを言っているのか、
  • スルーとはどういう状況か

など詳しく説明があると良いかも知れません(私が答えられるとは限りません:pray:

(´-`).。oO(
elseを通らないということはif文の方を通るということ??
ifもelseも通らないという場合はどっかで落ちてる??

謎が謎を呼びます:cyclone:

デバッグの方法の説明ページがあるのでそこを参考にデバッグされてみるのも良いかも知れません

for文でループして処理しているため、もしかしてテーブルの最後の行にある添付ファイルがNGじゃない場合はmenkyoshoCKやshakenshoCKが ‘OK’ として上書きされてしまっているということはないでしょうか?

「いいね!」 1

jurippe様、
安藤 光昭

ご回答ありがとうございます。
説明不足で申し訳ございません。

デバッグで再確認したところ、添付ファイルフィールドに添付ファイル名が設定されている場合、
2個目のfor文→for (const menkyoshofile of row.value.Menkyosho.value) のあと
if判定に入りますが、添付ファイルフィールドに添付ファイル名が設定されていなかった場合、if判定に行かずに1個目のfor文→for (const row of record.AttachFile1.value) へループしていました。

if文で添付ファイル名が無し判定されないのではなく、
menkyoshofile of row.value.Menkyosho.value
に、rowが0行なのでif分までいかないということだと思います。

ここでループするrowがなかったら、'NG’になるようなプログラムにすればいいと
思いますので、少し考えてみます。

const menkyosho = () => {
//1個目のfor文 テーブルの行をループ
for (const row of record.AttachFile1.value) {

//2個目のfor文 免許書添付ファイルフィールドの添付ファイル数をループ
for (const menkyoshofile of row.value.Menkyosho.value) {

//このif文です。
if (menkyoshofile.length !== 0) {
menkyoshoCK = ‘OK’;
}else {
menkyoshoCK = ‘NG’;
}
}
}
return menkyoshoCK;
}

「いいね!」 1

プログラムの修正が出来ました。
添付ファイルフィールドのループは必要ないので、ループ処理をやめて
添付ファイル名の有無判断をすることにしました。

下記のように書き換えたところ、意図する処理ができました。

        const menkyosho = () => {
            for (const row of record.AttachFile1.value) {
                const menkyoshofile = row.value.Menkyosho.value.length;
                if (menkyoshofile == 0) {
                    menkyoshoCK = 'NG';
                } else {
                    menkyoshoCK = 'OK';
                }
            }
            return menkyoshoCK;
        }

ありがとうございました。

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