サブテブールに同じレコード追加すると削除したい。

いつもお世話になっております。タムです。

下のイラストのように、製品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 イベントをつかいたいですが、