ルックアップした内容を複数に分けることはできますか?

上の画像のように、ルックアップで取得する際に、

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を活用していきましょう!