kintone APIを使ってスプレッドシートに取得したい

背景・実現したいこと

 表題の通りです

エラー情報

var res = JSON.parse(UrlFetchApp.fetch(url, {"method": "get","headers": {"X-Cybozu-API-Token": apiToken}})); 

でresがundefinedになっています

利用したソースコード

function getRecords() {

varurlGetRecords = "https://xxxxxxxxxxx.cybozu.com/k/v1/records.json";

varappId = xx;

varapiToken = 'xxxxxxxxxxxxx';




// kintoneからデータを取得

varparamFields = "&fields=$id," + encodeURIComponent("アポインター名,社員番号,雇用形態,入社日,在籍期間");

varurl = urlGetRecords + "?app=" + appId + paramFields;

varres = JSON.parse(UrlFetchApp.fetch(url, {"method": "get","headers": {"X-Cybozu-API-Token": apiToken}}));




// 取得したデータを整形

varoutput = [];

res["records"].forEach(function(record){

varrow = [];




row.push(record["アポインター名"].value);

row.push(record["社員番号"].value);

row.push(record["雇用形態"].value);

row.push(Utilities.formatDate(newDate(record["入社日"].value), 'JST', 'yyyy/M/d HH:mm'));

row.push(record["在籍期間"].value);




output.push(row);

});




// スプレッドシートに出力

varsheetOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');

sheetOutput.getRange(2, 1, output.length, output[0].length).setValues(output);

}

 

※kintone API の問題というよりは GAS の開発手法の問題と思われます

 

https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

https://developers.google.com/apps-script/reference/url-fetch/http-response

によると UrlFetchApp.fetch のレスポンスは HTTPResponse で戻ってくるようですので直接JSON.parse出来ないのかもしれません。

var res = JSON.parse(UrlFetchApp.fetch(url, {"method":"get","headers": {"X-Cybozu-API-Token": apiToken}}).getContentText());

にしてみるとどうでしょうか?

@安藤 光昭さん

早速のご返信ありがとうございます!

色々試したみたのですが、kintone側での “アポインター名” のデータに空白が入っておりこちらが問題の可能性がございました( “アポインター名” を外した場合に実行完了、取得がいたしました)

.getContentText()を付けなくても取得はできたのですが、おっしゃる通りGASの開発手法に則ったらつける必要がありそうですね、、、

無事動いたとのことで何よりです。

GASのレスポンスはgetContentText無しでそのまま使えるようになってるんですね。勉強になりました!

ありがとうございます!

シンプルに全角スペース問題なのでこちらをどう解決していくか悩んでおります、、、

アポインター名に空白を含む場合に JSON.parse が失敗するんですか?

それとも別のところ(例えば setValues など)が失敗するんでしょうか?

1番上のプログラムを実行すると、、、エラーメッセージが

TypeError: Cannot read property 'value' of undefined

なので、

row.push(record["アポインター名"].value);

でつまずいていると考えておりますm(_ _)m、、、

Cannot read property'value'ofundefined

ということは、record に要素がない状態と思われます。

“アポインター名” というフィールドコードがkintone側に定義されていない、という可能性はないでしょうか?

@安藤 光昭さん

ありがとうございます!こちら確認いたします。

(もし確認方法が調べてもわからなかった場合、ご教示いただけますと幸いです、、、)

 

@安藤 光昭さん

"アポインター名"のフィールドコードの件ですが、やはりkintone側の設定がございませんでした、、、

こちら設定したのちに実行したら無事にデータ取得できました、本当にありがとうございます!!!

あとは全件取得できたら全て解決できそうです、、、m(_ _)m(kintoneのAPI仕様を見たら500件までのようなので、、、)

エラー解消したようでよかったです!

500件以上は、こちらの記事(私の記事ではないですが)が参考になるかと思います。
https://developer.cybozu.io/hc/ja/community/posts/360017851006

@**安藤 光昭**さん

ご連絡いただきありがとうございます!おかげさまで無事に表題の問題は解決したのですが、やはり500件以上のレコード取得にずっとつまずいておりまして、、、

ご教示いただきました記事も拝見したのですがなかなか上手く動かず苦戦しております汗、、、