計算フィールドの値を判断してエラー表示させたい

「出発距離」と「到着距離」という数字フィールドがあり、「到着距離」から「出発距離」を引いた値を数字フィールドの「移動距離」に入れています。このとき、「移動距離」が0以下のときはエラーを表示させたいので、JavaScriptを作成したのですが、機能しません。

ちなみに、「移動距離」を「到着距離」に変更すると、正常に機能しますので、「移動距離」が無効になっているように思えます。

(function() {
    "use strict";
    kintone.events.on(['app.record.edit.change.到着距離'], (event) => {
        var record = event.record;
      var PG_kyori = record['移動距離']['value']; 
        if (PG_kyori <= 0 ) {
            record['移動距離'].error = '入力エラー';
        } else {
//            event.error = null;
            record['移動距離'].error = 'OK';
            }
    return event;
    });
})();

 

hirofu 様

こちらの

varPG_kyori = record['移動距離']['value']; 

varPG_kyori = Number(record['移動距離']['value']); 

に変えてみるとどうでしょうか?
恐らく現状ですと、文字列型で値を取得されてるかと思われます。

ご指摘の通り修正してみましたが、結果は同じでした

「ちなみに、「移動距離」を「到着距離」に変更すると、正常に機能しますので、「移動距離」が無効になっているように思えます。」

の意味がエラーの表示させたい場所のことをいっていたのですね。

計算フィールドにはエラー表示を出せないみたいですね。

レコード追加イベント – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/201941984#step6

以下のフィールドは、エラー値を設定しても、フィールドにエラーは表示されません。

  • (略)
  • 計算

計算フィールドにはエラー表示できないのですね。
ご指摘ありがとうございました。

数字フィールドだと書かれてあったので、数値フィールドに何かしらで計算させているのだろうと考えておりました。

移動距離フィールドを数値フィールドか文字列一行フィールドに変えていただいて、以下のようなコードで書くとできるのではないかと思われます。

(function() {
  "use strict";
  kintone.events.on(['app.record.edit.change.到着距離'], (event) => {
      var record = event.record;
      if(!record.出発距離.value)return;
      record.移動距離.value = Number(record.到着距離.value) - Number(record.出発距離.value);
      var PG_kyori = Number(record.移動距離.value);
      if (PG_kyori <= 0 ) {
          record.移動距離.error = '入力エラー';
      } else {
//            event.error = null;
          record.移動距離.error = 'OK';
          }
  return event;
  });
  kintone.events.on(['app.record.edit.change.出発距離'], (event) => {
      var record = event.record;
      if(!record.到着距離.value)return;
      record.移動距離.value = Number(record.到着距離.value) - Number(record.出発距離.value);
      var PG_kyori = Number(record.移動距離.value);
      if (PG_kyori <= 0 ) {
          record.移動距離.error = '入力エラー';
      } else {
//            event.error = null;
          record.移動距離.error = 'OK';
          }
  return event;
  });
})();

Yuki Minamitaniさん、ありがとうございます。

私は引き算ではなく、大小比較で実装しました

(function() {
    "use strict";
    kintone.events.on(['app.record.edit.change.到着距離'], (event) => {
        var record = event.record;
        var PG_start = Number(record['出発距離']['value']);
        var PG_end = Number(record['到着距離']['value']);
        if (PG_end <= PG_start ) {
            record['到着距離'].error = '入力エラー';
      } else {
            record['到着距離'].error = null;
            }
    return event;
    });
})();

なるほど、そちらの方が現状のフィールドに変更加えなくてもよさそうですね。
出発距離フィールドに対してのChangeイベントも作成された方がいいかなと感じました。

出発距離フィールドに対してのChangeイベントも作成された方がいいかなと感じました。

おっしゃる通りですね。
早速、実装します。

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