いつもお世話になっております。タムです。
下のイラストのように、製品IDはルックアップで使っています。もし同じ製品ID取得したら、すぐにそのROWを削除したいです。javascriptでカスタマイズしてみたが、追加したROWは何番目か分からなくて、削除するのが悩んでいます。アドバイスをお願いいたします。
どうぞよろしくお願いいたします。
いつもお世話になっております。タムです。
下のイラストのように、製品IDはルックアップで使っています。もし同じ製品ID取得したら、すぐにそのROWを削除したいです。javascriptでカスタマイズしてみたが、追加したROWは何番目か分からなくて、削除するのが悩んでいます。アドバイスをお願いいたします。
どうぞよろしくお願いいたします。
tampv さん
change イベントにテーブルもしくは、テーブル内のフィールドに
変更があった行の中身を取得する row というプロパティがあります。
row の中身を取得すれば変更があったところはとれますよ。
今回の場合は恐らくテーブル追加時ではなく、ルックアップ取得時ですよね?
その場合は、ルックアップが change イベントが対応していないので、ルックアップで、入力されるフィールドを change イベントにかければ
変更があった行の中身を取得できると思いますよ。
しぶいさん、
返事していただき、ありがとうございました。
今回の場合は恐らくテーブル追加時ではなく、ルックアップ取得時ですよね?
その通りです。
var events = [
'app.record.create.change.製品名'
];
このイベントで、レコードデータまだ保存していないのでrow.id: null, 画面に単価のデータ表示したのに、単価.value: “” です。
changes['row'].value['単価'].value = 0;
セットしてみたが、できなかったです。
changes['row'].value['製品名'].value = ""; =>これはOKです。
それと、例えば先にたくさんブランクROW追加して、それから順番に入力せず、row[i] に入力する。そのときに i が知りたいです。
tampv さん
ちょっとハマってしまった部分があったので、検証に時間かかりました。
tampv さんが検証した通り、保存されるまでは、row.id は取得できません。
キャプチャを見る限り、ルックアップで入力される最後のフィールドが、単位だと思いますので、
単位を change イベントにかけてルックアップで追加されたフィールドがすべてとれます。
それを利用して、追加された “製品ID” を取得します。
先に行を追加していた場合を考えるとテーブル行をすべて回さなければなりません。
そのうえで、一緒だった時の回数見て2回目だったら、消すという風にやればできました。
2回目というのは、その判定をしないと、既存のフィールドが判定されるからです。
kintone.events.on(["app.record.edit.change.単位", "app.record.create.change.単位"], function(event) {
// 追加されたフィールドの "製品ID" の値
var add_product = event.changes.row.value.製品ID.value;
// チェック回数
var check_num = 0;
// テーブルの行数取得
var Table_length = event.record.Table.value.length;
// テーブルの行数分のループ
for(var i = 0; i < Table_length; i++) {
// すべてのテーブル行の "製品ID"
var oll_product = event.record.Table.value[i].value.製品ID.value;
// 追加した値と既存の値がかぶったらチェック回数加算
if(add_product === oll_product) {
check_num += 1;
// チェック回数が2回目だったら追加されたフィールドの初期化
if(check_num === 2) {
event.record.Table.value[i].value.製品ID.value = "";
event.record.Table.value[i].value.製品名.value = "";
event.record.Table.value[i].value.出荷種別.value = "";
event.record.Table.value[i].value.単位.value = "";
}
}
}
return event;
});
あまりスマートとは言えませんので、改良できる部分があったら、改良してください。
あと、検証時にはすべて文字列でやってますので、初期化の部分は、このページを見てフィールドに応じた空の値をセットしてください。
しぶいさん、
ご返事、どうもありがとうございました。
ルックアップで入力される最後のフィールドが、単位だと思いますので、
単位を change イベントにかけてルックアップで追加されたフィールドがすべてとれます。
その通りです。今日の午後チェックしてみました。
解決するコードまで書いていただき、本当にありがとうございました。
初めまして、KINTONE環境を触れるので、カスタマイズはいろいろな問題が出てきています。
また、ご指導のほどよろしくお願いいたします。
ありがとうございました。
しぶいさん、
お疲れ様です。
しぶいさんが教えてくれた通り、解決できましたが、もし「単位」の値がなければイベントが起こらないですよね。これがちょっと困ります。「製品名」絶対値があるから、「製品名」のchange イベントをつかいたいですが、