(著者:落合 雄一)
はじめに
前回、kintone REST APIをはじめて利用しましたが、アプリ情報やレコード情報の取得についてもkintone REST APIを利用することができます。この機会にトライしてみましょう(^^)
アプリ情報の取得
それでは、レコード情報の前にアプリ情報の取得で肩慣らししましょう(^^♪
アプリ情報の取得には、 kintone REST API (アプリ) のアプリ情報の取得(1件) を利用します。
kintone REST APIをkintone JavaScript APIから利用する方法は、前回紹介しましたね(*^_^*)
では早速、これらを利用してアプリ情報を取得する処理を書いてみましょう(^^♪
いかがでしょう?ここでは、前回説明を省略したcallbackについて少し補足しておきます(^^)
成功時のcallbackに指定した無名関数を見てみて下さい。
成功時のcallbackはリクエストが成功した場合に実行され、APIからの戻り値(レスポンス)は引数として渡されます。取得した値の内容と使い方については、アプリ情報の取得(1件) のプロパティを確認してみましょう(^^♪
上図に示されたプロパティ群が、JSON形式でresp変数に格納されています。なお失敗時のcallbackについては、省略可のうえ特にするべきこともないため、今回は記述していません(^^)
それでは、このJavaScriptを前回作成した参照ログアプリにアップロードして実行してみましょう(^^♪
アプリ情報からアプリ名が取得出来ている事が確認できましたね\(*^▽^*)ノ
検索条件(クエリ)
kintone REST APIでレコード情報を一括取得するAPIは、レコードの一括取得(クエリで条件を指定) ですが、このAPIを使うにあたって「クエリ」について押さえておきましょう(^^♪
レコード一覧のクエリ文字列を取得する(order by, limit, offset付き) を見てみて下さい。このJavaScript APIで、現在の検索条件にあたるクエリ文字列を取得することができます。さっそく確かめてみましょう(^^♪
クエリに対する理解を深めるため、他の検索条件もいろいろ試して、検索条件とクエリ文字列の関係を確かめてみましょう\(^o^)/
アプリの準備
第7回 カスタマイズビューを利用してみよう で、信号機のアプリを作りました。今回は、このアプリを使ってkintone REST APIを利用したレコードの一括取得にチャレンジしてみましょう(^^♪
それでは、信号機のアプリのカスタマイズビューの設定を変えるところからはじめます。下図のように、「ページネーションを表示する」のチェックを外した状態で更新し、一覧画面を表示してみてください。
第7回で追加したJavaScriptにより、以下のような表示になりましたね。
これは、「ページネーションを表示する」のチェックを外したため、event.recordsにデータが格納されていないからです。
レコードの一括取得
今のままだとレコード情報がないため、kintone REST APIを使ってレコードの一括取得を行いましょう(^^♪
それでは、レコードの一括取得(クエリで条件を指定) を確認してみましょう。
ここまで来ればリクエストは簡単に作れそうです。fieldパラメータは省略して良いので、それ以外の2つを指定してレコードを一括取得してみましょう(^^♪
できました。\(*^▽^*)ノ
ちなみにここまで敢えて触れませんでしたが、レコードの一括取得(クエリで条件を指定)で一度に取得出来るレコード数は100件まで(オプションで500件まで)です。
レコードを一括取得する方法には、実は大きく3つの選択肢があり、利用ケースに応じて適切な方法を選択する必要があります。
それぞれの方法の特徴や使い分けについては、offset の制限値を考慮したレコード一括取得についてで紹介しています。
実際の活用例として、101件以上を「さらに表示」ボタンを使って表示するもあるので、是非そちらもご覧ください(^^)
最後に
kintone JavaScript APIも、kintone REST APIを利用した方法もだいぶ出来るようになりましたね(^^) kintone APIのドキュメント の中にはまだ紹介していないAPIもありますが、ここまで理解された皆さんはきっとドキュメントを読み進めながらより高度なカスタマイズが出来ると思います(*^_^*)
Let’s kintoneカスタマイズ\(^o^)/
このTipsは、2014年11月版で確認したものになります。
<<第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"をそのまま入れてみたらうまくいきました。
ありがとうございます。