レコードの取得(1件)のリクエストに対して複数件返ってくる

お世話になります。

■ レコードの取得(GET)
https://cybozudev.zendesk.com/hc/ja/articles/202331474-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%8F%96%E5%BE%97-GET-

■ kintone API Promise
https://cybozudev.zendesk.com/hc/ja/articles/204564604

上記を参考に、REST APIにて・・・レコードの保存ボタン押下時に、別アプリの特定レコード(1つ)の特定フィールド(1つ)の値を読み込んできて、あるフィールドの値へ代入し、保存する、という動作をプログラムしたいと思っています。

GET にて

★ app (アプリのID)
★ id (レコードのID)

を指定すると、別アプリから 「特定の1件のレコードのフィールド値」 を呼び出せるはずですが、問題にぶつかっています。

 

<通常の場合はしっかり1件が返ってくる>

kintone.api(‘/k/v1/record’, ‘GET’, {“app”: app_id, “id”: rec_id}, function(resp) {
  var no = parseInt(resp[‘record’][‘最終採番No’][‘value’]) + 1;
  …
}, function(resp) {

  //エラー処理
});

 

<Promiseの場合は複数のレコード値がjsonで返ってくる>
return kintone.api(‘/k/v1/records’, ‘GET’, ‘app’: app_id,‘id’: rec_id).then(function(resp) {

  console.log(resp);
  no = parseInt(resp[‘record’][‘最終採番No’][‘value’]) + 1;  //ここでエラー発生
  …
  return event;
}, function(resp) {
  //エラー処理
  return event;
});

 

Promiseの現状のコンソールを見ますと
リクエストヘッダーは正しく送信できているが

Request URL:

https://benreco.cybozu.com/k/v1/records.json?app=27&id=1

レスポンスデータは2つのレコード(存在するレコードすべて)が返ってきてしまう状態です。

  1. Object {records: Array[2], totalCount: null}

  2. records:Array[2]

1. 0:Object
2. 1:Object

records配列の2番目のデータの中に、参照したいフィールド値が含まれているのですが・・・
APIや他のサンプルコードの説明を見ても、解決できませんでした。

今後、レコード数がかなり増えたり、どれか1つでも参照先アプリのレコードを編集しているとエラーになると思われるため、特定のレコードのデータのみを取得できるよう組んでおきたいと思っています。
なにか良い解決策はあるでしょうか。

何卒、よろしくお願いいたします。

豊山さん

 

> <Promiseの場合は複数のレコード値がjsonで返ってくる>
> return kintone.api(‘/k/v1/records’, ‘GET’, ‘app’: app_id,‘id’: rec_id).then(function(resp) {

 

原因はPromiseではなくて、リクエストURLだと思われます。「record」ではなく「records」が指定されているのが原因ではないでしょうか。私も先日別のトピックで気づいたのですがrecordsにidを渡しても通るようです。

 

そう考えると、resp[‘record’]がエラーになる(resp[‘records’]が返るため)のも、コンソールでresp.recordsが返るのも合点がいきます。

 

一度ご確認頂ければと思います。

Yamashita様

早々にコメント、ありがとうございました。

ご指摘くださった点(1件取得の場合は records ではなく record リクエスト)の修正で、問題なく動作いたしました。
通信後、取得した値をフィールドへ残して、保存もできました。

1日悩んでいたのが嘘のようです

引き続き、よろしくお願いいたします。