ルックアップした値を比較してエラーメッセージを表示したい

ルックアップした値を比較してエラーメッセージを表示したいです。

別のマスタアプリに上限下限の数値があり
ルックアップで値を取得します。
値自体は問題なく取得でき、製品重量_上限、製品重量_下限に
数値が表示されます。

ここで下記コードで製品重量1という入力欄に数値を入れ、
この上限、下限よりも外れたらエラーメッセージを表示して登録できないようにしたいのですが、なぜかエラーメッセージは表示されず登録できてしまいます。
どこを修正すればよいかわからない状態なのですがどうすればよいでしょうか。


(() => {
  'use strict';

  kintone.events.on([
    'app.record.create.submit',
    'app.record.edit.submit'
],
 (event) => {
      const record = event.record;
      const upperLimit = record.製品重量_上限.value;
      const lowerLimit = record.製品重量_下限.value;
      

for (let i = 1; i <= 10; i++) {
   /*const weightLabel = `製品重量${i}`;*/

const weightLabel = `製品重量${i}`;

    alert(weightLabel);

  if(record.weightLabel.value >= upperLimit) {

    event.error = '規定値上限を外れています';

  }else if(record.weightLabel.value <= lowerLimit){
    alert(weightLabel);

    event.error = '規定値下限を外れています';
 
  }else if(record.weightLabel.value === ''){
    alert('OK');
}}
      return event;

    });
})();

console.log(record[weightLabel].value)等で出力してブラウザデバッグ画面(F12のコンソール)で段階的にどこまで正しく動いてるか確認してみてください。

上にも書きましたがrecord.weightLabel.valueだとフィールドを指定できていないと思うのでrecord[weightLabel].valueとすると値を取得できます。また、kintoneの値は基本文字列で取得できるの数値比較する際にはNumber()やparseIntで適宜数値に変更してあげてください。

1 Like

ありがとうございます。
コードを下記で修正したところ製品重量3に100と入れたのですが
alertメッセージでは「製品重量1」と表示され、かつそのまま保存されてしまいました。weightLabel自体は製品重量1が入っているようですがrecord[weightLabel].valueとしてもフィールドコードとして認識していないのでしょうか。

(() => {
  'use strict';

  kintone.events.on([
    'app.record.create.submit',
    'app.record.edit.submit'
],
 (event) => {
      const record = event.record;
      const upperLimit = record.製品重量_上限.value;
      const lowerLimit = record.製品重量_下限.value;
      
for (let i = 1; i < 10; i++) {
   const weightLabel = `製品重量${i}`;

  alert(weightLabel);

  if(record[weightLabel].value >= upperLimit) {

    event.error = '規定値上限を外れています';

  }else if(record[weightLabel].value <= lowerLimit){
 
    event.error = '規定値下限を外れています';
 
  }else{
    record[weightLabel].value = '';
  }
      return event;
}
    });
})();

上にも書きましたが、console.logで出力した結果はどうでしたか?
weightLabelの名前やrecord[weightLabel].valueの値はどうかデバッグしてみてください。

return eventがループ内にあるので1回目の処理でreturnして終了しています。
return eventを}の一つ下へ下げて最終的な結果をreturnしてあげてください。

1 Like

失礼しました

console.log(numbr(record[weightLabel].value))
console.log(record[weightLabel].value)

上記どちらも試したところ「製品重量1」が表示されていました。
ログには下記が表示されていました。

VM303:1 Uncaught ReferenceError: numbr is not defined
at :1:9

数値でなく文字列として認識されているということでしょうか。

なお、
>return eventがループ内にあるので1回目の処理でreturnして終了しています。
>return eventを}の一つ下へ下げて最終的な結果をreturnしてあげてください。

上記をしたところ製品重量1に100と入れたところアラートでは「製品重量1」と表示され、「規定値下限を外れています」と表示され、それ以外に100と入れるとメッセージもなく登録されてしまいました。

なお、一度ループをなしにして下記にしたところ動くようになりました。

(event) => {
      const record = event.record;
      const upperLimit = Number(record.製品重量_上限.value);
      const lowerLimit = Number(record.製品重量_下限.value);
      const weight1Value = Number(record['製品重量1'].value);

 console.log(typeof(weight1Value));
  console.log(typeof(upperLimit));
   console.log(typeof(lowerLimit));
  

ただ、下記のようにループの状態で数値にしたところ
コンソールでは

number
NaN

と表示されていました。
ループにすると数字でなく文字列になっている?ようです。
kintone上では直接フィールドコードで書かないと
文字列扱いで値をとれないなど何かあるのでしょうか。

for (let i = 1; i < 10; i++) {
   const weightLabel = `製品重量${i}`;

      const record = event.record;
      const upperLimit = Number(record.製品重量_上限.value);
      const lowerLimit = Number(record.製品重量_下限.value);
      const weight1Value = Number(weightLabel);

   console.log(typeof(weight1Value));
   console.log(weight1Value);

自己解決しました。
いったん ‘製品重量’ + i;として文字列の状態のものを変数に入れ
その後すべてNumberに変換したところうまくいきました。

const record = event.record;

            for (let i = 1; i < 10; i++) {
                const weightLabel = '製品重量' + i;
                const weightValue = Number(record[weightLabel].value);
                const upperLimit = Number(record.製品重量_上限.value);
                const lowerLimit = Number(record.製品重量_下限.value);

                if (weightValue > upperLimit) {

                    event.error = weightLabel + 'の規定値上限が外れています';

                } else if (weightValue < lowerLimit) {

                    event.error = weightLabel + 'の規定値下限が外れています';

                } else {
                }
            }
1 Like

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