新規投稿
フォローする

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);

}

 

0

11件のコメント

Avatar
安藤 光昭

※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());

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

1
Avatar
kenichi nagahama

@安藤 光昭さん

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

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

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

1
Avatar
安藤 光昭

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

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

0
Avatar
kenichi nagahama

ありがとうございます!

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

0
Avatar
安藤 光昭

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

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

0
Avatar
kenichi nagahama

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

TypeError: Cannot read property 'value' of undefined

なので、

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

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

0
Avatar
安藤 光昭
Cannot read property 'value' of undefined

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

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

0
Avatar
kenichi nagahama

@安藤 光昭さん

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

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

 

0
Avatar
kenichi nagahama

@安藤 光昭さん

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

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

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

1
Avatar
安藤 光昭

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

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

0
Avatar
kenichi nagahama

@安藤 光昭さん

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

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

0
サインインしてコメントを残してください。