複数APIを呼び出した際に変数の引継ぎをしたい

「複数条件でアプリ内を検索したときに、該当レコードが1件なら更新したい。」

こちらを実装したいのですが、該当レコードのレコード番号(ユニークキー)を取得できたあと、レコード番号を更新処理に渡せず苦戦しております。

どうぞお知恵をお貸しください!

 

kintoneの問題というよりは変数の宣言やAPIの呼び出し方のような気がしますので、場違いかもしれませんが自己解決ができないため、アドバイスお願いいたします!

 

(省略)

let recordID = 0;

//① レコードを検索して

kintone.api(kintone.api.url(‘/k/v1/records.json’, true), ‘GET’, body, (resp) => {

  if(resp.records.length === 1){
    // 更新対象のレコードありIDを保存
    recordID = resp.records[0].ID.value; //★更新処理に受け渡したい
  }

});

 

//② 特定したレコードを更新する。

kintone.api(kintone.api.url(‘/k/v1/record.json’, true), ‘PUT’, body, (resp) => {

  alert(recordID); // ★値が空になっていてレコードが見つからない 

});

一番ラクなのはasync/awaitを使うのがいいと思いますがどうでしょうか。

下記の記事の、「Promiseを利用する(複数回)」と「Column1: async/awaitで直感的に同期的処理を書く」あたりを参考にしてみてください!

https://developer.cybozu.io/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

small wave様

REST APIを使用してされるなら、メソッドチェーンを使って引数で引き渡してあげるのがいいのではないかと思われます。
コードテストしていないですが、このような形でできるかと思われます。

let recordID = 0;
//① レコードを検索して
return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body).then((resp) => {
  if (resp.records.length === 1) {
      // 更新対象のレコードありIDを保存
      recordID = resp.records[0].ID.value; //★更新処理に受け渡したい
      return recordID;
  }
}).then((recordID) => {
if(recordID === 0)return;
  const body2 = {
      app: kintone.app.getId(),
      id: recordID,
      record: {
          フィールドコード: {
              value: (フィールド値)
          },
      }
  }
  return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body2, (resp2) => {
      console.log(resp2);
  }, (error) => {
      console.log(error);
  });
});

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

教えていただいた方法で実装できました。

TO 村濱一樹さん

 async/awaitを使いこなせるようにもう少し勉強してみます。

 

TO Yuki Minamitaniさん

シンプルなやり方ですね。ありがとうございます。