こちらの記事で紹介している kintone JS SDK ですが、新しくrest-api-clientがリリースされて、JS SDKは非推奨になっています。ご注意ください。
https://github.com/kintone/kintone-js-sdk/
【Tips公開】kintone JS SDK (2019/03/29)でアナウンスの通り、2019年3月にkintoneのレコードを取得する kintone REST API のラッパーライブラリ kintone JS SDKがリリースされました。
「kintone JS SDK」とは、以前リリースされた「kintone Node.js SDK(β)」や「kintoneUtility」の後継となる SDK です。
上記2つのライブラリの後継 と公式にうたわれていますし、kintoneUtility 何よりGitHubのリポジトリに廃止予定とあります。
kintone Utility for JavaScript (Deprecated)
何か ~SDK は 外部からproxy等を利用して kintone API を叩く用と勘違いしている方(私も含め)もいるかもしれませんが、そう言う訳ではありませんので、これからはどんどん使いましょうと自戒も込めて kintoneUtility の代わりにつかってみました。
利用準備
簡単に始めるには、GitHubからzipファイルをダウンロードして、解凍した中にある kintone-js-sdk.min.js を取り出して利用します。
手順
kintoneカスタマイズ用の環境を準備
ローカルにkintoneカスタマイズの環境を作ります。必要無い方は飛ばしてください。
Node.jsは導入済みの前提です。
- 開発用のディレクトリを作成します。 mkdir my-project
- cd my-project
-
npm init -y
初期化します。 -
npm install --save-dev @babel/core @babel/cli
Babelトランスパイラをインストールします。 -
npm install @babel/preset-env --save-dev
最新のJavaScriptを利用できる様にセットアップします。
kintone JS SDK ライブラリを取得
- GitHubからダウンロード
- zipファイルを解凍
- distディレクトリの kintone-js-sdk.min.js をカスタマイズするプロジェクトのソースファイルと同じディレクトリに保存します
ソースコード
そのままでは動作しないかもです。動作するブラウザに応じて変換してください。
kintone.events.on('app.record.index.show', (event) => {
const kintoneRecord = new kintoneJSSDK.Record()
const appId = kintone.app.getId()
const totalCount = true
//**
// * getRecords(appId, query, fields, totalCount)
// */
let getAllRec = () => {
const query = '$id <= "50" order by $id desc limit 10'
const fields = []
kintoneRecord.getRecords(appId, query, fields, totalCount).then((rsp) => {
console.log(rsp)
}).catch((err) => {
console.log(err.get())
})
}
//**
// * getAllRecordsByQuery(appId, query, fields, totalCount)
// */
let getAllRecByQ = () => {
const query = '$id <= "10000" order by $id desc'
const fields = []
kintoneRecord.getAllRecordsByQuery(appId, query, fields, totalCount).then((rsp) => {
console.log(rsp)
}).catch((err) => {
console.log(err.get())
})
}
//**
// * getAllRecordsByCursor(option)
// */
let getAllRecByCur = () => {
const option = {
app: appId
}
kintoneRecord.getAllRecordsByCursor(option).then((rsp) => {
console.log(rsp)
}).catch((err) => {
console.log(err.get())
})
}
getAllRec()
getAllRecByQ()
getAllRecByCur()
})
とりあえずAPIを叩いてみる
getRecords(appId, query, fields, totalCount) 関数で複数レコードを取得してみます。
1. 最初にJSSDKのインスタンスを取得します。
kintone内部からAPIを叩く場合は、引数のkintoneコネクションオプションは必要無いです。
// without connection, module will use session authentication of kintone
var kintoneRecord = new kintoneJSSDK.Record();
2. お決まりの、アプリIDをセット。kintone.app.getId()関数を使います。
3. クエリを設定。getRecords は limit が使えます。
const kintoneRecord = new kintoneJSSDK.Record() 1.
const appId = kintone.app.getId() // 2.
const query = '$id <= "50" order by $id desc limit 10' // 3.
レコード一括取得してみる
getAllRecordsByQuery(app, query, fields, totalCount) 関数を使って、レコード一括取得してみます。
getAllRecordsByQuery は クエリに limit や offset が 使えないので注意です。
一度に取得できるレコード上限の500件を超えてレコードを取得できます。
Number of records can be retrieved at once is greater than the default limitations
query = '$id <= "10000" order by $id desc'
カーソル関数をつかってみる
本日リリースの kintone js SDK v0.4.0 でカーソルに対応した getAllRecordsByCursor(option) 関数が用意されたので早速使ってみました。
ここの記事を見るとカーソルは面倒だなと思っていましたが、js sdk に用意された getAllRecordsByCursor は、カーソルを意識する事無く使い勝手は良いなと感じました。
全件取得の時はアプリIDを渡すだけです。getAllRecords系と違って、引数の渡し方が違うので注意です。
const option = {
app: appId
}
まとめ
- JS SDK はkintone内部のJSで使う時には、認証情報とかセットしなくても良いので、kintoneUtilityの代わりにどんどん使ってOK
- 一括取得時に再帰とか、カーソルとか考えなくてOK
改めて便利だなと感じました。
追記
【kintone JS SDK】カーソルAPIの対応と今後の開発計画について
に 2019年8月末 リリースの v0.5.0 よりメソッドの引数の渡し方が、今回のカーソル関数と同様にシングルオブジェクトに変更される様です。
参考リンク
- kintone JS SDK
- getAllRecordsByCursor(option)
- 複数のレコードをループして取得するワザ
- 「kintone Utility Library for JavaScript」の使い方
- kintone Utility for JavaScript を使ってみたよ
- レコードの一括取得(クエリで条件を指定)
- 第4回 クエリ指定して更新・並び順変更をしてみよう
設定ファイル
{
"name": "test-sdk",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "babel src -d lib",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "kazuhiro yoshida",
"license": "MIT",
"devDependencies": {
"@babel/cli": "^7.5.0",
"@babel/core": "^7.5.4",
"@babel/preset-env": "^7.5.4"
}
}
{
"presets": ["@babel/preset-env"]
}