ルックアップフィールドの値を保存ボタン押下時に別のルックアップフィールドにコピーしたい
保存を押しても値がコピーされていない
(function() {
'use strict';
// レコード保存前イベント
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
// ルックアップフィールド1の値を取得
var lookupFieldValue = record['今回病院'].value;
// ルックアップフィールド2に値を設定
record['前回病院'].value = lookupFieldValue;
return event;
});
})();
mak さん、こんにちは。
田中太郎と申します。
上記、うまくいかない理由は2つございます。
①ルックアップフィールドは、値を入力した後に、取得ボタンが起動することで、値が設定されます。
下記、URLを参考に、valueの設定後、
record['前回病院'].lookup = true;
を行うことで、ルックアップの取得が行われます。
ルックアップを自動取得する
②上記の取得処理は、保存時イベントでは行うことができません。
下記URLの、
「ルックアップを自動取得する」の行の
「保存するとき」の列を見ていただくと×になっており、
つまり、保存時イベントでは「ルックアップ」フィールドの値の設定はできません。
/ja/kintone/docs/js-api/events/event-object-actions/
なら、どうすれば良いかという話となりますが方法は、2つあると思います。
①編集(新規登録)画面で、「今回病院」のフィールドの値が変わった時に、
「前回病院」に値を設定し、ルックアップの取得を行う。
(ルックアップフィールド自体にchangesイベントは使えませんので、ご注意ください。)
②保存成功後のイベント(submit.success)で、REST APIを用いて該当レコードを更新する。
REST APIは少しハードルが高いかと思いますので、仕様の検討は少し必要となってしまいますが、①の方法が良いかと思います。
頑張ってください。
「いいね!」 1
田中様
ご回答いただきありがとうございます
少し仕様を変更して保存ボタン押下時ではなく、フィールドにコピーボタンを設置してルックアップフィールドの値を
コピーするように変更致しました。
レコード編集画面ではコピーできるのですがレコード追加画面ではルックアップフィールドの値を取得できません
原因分かりますでしょうか
下記レコードになります
(function() {
‘use strict’;
// レコード保存前イベント
kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’], function(event) {
var record = event.record;
const space = kintone.app.record.getSpaceElement(‘space’);
const button = document.createElement(‘button’);
button.textContent = 'コピー';
space.appendChild(button);
button.addEventListener('click', () => {
const current = kintone.app.record.get();
var lookupFieldValue = record['test1'].value;
console.log(lookupFieldValue);
// ルックアップフィールド2に値を設定
current.record['test2'].value = lookupFieldValue;
current.record['test2'].lookup = true;
kintone.app.record.set(current);
});
return event;
});
})();
クリックイベント内の2行目をご確認ください。
var lookupFieldValue = record['test1'].value;
一つ上の行の
const current = kintone.app.record.get();
で、現在のレコードの情報を取ってきていますが、
currentの変数内のルックアップ1の値ではなく、
eventオブジェクト内のrecord(画面表示時の情報)から、取ってきてしまっていますね。
var lookupFieldValue = current.record['test1'].value;
に直すことで、うまくいくのではと思います。
「いいね!」 1
田中様
ご回答いただきありがとうございます
無事動作すること確認致しました