# 他アプリからのデータ取得について

**URL:** <https://community.cybozu.dev/t/topic/1266>\
**Category:** kintone 開発相談\
**Created:** [2022 年 12 月 26 日午前 1:29 UTC](https://community.cybozu.dev/t/topic/1266 "2022-12-26T01:29:23Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account174](https://avatars.discourse-cdn.com/v4/letter/l/d2c977/32.png) [@Legacy\_Account174](https://community.cybozu.dev/u/Legacy_Account174)\
**Post date:** [2022 年 12 月 26 日午前 1:29 UTC](https://community.cybozu.dev/t/topic/1266/1 "2022-12-26T01:29:23Z")

</div>

kintone初心者になります。初歩的ご質問になりますが、何卒よろしくお願いいたします。

**背景・実現したいこと**

&nbsp;Aアプリ、Bアプリの2つのアプリを使って  
Aアプリの画面項目を使ってBアプリのデータを検索し、  
・データが取得できた場合は、Aアプリ上の別項目にBアプリのデータ情報をセット  
・データが取得できない場合は、Aアプリ上の別項目にAアプリ上の情報をセット

**エラー情報** （開発者ツールのコンソール）

&nbsp;Chromeでのデベロッパーツール上でデバッグするがエラーなし

**利用したソースコード**

```
(() => {
  'use strict';
  const createEvents = ['app.record.create.submit', 'app.record.edit.submit'];
  kintone.events.on(createEvents, (event) => {

    const appId = 1;

    const m01 = event.record['a'].value;

    const paramsget = {
      'app': appId,
      'query': 'a in ("' + m01 + '")',
      totalCount: true
    };

    kintone.api(
      kintone.api.url('/k/v1/records', true), 
      'GET', 
      paramsget, 
      (resp) => { 

        if (resp.totalCount > 0) {
          const record = resp.records[0];
          event.record['b'].value = record['b'].value;
        } else {
          event.record['b'].value = m01;
        }

      }, (error) => {
        alert('レコード取得時にエラーが発生しました。' + error.message);
        console.log(error);
      }
    );

    return event;

  });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account63](https://avatars.discourse-cdn.com/v4/letter/l/6de8d8/32.png) [@Legacy\_Account63](https://community.cybozu.dev/u/Legacy_Account63)\
**Post date:** [2022 年 12 月 26 日午前 2:51 UTC](https://community.cybozu.dev/t/topic/1266/2 "2022-12-26T02:51:51Z")

</div>

保存ボタンをおすとページが切り替わります。ですので、kintone.apiが完了するよりもはやくページ遷移がおきてしまって皇族の処理がされていない状況だとおもいます。

このようにkintone.apiの処理をまつ必要がある場合はPromiseを利用する必要があります。（コールバックの記述法ではできない）

[こちら](https://community.cybozu.dev/hc/ja/articles/360023047852-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPromise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC)の記事に基本がのっておりますのでみてみてください。

その中でも[async/awaitで書けば](https://community.cybozu.dev/hc/ja/articles/360023047852-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPromise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC#column1-async-await-)よりわかりやすいと思うのでためしてみてください。  
書き直すとこんな感じです（動作未検証なのはご了承ください）

```
(() => {
 'use strict';
 constcreateEvents = ['app.record.create.submit','app.record.edit.submit'];
  kintone.events.on(createEvents, async (event) => { // ← 下部のawaitを使うためにasyncを宣言
   constappId =1;
   constm01 =event.record['a'].value;
   constparamsget = {
     'app': appId,
     'query':'a in ("'+ m01 +'")',
      totalCount:true
    };
  const resp = await kintone.api( // ←awaitをつかうことでkintone.apiの結果をまってrespにいれることができる
      kintone.api.url('/k/v1/records',true), 
     'GET', 
    paramsget);
if(resp.totalCount >0) {
 constrecord = resp.records[0];
   event.record['b'].value= record['b'].value;
  }else{
   event.record['b'].value= m01;
  }

   returnevent;
  });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account174](https://avatars.discourse-cdn.com/v4/letter/l/d2c977/32.png) [@Legacy\_Account174](https://community.cybozu.dev/u/Legacy_Account174)\
**Post date:** [2022 年 12 月 26 日午後 11:55 UTC](https://community.cybozu.dev/t/topic/1266/3 "2022-12-26T23:55:58Z")

</div>

お世話になっております。  
この度はアドバイスをいただき本当にありがとうございます。  
ご教示いただいた内容を基に修正したところ、無事に動作いたしました。  
基本的な部分がわかっていなかったようです…  
javascriptの解説サイトも読み込んでみたいと思います。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2023 年 10 月 24 日午前 8:25 UTC](https://community.cybozu.dev/t/topic/1266/4 "2023-10-24T08:25:21Z")

</div>

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