別アプリに存在するフィールド値を自動で入力したい。

お世話になります。

現在kintone外のシステムに.csvファイルにて連携するため、商品登録用のアプリを作成しております。アプリ「商品出力マスタ」には商品名のみがあらかじめセットされており、編集画面を開いた際に、アプリ「商品マスタ」から自動で商品コードが「商品出力マスタ」へ入力されるように動かしたいと思っております。以下URLのスクリプトを参考に作成しましたが正常に動作しません。当方開発初心者のため、申し訳ございませんがご助力のほどよろしくお願いいたします。

URL:https://cybozudev.zendesk.com/hc/ja/articles/900001057206-kintone-API-%E3%81%AE%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC

 

商品名:フィールドコード(両アプリ共通)

商品コード:フィールドコード(両アプリ共通)

アプリID:商品マスタのアプリID

 

(() => {
  'use strict';

  kintone.events.on('app.record.edit.show', (event) => {

    const Bname = event.record.商品名.value;
    const query = '商品名 = "' + Bname + '"';

    const body = {
      'app': アプリID,
      'query': query
    };

    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, (resp) => {
   
      console.log(resp);
      const current = kintone.app.record.get();
      current.record.商品コード.value = resp.record.商品コード.value;
      kintone.app.record.set(current);
    }, (error) => {
   
      console.log(error);
    });

    return event;

  });
})();
      current.record.商品コード.value = resp.record.商品コード.value;

問題があるのはこの部分の右辺ではないかと思います。仮にレコードIDを指定する1件のレコードを取得するならこの書き方で問題ないかと思いますが、クエリ(絞り込み条件)を指定するレコードの取得は、例え取得結果のレコードが1件であっても複数のレコードを取得するを実行する必要があり、この場合の取得結果はrecordsという配列になります。

インデックスを指定して配列の要素にアクセスするが参考になるかと思います。

mls-hashimoto

ご回答いただきありがとうございます。

申し訳ございませんが「[records]という配列になる」とはrecords内に配列として値が格納されるという意味でしょうか。

また、格納される場合、どのような値がどのような順番で格納されるのでしょうか。認識が間違っているのは承知ですが、当方の認識では[resp]内にレコード情報が格納され、その中にある値をフィールドコードをもとにセットする認識でおりました。

大変恐縮ではありますが、ご教授のほどよろしくお願いいたします。

 

以上、何卒よろしくお願い申し上げます。

長谷川 晴收さま

「recordsという配列になる」の意味は、複数のレコードが格納された配列という意味です。格納されるのは値ではなくレコードですね。以下のようなイメージです。

①1件のレコードを取得する場合の返り値(今回の処理では使いません)

{
record: {
*フィールドコード*: {
value: *フィールドの値*
},
*フィールドコード*: {
value: *フィールドの値*
}
}
}

以上のような構造になっているので「resp.record[フィールドコード].value」で値を取ることが出来るのに対し、

②複数のレコードを取得する場合の返り値

{
records: [
   {
  *1件目のレコードのフィールドコード*: {
    value: *フィールドの値*
    },
  *1件目のレコードのフィールドコード*: {
      value: *フィールドの値*
  }
},
{
*2件目のレコードのフィールドコード*: {
value: *フィールドの値*
}
}
]
}

以上のような構造になります。配列([])の中に複数のレコードが入っているので、「resp.records[何番目のレコードかを数字で指定][フィールドコード].value」で値を取得します。これは、例え取得するレコードが1件だろうと変わりません(1番目のレコードを数字で指定します)。この番号のことをインデックスと呼びます。インデックスは0から始まるのでご注意下さい。

どのような順番はクエリの書き方のオプションに記載してありますが、order byで「レコードの順番」を指定できます。何も指定しない場合はレコード番号の降順になります。

mls-hashimoto

 

ご丁寧にありがとうございます。

頂いた解説をもとにスクリプトを書き直したところ、求める動作を行うことができました。

自部署にてkintoneのアプリ開発を担っているため、これからも幾度かご質問させていただくことがあるかとは思いますが

宜しくお願い致します

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。