同じデータを使用してもPCによって処理される結果が違います。
何が原因なのかご教授お願いいたします。
kinton js
if (event.record.追加行指定.value > 0 &&
event.record.明細.value.length >= Number(event.record.追加行指定.value) &&
Math.round(Number(event.record.追加行指定.value)) === Number(event.record.追加行指定.value)) {
return event; ←Aのパソコンではこちらの処理が実行される
} else {
msg_ary.push(“正しい行Noを入力してください。”); ←Bのパソコンではこちらの処理が実行される
}
kintoneの開発を2台で行っています。
OS : Windows7
Chrome Version : 72.0.3626.109(64ビット)
実装メモリ パソコンA(DeskTop) 2GB
パソコンB(LapTop) 6GB
※ちなみに下記のように処理を変更したら同じ動きになりました。
kinton js
if (event.record.追加行指定.value > 0 &&
event.record.明細.value.length >= Number(event.record.追加行指定.value)) {
return event; ←A&B共にこちらの処理が実行される
} else {
msg_ary.push(“正しい行Noを入力してください。”);
}
余談ですが、Spinnerも書き方によっては2台のPCで挙動が異なることがあります。
パソコンA : showSpinner → hideSpinnerが実行される
パソコンB : showSpinnerだけ実行され、hideSpinnerが実行されない
原因不明の為、Spinnerをやめた
Isozumi様
お世話になっております.
cstapの江田と申します.
kinton.jsに下記の2行を追加して、パソコンAとパソコンBそれぞれでコンソール画面を確認してみてはいかがでしょうか?
コンソール画面の見方
console.log('origin:'+Number(event.record.追加行指定.value));console.log('round:'+Math.round(Number(event.record.追加行指定.value)));
江田様
ご返信有難うございます。
ご教授の通りコンソールログを出力した所、下記の結果となりました。
<<コンソールログ設定>>
console.log(‘volue:’ + event.record.追加行指定.value);
console.log(‘origin:’ + Number(event.record.追加行指定.value));
console.log(‘round:’ + Math.round(Number(event.record.追加行指定.value)));
if (event.record.追加行指定.value > 0 &&
event.record.明細.value.length >= Number(event.record.追加行指定.value) &&
Math.round(Number(event.record.追加行指定.value)) === Number(event.record.追加行指定.value)) {
<<結果>>
volue:1
origin:NaN
round:NaN
Number関数は他のところで使用していますが、問題なく使用できています。
他にどこの箇所を確認したらいいのかアドバイスをいただけたらうれしいです。
よろしくお願いいたします。
ブラウザの設定に依存しているという可能性もゼロではないと思います。
AとBでChrome拡張のインストール内容が違うということはないでしょうか?
また、Chrome以外のFirefox、IEなどではどうでしょうか。
Isozumi様
お世話になっております.
出力結果は,パソコンAとパソコンB両方同じだったということでしょうか?
「Number()」の戻り値が「NaN」となってしまっているのは,意図していた動作ではないような気がします.
「event.record.追加行指定.value」に全角数字を入れてしまっているということはないでしょうか?
また,話の本題とは少しそれますが,
Math.round(Number(event.record.追加行指定.value)) === Number(event.record.追加行指定.value)
という箇所は,「event.record.追加行指定.value」が整数かどうかを判定しているのでしょうか?
もしそのようでしたら,「Number.isInteger()」で判定できるので,そちらを使用した方があとで見た際にわかりやすいかと思います.
Ando様
パソコンAとパソコンBのChromeの拡張機能の差はありませんでした。
また、ウェブブラウザーについてですが、お客さんがChromeを使用している為、他のブラウザーのテストは行っていません。
※ガッツリAPI(js)を組み込んでいる為、他のブラウザーに変更できません。
江田様
パソコンAとパソコンBでは、結果が異なりました。
<<結果>>
パソコンA パソコンB
volue :1 volue :1
origin:1 volue :NaN
round :1 volue :NaN
元々仕様と違ったロジックが組み込まれていた為、削除すればいいだけなのですが
パソコン毎に違う動きをするのが気になったので、こちらに問合せをしてみました。
Math.round(Number(event.record.追加行指定.value)) === Number(event.record.追加行指定.value)
※念のためにこのPGの仕様は下記の通りです。
商品コードが1,000件以上存在する為、kintoneのルックアップから条件指定でデータを直接参照するのが困難です。
その為、商品マスタより条件指定のデータを一時的商品マスタにコピーして、そこからまた商品コードを参照しています。
Math.round(Number(event.record.追加行指定.value)) と Number(event.record.追加行指定.value) がどちらも NaN であるなら、
Math.round(Number(event.record.追加行指定.value)) === Number(event.record.追加行指定.value)
上記は
NaN === NaN
となるので、評価結果が false になるというのは JavaScript の仕様として理解できます。一方で、何故 NaN になるかというのは依然として不明のままで謎が深まるばかりですね。。。
ちなみに、
console.log(typeof event.record.追加行指定.value);
とするとどうなりますでしょうか?