リニューアル後のチュートリアルは次のページを参照してください。
はじめよう 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」変数から「レコード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」を指定します。 |
一括取得の場合、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/
デモ環境アカウントとパスワードは、サインイン後にこちらのページでご確認ください。
第1回から勉強させていただいています。
具体的な流れで書いてあり、とても参考になりました。
REST APIの理解をもっと深めていきたいと思っています。11回目の連載も楽しみにしています。
落合様
お世話になります
hsy横山です。
kintoneのレコード更新を以下の範囲で作成しようと思います。
1.同一レコードのフィールドの値を 条件で更新(外部より 値を指定)
2.レコードを条件で別アプリに出力
この場合、jsでのコードは、レコードを持っている元のアプリにjsを書く様になりますでしょうか
ご教示戴けます様お願いします
hsy横山さん
サイボウズスタートアップス武井です。
おっしゃる内容だけですと、具体像が見えにくいので回答しにくいのですが、
1.については、どのタイミングで更新するかでJSの書くべき場所が変わってくると思います。
例えば、「レコードを持っていない別のアプリのレコードを保存したタイミングで、元のアプリのレコードを更新したい」のであれば、
それは「別のアプリ」の方でJSを書く必要があります。
2.についても、出力するタイミングが問題で、元のアプリの保存時や、何かのボタンを押したときなどであれば、
「元のアプリ」でJSを書く必要があります。
武井様
お世話になります。
回答戴き有難う御座いました。
集計後のレコードで帳票を作成します。その為のワークです。
処理前にレコードをjsで削除してから、毎回追加出力を考えております。
レコードを削除するjsのサンプルがあれば、ご教示お願いします。
<別件です>
kintoneのレコードをエクセルに直接貼り付けexcel帳票として印刷できる技法は、ございましでしょうか
レコード削除については以下のURLにサンプルコードがあります。
https://cybozudev.zendesk.com/hc/ja/articles/201941794
武井様
お世話になります。
回答有難う御座いました。
レコード削除の確認させて戴きます
アプリ間で更新する場合、更新先のアプリidが判れば、更新をREST APIで可能でしょうか
いま レコード一覧イベント画面にボタンを置き、動かそうとしております。
①更新先 レコードを全件削除後、クエリーで追加、一つのjsで記載を考えています。
処理の手順が不慣れですので、ご教示戴けると助かります
>アプリ間で更新する場合、更新先のアプリidが判れば、更新をREST APIで可能でしょうか
更新の場合、アプリIDの他に、更新対象レコードのレコード番号が必要だと思います。
武井様
回答有難う御座います。
常に追加では、更新先のレコード番号は、不要でしょうか
宜しくお願いします。
EXCEL連携についても教えて戴きたくお願いします。
レコード追加であればレコード番号は不要です。
レコード更新であればレコード番号は必要です。
Excelについては、本記事と関連しないと思うので、
コミュニティで改めて質問されてみてはいかがでしょうか。
武井様
回答有難う御座います。
追加で教えて下さい。
元アプリのレコードをクエリーで抽出し、別にアプリに値をセットする場合の
Record の記述をREST APIで見ましたが、レコードの値を入れる記述しか例示がありません。
元のフィールドの値を送る場合の記述をご教示下さい
失礼しました
補足です レコードの値を入れる記述とは、VALUE'TEST1'とか、VALUE '1234'等との事です
お世話になります。
アプリ情報の取得の最初のコードですが、
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)
近藤史人さん
cstapの瀧ヶ平です。
>この行の意味が分かりません。これは、閲覧アプリIDを変数 appidに代入するという意味かと思いますが、それなら
>var appId = event.appId;
>という記述にならないのでしょうか?
この場合、appIdにevent.appIdを入れてしまうと、今カスタマイズを適用している参照ログアプリのレコードしか取得できず、レコードのフィールドに入っている閲覧するアプリのIDを利用したいためです。
また、このevent.record["閲覧アプリID"].valueというのは、eventオブジェクトの「record」という名前のメンバ変数に対応するオブジェクトの「閲覧アプリID」という名前のメンバ変数に対応するオブジェクトのvalueという名前のメンバ変数に対応する値をappId変数に入れています。
このシリーズの最初のあたりにも書いてありますが、基本的にkintoneのイベントオブジェクトからのレコードの値にはこのようにアクセスするため、実際のアプリID の値をフィールドコードとして持つフィールドは存在しないためエラーが起きています。
参考になりますでしょうか
なるほど、良く分かりました。"閲覧アプリID"をそのままメンバ変数として使うのですね。
"閲覧アプリID"をそのまま入れてみたらうまくいきました。
ありがとうございます。
チュートリアルで1から勉強させていただいております!
記事内の「101件以上を「さらに表示」ボタンを使って表示する」について、リンクが切れているようですので、更新いただけないでしょうか?
少し内容がずれているかもですが、offsetの制限も考慮した、以下内容を初心者用に分かりやすく記載された記事があれば最高です!!
▼レコード一括取得の JavaScript コーディング例
https://developer.cybozu.io/hc/ja/articles/360031191791#use_id
よろしくお願いいたします。
まめ 様
お世話になっております。cybozu developer network 運営でございます。
ご連絡いただきありがとうございます!大変恐れ入りますが、
リンク切れの記事は取り下げとなったため、該当記述を修正させていただきました。
また、offsetの制限値を考慮したレコード一括取得の解説については、こちらの記事が参考になります。
offset の制限値を考慮した kintone のレコード一括取得について
実際のプログラムで技術的なことでお困りの際は、cybozu developer コミュニティをご活用ください。
有志のエンジニアからアドバイスを頂けます。
今後ともcybozu developer networkよろしくお願いします。
サンプルコードの myDisplayCustomizedView の定義の仕方では、関数呼び出し前に定義しないといけないのではないでしょうか?( https://developer.cybozu.io/hc/ja/articles/360000059206 )
サンプルそのままでは動かなかったです。。。順番そのままで
function myDisplayCustomizedView (records) {}
という定義をするようにして動くようになりました。(書き方そのまま定義位置を変えるでもいいと思いますが)
Kobayashi Kazuyoshi 様
お世話になっております。
cybozu developer network 運営事務局でございます。
フィードバックいただき、ありがとうございました。
おっしゃる通り、22行目はconstが漏れていると思います。
社内にフィードバックをさせていただきます
今後ともよろしくお願いします。
Kobayashi Kazuyoshi 様
お世話になっております。
cybozu developer network 運営事務局でございます。
ご指摘いただいたところ、修正いたしました。
お手数おかけしまして申し訳ありませんが、ご確認お願いします。
cybozu Development team の皆さん
迅速なご対応ありがとうございます!