cybozu developer network

カテゴリー内の他の記事

第10回 kintone REST APIを利用したレコード取得

はじめて kintone をカスタマイズする人が kintone API の基礎知識を学べるよう、チュートリアルの内容を充実させてリニューアルしました。
   リニューアル後のチュートリアルは次のページを参照してください。
   はじめよう kintone API

(著者:落合 雄一

はじめに

前回、kintone REST API をはじめて利用しましたが、実はレコードの取得についても kintone REST API を利用することができます。
今回は、レコードの一括取得や、検索条件(クエリ)を使ったレコード取得の方法も合わせてご紹介します!

レコードの取得(1件)

それでは、1件のレコードの取得から試してみましょう(^^♪
レコードを取得するには、kintone REST API のレコードの取得(GET)を利用します。

kintone REST APIをkintone JavaScript APIから利用する方法は、前回紹介しましたね(*^_^*)
では早速、これらを利用してレコードを取得する処理を書いてみましょう!

いかがでしょう?ここでは、前回説明を省略した callback について少し補足しておきます(^^)
成功時の callback に指定した無名関数を見てみて下さい。

成功時の callback はリクエストが成功した場合に実行され、APIからの戻り値(レスポンス)は引数として渡されます。
今回の場合、API のレスポンスは「resp」という変数に格納されており、
レコードの取得(GET)の「レスポンスの例」にあるように、取得したレコードの情報は JSON形式で格納されています。

resp.png

下記部分のコードでは、「resp」変数から「レコードID」の値を指定して、アラートに表示させる処理をしています。

なお、失敗時の callback については、省略可のうえ特にするべきこともないため、今回は記述していません(^^)

それでは、この JavaScript を前回作成した参照ログアプリにアップロードして実行してみましょう。
内容が「recordId: <レコードID> 」になっているアラートが表示されれば成功です!\(*^▽^*)ノ

レコードを条件で絞り込む(クエリ)

kintone REST APIでレコード情報を一括取得するAPIは、レコードの一括取得(クエリで条件を指定) ですが、このAPIを使うにあたって「クエリ」について押さえておきましょう(^^♪

レコード一覧のクエリ文字列を取得する(order by, limit, offset付き) を見てみて下さい。このJavaScript APIで、現在の検索条件にあたるクエリ文字列を取得することができます。さっそく確かめてみましょう(^^♪

クエリの書き方の例については、「kintone API のクエリの書き方の基本」を紹介する記事もあります。
クエリに対する理解を深めるため、他の検索条件もいろいろ試して、検索条件とクエリ文字列の関係を確かめてみましょう\(^o^)/

アプリの準備

第7回 カスタマイズビューを利用してみよう で、信号機のアプリを作りました。今回は、このアプリを使ってkintone REST APIを利用したレコードの一括取得にチャレンジしてみましょう(^^♪

それでは、信号機のアプリのカスタマイズビューの設定を変えるところからはじめます。下図のように、「ページネーションを表示する」のチェックを外した状態で更新し、一覧画面を表示してみてください。

第7回で追加したJavaScriptにより、以下のような表示になりましたね。

これは、「ページネーションを表示する」のチェックを外したため、event.recordsにデータが格納されていないからです。

レコードの一括取得

今のままだとレコード情報がないため、kintone REST APIを使ってレコードの一括取得を行いましょう(^^♪

それでは、レコードの一括取得(クエリで条件を指定) を確認してみましょう。

 

HTTP メソッド

GET

URI

https://(サブドメイン名).cybozu.com/k/v1/records.json

ゲストスペース内のアプリの場合

https://(サブドメイン名).cybozu.com/k/guest/(スペースのID)/v1/records.json

必要なアクセス権

  • アプリのレコード閲覧権限
  • 値を取得するレコードの閲覧権限
  • 値を取得するフィールドの閲覧権限

リクエストパラメータ

パラメータ名 指定する値 必須 説明
fields 文字列の配列 省略可 レスポンスに含めるフィールドコードを指定します。
省略した場合は、閲覧権限を持つすべてのフィールドの値が返されます。
app 数値又は文字列 必須 アプリのID を指定します。
query 文字列 省略可 レスポンスに含めるレコードの条件を指定するクエリ文字列です。 クエリ文字列内では、後述の演算子とオプションが使用できます。
省略した場合は、閲覧権限を持つすべてのレコードが返されます。
totalCount 真偽値又は文字列 省略可

「query」パラメータで指定した条件にあてはまるレコードの件数を取得する場合、「true」を指定します。
指定を省略した場合、レスポンスにはtotalCountの値としてnullが返されます。

 

一括取得の場合、URI の records が「複数形」であることに注意しましょう。

ここまで来ればリクエストは簡単に作れそうです。fieldパラメータは省略して良いので、それ以外の2つを指定してレコードを一括取得してみましょう(^^♪

できました。\(*^▽^*)ノ

ちなみにここまで敢えて触れませんでしたが、レコードの一括取得(クエリで条件を指定)で一度に取得出来るレコード数は100件まで(オプションで500件まで)です。

レコードを一括取得する方法には、実は大きく3つの選択肢があり、利用ケースに応じて適切な方法を選択する必要があります。
それぞれの方法の特徴や使い分けについては、offset の制限値を考慮したレコード一括取得についてで紹介しています。

最後に

kintone JavaScript APIも、kintone REST APIを利用した方法もだいぶ出来るようになりましたね(^^) kintone APIのドキュメント の中にはまだ紹介していないAPIもありますが、ここまで理解された皆さんはきっとドキュメントを読み進めながらより高度なカスタマイズが出来ると思います(*^_^*)

Let’s kintoneカスタマイズ\(^o^)/

このTipsは、2022年7月版で確認したものになります。

<<第9回 kintone REST APIを利用したレコード追加 | 第11回 kintone REST APIを利用したレコード更新>>

デモ環境

こちらのデモ環境から実際に動作を確認できます。
https://dev-demo.cybozu.com/k/16/

デモ環境の利用は、事前に cybozu developer network のメンバー登録が必要です。画面右上の「サインイン」ボタンよりご登録ください。
デモ環境アカウントとパスワードは、サインイン後にこちらのページでご確認ください。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
ako.nakayama

第1回から勉強させていただいています。
具体的な流れで書いてあり、とても参考になりました。
REST APIの理解をもっと深めていきたいと思っています。11回目の連載も楽しみにしています。

Avatar
hsy横山

落合様

お世話になります

hsy横山です。

kintoneのレコード更新を以下の範囲で作成しようと思います。

1.同一レコードのフィールドの値を 条件で更新(外部より 値を指定)

2.レコードを条件で別アプリに出力

この場合、jsでのコードは、レコードを持っている元のアプリにjsを書く様になりますでしょうか

ご教示戴けます様お願いします

Avatar
武井 琢治

hsy横山さん

サイボウズスタートアップス武井です。

 

おっしゃる内容だけですと、具体像が見えにくいので回答しにくいのですが、

1.については、どのタイミングで更新するかでJSの書くべき場所が変わってくると思います。

例えば、「レコードを持っていない別のアプリのレコードを保存したタイミングで、元のアプリのレコードを更新したい」のであれば、

それは「別のアプリ」の方でJSを書く必要があります。

2.についても、出力するタイミングが問題で、元のアプリの保存時や、何かのボタンを押したときなどであれば、

「元のアプリ」でJSを書く必要があります。

Avatar
hsy横山

武井様

お世話になります。

回答戴き有難う御座いました。

 

集計後のレコードで帳票を作成します。その為のワークです。

処理前にレコードをjsで削除してから、毎回追加出力を考えております。

レコードを削除するjsのサンプルがあれば、ご教示お願いします。

 

<別件です>

kintoneのレコードをエクセルに直接貼り付けexcel帳票として印刷できる技法は、ございましでしょうか

Avatar
武井 琢治

レコード削除については以下のURLにサンプルコードがあります。

https://cybozudev.zendesk.com/hc/ja/articles/201941794

Avatar
hsy横山

武井様

お世話になります。

回答有難う御座いました。

レコード削除の確認させて戴きます

アプリ間で更新する場合、更新先のアプリidが判れば、更新をREST APIで可能でしょうか

いま レコード一覧イベント画面にボタンを置き、動かそうとしております。

①更新先 レコードを全件削除後、クエリーで追加、一つのjsで記載を考えています。

処理の手順が不慣れですので、ご教示戴けると助かります

 

Avatar
武井 琢治

>アプリ間で更新する場合、更新先のアプリidが判れば、更新をREST APIで可能でしょうか

更新の場合、アプリIDの他に、更新対象レコードのレコード番号が必要だと思います。

Avatar
hsy横山

武井様

 

回答有難う御座います。

常に追加では、更新先のレコード番号は、不要でしょうか

宜しくお願いします。

 

EXCEL連携についても教えて戴きたくお願いします。

 

 

 

Avatar
武井 琢治

レコード追加であればレコード番号は不要です。

レコード更新であればレコード番号は必要です。

 

Excelについては、本記事と関連しないと思うので、

コミュニティで改めて質問されてみてはいかがでしょうか。

Avatar
hsy横山

武井様

 

回答有難う御座います。

追加で教えて下さい。

元アプリのレコードをクエリーで抽出し、別にアプリに値をセットする場合の

Record の記述をREST APIで見ましたが、レコードの値を入れる記述しか例示がありません。

元のフィールドの値を送る場合の記述をご教示下さい

 

Avatar
hsy横山

失礼しました

補足です レコードの値を入れる記述とは、VALUE'TEST1'とか、VALUE '1234'等との事です

Avatar
近藤史人

お世話になります。

アプリ情報の取得の最初のコードですが、

var appId = event.record["閲覧アプリID"].value;

この行の意味が分かりません。これは、閲覧アプリIDを変数 appidに代入するという意味かと思いますが、それなら

var appId =  event.appId;

という記述にならないのでしょうか?

"閲覧アプリID"に実際にアプリIDの番号を記入して実行すると下記のようなエラーになります。

何が間違っているのでしょうか?

show.js:1043 Uncaught TypeError: Cannot read property 'value' of undefined
at download.do:6
at show.js:239
at Array.forEach (<anonymous>)
at w (show.js:986)
at Kv (show.js:239)
at Lv (show.js:239)
at Oha (show.js:873)
at i4.update (show.js:2034)
at Z5 (show.js:911)
at $5 (show.js:911)

 

Avatar
瀧ヶ平

近藤史人さん
cstapの瀧ヶ平です。

>この行の意味が分かりません。これは、閲覧アプリIDを変数 appidに代入するという意味かと思いますが、それなら

>var appId = event.appId;

>という記述にならないのでしょうか?

この場合、appIdにevent.appIdを入れてしまうと、今カスタマイズを適用している参照ログアプリのレコードしか取得できず、レコードのフィールドに入っている閲覧するアプリのIDを利用したいためです。

また、このevent.record["閲覧アプリID"].valueというのは、eventオブジェクトの「record」という名前のメンバ変数に対応するオブジェクトの「閲覧アプリID」という名前のメンバ変数に対応するオブジェクトのvalueという名前のメンバ変数に対応する値をappId変数に入れています。
このシリーズの最初のあたりにも書いてありますが、基本的にkintoneのイベントオブジェクトからのレコードの値にはこのようにアクセスするため、実際のアプリID の値をフィールドコードとして持つフィールドは存在しないためエラーが起きています。

参考になりますでしょうか

Avatar
近藤史人

なるほど、良く分かりました。"閲覧アプリID"をそのままメンバ変数として使うのですね。

"閲覧アプリID"をそのまま入れてみたらうまくいきました。

 

ありがとうございます。

 

 

Avatar
まめ

チュートリアルで1から勉強させていただいております!

記事内の「101件以上を「さらに表示」ボタンを使って表示する」について、リンクが切れているようですので、更新いただけないでしょうか?

少し内容がずれているかもですが、offsetの制限も考慮した、以下内容を初心者用に分かりやすく記載された記事があれば最高です!!

 ▼レコード一括取得の JavaScript コーディング例

 https://developer.cybozu.io/hc/ja/articles/360031191791#use_id

よろしくお願いいたします。

Avatar
cybozu Development team

まめ 様
お世話になっております。cybozu developer network 運営でございます。

ご連絡いただきありがとうございます!大変恐れ入りますが、
リンク切れの記事は取り下げとなったため、該当記述を修正させていただきました。
また、offsetの制限値を考慮したレコード一括取得の解説については、こちらの記事が参考になります。
offset の制限値を考慮した kintone のレコード一括取得について

実際のプログラムで技術的なことでお困りの際は、cybozu developer コミュニティをご活用ください。
有志のエンジニアからアドバイスを頂けます。
今後ともcybozu developer networkよろしくお願いします。

Avatar
Kobayashi Kazuyoshi

サンプルコードの myDisplayCustomizedView の定義の仕方では、関数呼び出し前に定義しないといけないのではないでしょうか?( https://developer.cybozu.io/hc/ja/articles/360000059206 )

サンプルそのままでは動かなかったです。。。順番そのままで
function myDisplayCustomizedView (records) {}
という定義をするようにして動くようになりました。(書き方そのまま定義位置を変えるでもいいと思いますが)

Avatar
cybozu Development team

Kobayashi Kazuyoshi 様

お世話になっております。
cybozu developer network 運営事務局でございます。

フィードバックいただき、ありがとうございました。

おっしゃる通り、22行目はconstが漏れていると思います。

const myDisplayCustomizedView = records => {

社内にフィードバックをさせていただきます

今後ともよろしくお願いします。

Avatar
cybozu Development team

Kobayashi Kazuyoshi 様

お世話になっております。
cybozu developer network 運営事務局でございます。

ご指摘いただいたところ、修正いたしました。

お手数おかけしまして申し訳ありませんが、ご確認お願いします。

Avatar
Kobayashi Kazuyoshi

cybozu Development team の皆さん
迅速なご対応ありがとうございます!

サインインしてコメントを残してください。