お世話になっております。
レコードから編集画面を開いた時の処理について質問です。
【やりたいこと】
サブテーブルの一番下の行情報をドロップダウンに反映させたい。
【確認したいこと】
以下のソースを作成し、画面表示時に反映はできるのですが
一瞬だけ反映される前の情報が見えてしまう状態となっています。
一瞬だけ見えてしまうのを回避する方法があれがご教示いただけませんでしょうか?
kintone.events.on("app.record.edit.show", function(event) {
//レコード格納
var rec = event;
//表データが存在しない場合
if(rec.record['Table'] === undefined)return;
//データ取得
var rec_table = rec.record['Table'].value.getLastVal().value;
rec.record['ドロップA'].value = rec_table['ドロップダウンA'].value;
rec.record['ドロップB'].value = rec_table['ドロップダウンB'].value;
rec.record['ドロップC'].value = rec_table['ドロップダウンC'].value;
var makeData = function(){
kintone.app.record.set(rec);
return event;
};
setTimeout(makeData, 0);
});
//最後の列を取得
Array.prototype.getLastVal = function (){ return this[this.length -1];};
富永さん
イベント処理は、画面表示後に動作しますのでどうしても変更前の情報が一瞬見えてしまいますね。
ただ現在のコードだと setTimeout で kintone.app.record.set(rec); としているので更に表示が遅くなります。
単純に event.record を変更して、返してあげると変更されますので少しは早くなると思います。
kintone.events.on("app.record.edit.show", function(event) {
//レコード格納
var record = event.record;
//表データが存在しない場合
if (record['Table'].value.length === 0) return event;
//データ取得
var rec_table = record['Table'].value.getLastVal().value;
record['ドロップA'].value = rec_table['ドロップダウンA'].value;
record['ドロップB'].value = rec_table['ドロップダウンB'].value;
record['ドロップC'].value = rec_table['ドロップダウンC'].value;
return event;
});
//最後の列を取得
Array.prototype.getLastVal = function() { return this[this.length - 1]; };
あと要件によりますが、テーブルのドロップダウンA,B,C が変更されたタイミングで、ドロップA,B,C を変更されたらいかがでしょうか?
rex0220様
ご対応いただきありがとう御座います。
ご教示頂いた内容で試しては見たのですがconsole上では値が変わっているのですが画面上に表示されません。
別のテストアプリを作成し、そこだと即時に反映されることを確認できたのですが
そこで一つ疑問に思っていることがあり、
ドロップダウンA,B,Cの下に他にも50項目程、文字列等のフォームパーツが存在するのですがそれらが原因で画面上に反映できないということは有り得るのでしょうか・・・?
他の項目が原因で反映できなくなることは無いと思います。
kintone.app.record.set で反映できていたということでしたので、たぶん他の原因だと思います。
他に JavaScript カスタマイズまたはプラグインがありませんか?
他の “app.record.edit.show” イベントで return event; していないと画面に反映されません。
rex0220様
ありがとうございます。
確認しました結果こちらで入れているプラグインでreturn event;をしていない箇所が見つかり、
試しにプラグインを削除した結果、反映できることが確認できました。
こちらの確認不足で手間を取らせてしまい大変申し訳御座いませんでした。
反映処理についてはrex0220様から頂いた処理で試させていただきます。
ご対応いただきありがとう御座いました。