お世話になっております。
先日、皆様に助けていただいて関連レコードデータのCSV出力ができるようになりました。
https://community.cybozu.dev/t/topic/9585/11
ですが、出力データが一覧全てではなく、画面表示されているデータのみが出力されるようになっています。
少ないデータでテストしていたので気が付きませんでした。
一覧全てをCSV出力したいのですが、難しいでしょうか。
ご教授いただきたくよろしくお願いいたします。
お世話になっております。
先日、皆様に助けていただいて関連レコードデータのCSV出力ができるようになりました。
https://community.cybozu.dev/t/topic/9585/11
ですが、出力データが一覧全てではなく、画面表示されているデータのみが出力されるようになっています。
少ないデータでテストしていたので気が付きませんでした。
一覧全てをCSV出力したいのですが、難しいでしょうか。
ご教授いただきたくよろしくお願いいたします。
ぱっと見ですが, kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params)
で取得してるからですかね、デフォルトだと100件、指定すると500件までとれる、というのが仕様です
全件とりたい場合はkintone rest api clientを利用するのはどうでしょうか
詳細は上記みていただくとわかると思います
kintone.api
でレコード取得している部分をclient.record.getAllRecords
に変えるイメージです
muraさん、ありがとうございます。
これってURLを追加すれば、先に添付した関連レコードCSV出力に影響して全体が出力できるということでしょうか。
それとも先に添付した関連レコードCSV出力のコードの一部を変更しないといけないということでしょうか。
提示していただいているコードのうち、
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params)
この箇所がデータ取得の部分になります。
ただ、APIの仕様で、一度に取得できるのは500件(デフォルトは100件)まで、という制約があり、今回それにひっかかってるものだとおもいます。
そこで上記提示している kintone rest api clientを利用すると、条件に合致するデータをすべて取得できますのでそれを利用できますよ、という話です
該当箇所を、
const params = {
app: appId,
condition: query // getAllRecordsの場合は conditionで条件を指定する
};
const client = new KintoneRestAPIClient(); // 初期化
return client.record.getAllRecords(params)
のように書き換えて頂く必要がある、というイメージですね
※加えて、ご認識の通り、kintone rest api clientの読み込み、も必要です
muraさん、ありがとうございます。
本当に初心者で申し訳ありません。。。
コードを書き換えたうえで、URLの添付も行うということですよね。
はい、利用方法にありますように、
そのようなイメージです
muraさん、ありがとうございます。
ご指摘の通りやってみたのですが、作成されたCSV作成ボタンをクリックしても反応がありません。
元々のコード
const params = {
app: appId,
query: query
};
return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params)
この部分を
const params = {
app: appId,
condition: query // getAllRecordsの場合は conditionで条件を指定する
};
const client = new KintoneRestAPIClient(); // 初期化
return client.record.getAllRecords(params)
に置き換えて、
https://js.cybozu.com/kintone-rest-api-client/3.2.1/KintoneRestAPIClient.min.js
を貼付けています。
デバックを確認したところ、下記のエラーが出ていました。
Uncaught (in promise) TypeError: Cannot
他にも変更する箇所がありましたでしょうか。
Uncaught (in promise) TypeError: Cannot
これってエラーがとぎれてませんかね
エラーの全体をコピー(画像でも)あるとなにかわかるかもしれません
申し訳ありません。途中までになっていたと思います。
再度送りますので見ていただけますでしょうか。
よろしくお願いいたします。
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘length’)
at download.do?app=77&jsType=DESKTOP&contentId=659&hash=38c404e1889c17029480e972edd3f06a62ed8f5f:61:30
getAllRecordsで取得すると、通常のREST APIとは違うレスポンスで、配列が返ってくるみたいですね
const relatedRecords = resp.record;
↓
const relatedRecords = resp;
こう変えると動くと思います(未検証
muraさん、ありがとうございます。
ご指摘の通り、コードを変更したところ、CSV出力できたのですが、出力された―データはやはり一覧の画面に表示件数のみでした。(表示最大件数が100件までなので100件のみ抽出されました。)
今更ながらにlimitやoffsetのことを確認しました。。
getallrecordメソッドを使用すればこれらを気にせずに取得できると記載されていますが、取得できていないということですよね。。
あーすいません。。そこだけじゃなかったですね。
kintone.events.on('app.record.index.show', (event) => {
const records = event.records;
ここで、イベントハンドラからうけとるレコード利用してるから、画面に表示されているものだけ、となってしまいますね。
ここも同じくkintone rest api clientを使うことで全件対応できます
// ↓ "async" 追加
kintone.events.on('app.record.index.show', async (event) => {
const params = {
app: event.appId,
condition: kintone.app.getQueryCondition() // 表示されている一覧と同じ条件を出したい場合はこれで条件指定
};
const client = new KintoneRestAPIClient(); // 初期化
const records = await client.record.getAllRecords(params);
全件取得できました!!!
muraさん、長々と初心者の私にお付き合いいただき本当にありがとうございました。
よかったです!
これを期に是非学習を進めてもらうとよさそうです!
チュートリアルも用意されておりますので、ぜひ
教えていただいたコードを読み解けるように勉強してみたいと思います。
本当にありがとうございました!
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。