数量 ドロップダウン 1から10までの整数
商品名 計算 数個のフィールドの文字結合
で、以下のようなプログラムを書いております。
‘鉄線Φ0.9(工場1F)’ と ‘鉄線Φ0.9(倉庫1F)’) の合計を
‘鉄線Φ0.9(合計)’ のレコードの 数量 にするようにしたいのですが、
以下だと、途中のtotalの計算はできるのですが、最後の代入がうまく
いかず、変わりません。デバックでみるとエラーなく走るのですが、
やはり代入がうまくいっていないようです。
各数量も5としてあるので、合計は10となり、ドロップダウンの値が
あるものにしているのですが、型 等の問題でしょうか?
(() => {
‘use strict’;
const events = [‘app.record.index.show’];
kintone.events.on(events, (event) => {
const pcsField = kintone.app.getFieldElements(‘数量’);
let total = 0;
for (let i = 0; i < pcsField.length; i++) {
const record = event.records[i];
if (record['商品名'].value === '鉄線Φ0.9(工場1F)' ||
record['商品名'].value === '鉄線Φ0.9(倉庫1F)') {
total = total + Number(record['数量'].value);
} else {
}
}
for (let i = 0; i < pcsField.length; i++) {
const record = event.records[i];
if (record['商品名'].value === '鉄線Φ0.9(合計)') {
record['数量'].value = String(total);
} else {
}
}
return event;
})})();
mura
2
デバックでみるとエラーなく走るのですが、
やはり代入がうまくいっていないようです。
具体的にどのようなデバッグをされましたでしょうか?
ブレークポイントをはって最後の代入の部分の変数がどうなってるかみてみるのが問題の切り分けとしてまずはいいかとおもいます!(エラーはでてなくとも想定外の動きをしている可能性があるため)
https://cybozu.dev/ja/id/42b1d7ce01fd5d9b53dbf4df/#methods-list-4
ご回答ありがとうございます。
実は、muraさんには以前も回答いただき、その時もデバック環境を教えてもらいました。
こちらで、デバック環境で、ドロップダウンの下にconst aaa = ''を記入して、そこでブレークさせたところ、.valueとしては、10が入っているのに、ドロップダウンのフィールドが変更されないようです。
回答後に、テストとして文字列、数値のフィールドも作り、それぞれのvalueにString(total)やNumber(total)を同じ記載で書いてみましたが、代入されなかったので、ここの記述ではない何かほかに問題あるのかもしれません。
JSやkintoneはあまり詳しくないですが、色々調べながら、やってみます。
一応、こんな感じです。
ちなみに、コメントアウトしている10を代入しても、やはり変更されなかったので、この記述ではだめなのか、その他に原因があるのか
調べつつ、色々試したいと思います。
こんにちわ。
一覧画面でレコードを更新するにはkintoneRESTAPIを使用する必要があると思います。
なお、リスト画面を表示するたびに全件の更新が実行するとおそらくAPIの上限値に到達してしまう可能性があります。よって、RESTAPIを走らせる際にどこかのフィールドにフラグを立てて管理するなどの工夫も必要だと思います。
mura
6
すいません、 @lemon_sour さんのおっしゃるとおりですね!
一覧画面表示後のイベントということに気づきませんでした、その場合はeventに変更点を詰めてreteurnしても反映されません。
保存時などのタイミングに変更することをおすすめします。
ご回答ありがとうございます。添付の画面ですね。
ただ、
const events = [‘app.record.index.edit.submit’]; にしても、
最初のif分に来た時点で終わったり(?)(ブレーク貼ってもブレークせずに終わる)、
const events = [‘app.record.index.edit.change.数量’]; に変更しても、
最初の const record = event.records[i]; で
Uncaught TypeError: Cannot read properties of undefined (reading ‘0’)
というエラーが表示されたりして、
とりあえず、できるのかもしれませんが、このようにfor文で回して意図した動作をするのは難しそうです(私のJSの実力不足かもしれませんが)。
似たようなプログラムで、for文で、 .style.backgroundColor を変更する
のを書いたので、これでもできると思ったのですが・・・
ご回答ありがとうございます。
違う返信にも書きましたが、どうも私の記述では意図した動作は難しそうです。
lemon_sourさんの回答をベストアンサーとさせていただきます。
1 Like