自動計算結果が一致しない場合にエラー表示を出したい

お世話になります。

自動計算フィールドの結果2点を照らし合わせ、
数値が一致しない場合は入力時点でエラーメッセージを表示すると共に
保存できない仕様にしたいと考えております。

下記リンクのものがイメージに近く、
今回を機にJavaScriptに挑戦しているのですが、初心者の為上手くいかず難航しております。
https://developer.cybozu.io/hc/ja/community/posts/360054877371

また、支払方法を複数のプルダウンメニューで設定しているのですが、
それぞれで選択必須ではなく「いずれか1つは選択必須」の仕様にすることは可能でしょうか。

JavaScriptのカスタマイズに詳しい方がいらっしゃいましたら
大変申し訳ございませんがアドバイス頂ければと存じます。
宜しくお願いいたします。

(function() {
"use strict";
kintone.events.on(["app.record.creat.change", "app.record.edit.change"], function(event) {
var record = event.record;
var check1 = record["総合計"]['value']; //総合計
var check2 = record["支払金額合計"]['value']; //支払金額合計
if (check1.equals(check2)) {
event.error = "金額が一致しません";
} else {
event.error = null;
}
return event;
});
})();

テクバンの廣瀬です。

 

確認させていただきましたが以下の点を見直す必要がございます。

1:イベントタイプの記述が合っていません。値変更時はどの項目の値変更時なのかを指定する必要があります。

詳細はこちらのリンクを確認してください。

2:createの綴りがcreatになっています。

3:check1.equals(check2)という書き方もありますが、単純にcheck1 !== check2にしたほうがよさそうです。

4:>エラーメッセージを表示すると共に保存できない仕様

値変更時エラー後、保存すると保存できる仕様なので、保存時にも同じエラーを入れればできそうです。

以上から、支払方法のいずれか1つを必須も含め、以下のような記載になるかと思いますのでご確認ください。

 

(function () {

    "use strict";

    kintone.events.on(["app.record.create.change.総合計", "app.record.edit.change.総合計"], function (event) {

        var record = event.record;

        var check1 = record["総合計"]['value']; //総合計

        var check2 = record["支払金額合計"]['value']; //支払金額合計

        console.log(event);

        console.log(check1);

        console.log(check2);

        if (check1 !== check2) {

            event.error = "金額が一致しません";

        } else {

            event.error = null;

        }

        return event;

    });

    kintone.events.on(["app.record.creat.submit", "app.record.edit.submit"], function (event) {

        var record = event.record;

        var check1 = record["支払方法1"]['value'];

        var check2 = record["支払方法2"]['value'];

        var check3 = record["支払方法3"]['value'];

        if (check1 === undefined && check2 === undefined && check3 === undefined) {

            event.error = "支払い方法を選択してください。";

        } else {

            var check4 = record["総合計"]['value']; //総合計

            var check5 = record["支払金額合計"]['value']; //支払金額合計

            if (check4 !== check5) {

                event.error = "金額が一致しません";

            } else {

                event.error = null;

            }

        }

        return event;

    });

})();

廣瀬 光太郎

お世話になります。
丁寧にご返信くださり誠にありがとうございました。

早速修正し試みたところ、前半は上手くエラー表示を出すことができましたが、
後半の支払方法未選択のエラー表示を上手く設定することができません。

それぞれフィールドはドロップダウン
フィールド名:支払方法①、支払方法②、支払方法③
フィールドコード名:支払方法1、支払方法2、支払方法3
選択肢の数:1、5、5

「必須項目にする」はチェックを付けず、初期値は未選択としておりますが、
フィールド設定側で修正すべき点はありますでしょうか。

力不足で誠に申し訳ございません、今一度お力添え頂ければ幸いです。
何卒宜しくお願い申し上げます。

テクバン廣瀬です。

行き違いになっているかもしれないのですが、一部うまくいかない箇所がございましたのでソースコードを修正しております。ご確認いただけますでしょうか。(再度貼っておきます。)

(function () {

"use strict";

kintone.events.on(["app.record.create.change.総合計", "app.record.edit.change.総合計"], function (event) {

var record = event.record;

var check1 = record["総合計"]['value']; //総合計

var check2 = record["支払金額合計"]['value']; //支払金額合計

console.log(event);

console.log(check1);

console.log(check2);

if (check1 !== check2) {

event.error = "金額が一致しません";

} else {

event.error = null;

}

return event;

});

kintone.events.on(["app.record.creat.submit", "app.record.edit.submit"], function (event) {

var record = event.record;

var check1 = record["支払方法1"]['value'];

var check2 = record["支払方法2"]['value'];

var check3 = record["支払方法3"]['value'];

if (check1 === undefined && check2 === undefined && check3 === undefined) {

event.error = "支払い方法を選択してください。";

} else {

var check4 = record["総合計"]['value']; //総合計

var check5 = record["支払金額合計"]['value']; //支払金額合計

if (check4 !== check5) {

event.error = "金額が一致しません";

} else {

event.error = null;

}

}

return event;

});

})();

