上の画像のように、ルックアップで取得する際に、
Bのように1フィールドにまとまった内容を、「、」区切りでテーブルへ分割することはかのうでしょうか?
よろしくお願いいたします。
上の画像のように、ルックアップで取得する際に、
Bのように1フィールドにまとまった内容を、「、」区切りでテーブルへ分割することはかのうでしょうか?
よろしくお願いいたします。
uryuさん
こんにちは。
マスタのフィールドAが、ルックアップ先のテーブルAのフィールドA
マスタのフィールドBが、ルックアップ先のテーブルBのフィールドB
へ格納される処理を書いてみます。
新規作成画面を開いた際に、マスタからレコード番号1をGETし、各フィールドをテーブルに格納する処理です。
マスタからGETする部分は、query等を適宜変更してください。
kintone.events.on('app.record.create.show', function(event) {
// GETパラメータ
var params = {
app: MASTER_APP_NO,
query: '$id = 1',
fields: ['A', 'B']
};
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {
// GET成功
var myRecord = kintone.app.record.get();
myRecord.record.テーブルA.value = [];
myRecord.record.テーブルB.value = [];
var fieldA = resp.records[0].A.value; // マスタから取得したレコードのフィールドAの値
var fieldAArray = fieldA.split('、'); // 「、」区切りで配列に格納
var fieldB = resp.records[0].B.value; // マスタから取得したレコードのフィールドBの値
var fieldBArray = fieldB.split('、'); // 「、」区切りで配列に格納
// マスタのフィールドAの値をテーブルAのフィールドAに格納
for (var i = 0; i < fieldAArray.length; i++) {
myRecord.record.テーブルA.value.push({
value: {
A: {
value: fieldAArray[i],
type: 'SINGLE_LINE_TEXT'
}
}
});
}
// マスタのフィールドBの値をテーブルBのフィールドBに格納
for (var i = 0; i < fieldBArray.length; i++) {
myRecord.record.テーブルB.value.push({
value: {
B: {
value: fieldBArray[i],
type: 'SINGLE_LINE_TEXT'
}
}
});
}
kintone.app.record.set(myRecord);
}).catch(function(error) {
// GET失敗
console.log(error);
return event;
});
return event;
});
koichi様
ご丁寧に教えていただきありがとうございます。
教えていただいた通りやってみたところ、無事できました。
ありがとうございます。とても感動しております。
できればもう一つ教えて頂きたいことがあります。
新規作成画面を開いた際に反映されるのではなく、
ルックアップ先アプリに、ルックアップボタンを追加し、そこから引き出すレコードを選べるようにはできませんでしょうか?
同じようなことができるのでしたら、ルックアップボタンでなくても構いません。
もしよろしればご教示いただきたいです。
どうぞよろしくお願いいたします。
uryu様
ご確認ありがとうございます。
可能ですが、その前に1点確認させてください。
マスタには、頂いた画像のような「A」「B」フィールド以外のフィールド(例えば「X」)があり、
ルックアップ先アプリでは、その「X」をルックアップフィールドで指定する形でしょうか?
それとも、「A」や「B」をルックアップフィールドで指定する形でしょうか?
これによって、処理が若干変わってきます。
koichi様
ご返信遅くなってしまい申し訳ございません。
希望としましては、「A」や「B」をルックアップフィールドで指定する形になります。
その際、Bに「、」があれば図のように分割されてほしいです。
どうぞよろしくお願いいたします。
uryu様
下図のようにルックアップにより参照するフィールドがそれぞれ必要になります。
例では、A、Bを参照していますが、他にマスタから参照するフィールドがあれば、そちらでも問題ありません。
// ルックアップAが取得された時(ルックアップフィールドではなく、参照されたフィールドをchangeに指定)
kintone.events.on('app.record.create.change.A', function(event) {
var record = event.record;
record.テーブルA.value = [];
var fieldA = record.ルックアップA.value;
var fieldAArray = fieldA.split('、');
for (var i = 0; i < fieldAArray.length; i++) {
record.テーブルA.value.push({
value: {
テーブルA_A: {
value: fieldAArray[i],
type: 'SINGLE_LINE_TEXT'
}
}
});
}
return event;
});
// ルックアップBが取得された時(ルックアップフィールドではなく、参照されたフィールドをchangeに指定)
kintone.events.on('app.record.create.change.B', function(event) {
var record = event.record;
record.テーブルB.value = [];
var fieldB = record.ルックアップB.value;
var fieldBArray = fieldB.split('、');
for (var i = 0; i < fieldBArray.length; i++) {
record.テーブルB.value.push({
value: {
テーブルB_B: {
value: fieldBArray[i],
type: 'SINGLE_LINE_TEXT'
}
}
});
}
return event;
});
koichi様
ありがとうございます。
無事設定できました。
質問なのですが、
ルックアップAでAを取得してたら、
テーブルAのテーブルA_Aに何か入力したら反映される動作であってますでしょうか?
app.record.create.change.A
の最後の「A」が指しているのは、テーブルAであってますかでしょうか?
何度もお願いしてしまい申し訳ございません。
よろしくお願いいたします。
uryu様
app.record.create.change.Aの「A」は、先のコメントの画像のフィールド「A」(グレーアウトのフィールド)です。
ちなみに、「change.フィールド」でルックアップフィールドを指定できれば良いのですが、
「change.フィールド」のイベントは、ルックアップを指定できないという制約があります。
koichi様
ありがとうございます。
「A」(グレーアウトのフィールド)がマスターアプリを指しているのかと勘違いしていました。
フィールドを追加してみたところ無事作動しました。
とても感謝しております。
koichi様のおかげで無事運用できそうです。
この度は本当にありがとうございました。
また機会がありましたら、ぜひよろしくお願いいたします。
uryu様
解決されたようで何よりです。
お互いkintoneを活用していきましょう!