またご質問いただいた点について回答します。

>「必須項目にする」はチェックを付けず、初期値は未選択としておりますが、
フィールド設定側で修正すべき点はありますでしょうか。

→フィールド側で修正すべき点は特にございません。

それでもうまくいかない場合はお手数ですがどの部分がうまくいかないか教えていただけますでしょうか。(エラー表示されずに保存できる、など)

 

廣瀬 光太郎

お世話になります。
質問に関しまして、併せてご回答下さりありがとうございました。

再投稿頂きましたコードにて試みたところ、
いずれのエラー表示もされずに保存できてしまいました。

先ほどのうまくいかない部分ですが、9:51頃に頂いておりますソースコードの際は
前半の総合計=支払金額合計不一致のエラーのみ表示され、
後半の支払方法未選択時は、エラー表示されずに保存できる状況でした。

また、助言頂いている中で誠に申し訳ないのですが、
総合計=支払金額合計を照らし合わせ、不一致時にエラーとするソースコードに
「顧客コード(ドロップダウン)が”A”の場合を除く」を追加することは可能なのでしょうか。

別のドロップダウンフィールドで「顧客コード」というものを作成しているのですが、
顧客コードにAを選んでいる案件においては
総合計と支払金額合計が一致しない場合があることを失念しておりました。

ご面倒をお掛けし申し訳ございません。
こちらでもできる限り努力したいと思います。何卒宜しくお願い申し上げます。

テクバン廣瀬です。

私の方でcreatをcreateに修正する点を失念しておりました。

顧客コードの件含めて以下でいかがでしょうか。

(function () {

    "use strict";

    kintone.events.on(["app.record.create.change.総合計", "app.record.edit.change.総合計"], function (event) {

        var record = event.record;

        var check1 = record["総合計"]['value']; //総合計

        var check2 = record["支払金額合計"]['value']; //支払金額合計

        var clientCode = record["顧客コード"]['value'];

        if (check1 !== check2 && clientCode !== "A") {

            event.error = "金額が一致しません";

        } else {

            event.error = null;

        }

        return event;

    });

    kintone.events.on(["app.record.create.submit", "app.record.edit.submit"], function (event) {

        var record = event.record;

        var check1 = record["支払方法1"]['value'];

        var check2 = record["支払方法2"]['value'];

        var check3 = record["支払方法3"]['value'];

        if (check1 === undefined && check2 === undefined && check3 === undefined) {

            event.error = "支払い方法を選択してください。";

        } else {

            var check4 = record["総合計"]['value']; //総合計

            var check5 = record["支払金額合計"]['value']; //支払金額合計

            var clientCode = record["顧客コード"]['value'];

            if (check4 !== check5 && clientCode !== "A") {

                event.error = "金額が一致しません";

            } else {

                event.error = null;

            }

        }

        return event;

    });

})();

ご注意いただきたいのは、総合計の値が変わった時に発動するようにしているので、支払金額合計が変わったタイミングを

追加したい場合はイベントを適宜追加してください。(保存時は不要)

また、顧客コードのフィールドコードを「顧客コード」としていますのでご認識ください。

廣瀬 光太郎

お世話になります。
頂きましたコードで条件が全てクリアしたことを確認いたしました。
ご対応くださり誠にありがとうございます。

しかし、こちらのアプリが別アプリの登録情報をアクション機能で転記する場合があり、
アクション時は支払方法1~3を未選択の状況で保存する為、
また別の問題が起こってしまいました…。

いずれかの支払金額に数値が入っている場合、それに対する支払方法は選択必須など考えてみましたが、
適切なコードなどの解決策が浮かばず、限界があるため、
今後の運用をどうするか、社内で改めて検討したいと思います。

この度は丁寧で分かりやすくご回答くださり、本当にありがとうございました。
またご縁がございましたらその際は宜しくお願いいたします。

テクバン廣瀬です。

条件クリアのご連絡ありがとうございます。クリアできたとのことでこちらもお役に立てて何よりです。

 

アプリアクションでのデータのみ未選択状態で保存については、

項目の持たせ方(アプリアクションでのコピー用項目)とコード(その項目の値を条件に処理など)を

組み合わせることで実現は可能かと思われます。

運用面含めご検討されるとのことなので、ご不明点ございましたらご質問ください。

以上になります。よろしくお願いいたします。