kintone.api

kintoneにてRESTAPIを使用し、レコードを取得しようとしているのですが、

var param={
“app”:518,
“query”: ’ レコード番号 > “1460” and レコード番号 < “2000” order by レコード番号 asc limit 100 offset 0 ’
};

var result;
kintone.api( “/k/v1/records.json?”, “GET”, param ,function(res){
result = res[“records”];
},function(error){
result = false;
});

console.log(result);

などと条件を指定して、
レコードを取り出そうとしているのですが、undefinedになってしまいます。
ブラウザにてリクエスト状態をみるとレコードが取れていることから
クエリの記法などにミスはないとおもいます。

また下記のURLのように
https://cybozudev.zendesk.com/hc/ja/articles/202166310-kintone-REST-API-%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88
kintone.api内でconsole.log(res[“records”])とやるとレコードの情報が取れます。

おそらくはスコープの範囲だとは思うのですがわかるかたいらっしゃいましたら
ご教授いただければと思います。

松本さん
ラジカルブリッジの斎藤です。

kintone.api()は非同期メソッドなので、レコードの取得が完了する前に最終行の console.log(result); が実行されてしまうため undefined になってしまうのだと思います。
既に試されている通り、kintone.api内で表示した場合はうまく表示されます。

ラジカルブリッジ
斎藤さま

ご回答ありがとうございます。

非同期ということで
ただいま非常に少ないデータ量でとりましたら実行できました!
ありがとうございました。

ただやはりデータが多いとundefinedになってしまいます。

こちら確実にkintone.apiの外にデータを出したいときの方法など
ご存知でしょうか?

kintone.apiの中にreturnを入れてもダメですし・・・

もしご存じであれば教えていただければと思います。

松本様:

いつもお世話になっております。
アイティー・プラス・ワンの星野です。

横から失礼します。
内容を読ませていただきました。
松本様の最優先はkintoneでjavaScriptを利用し、データを取得したいことで間違いないでしょうか?
もし「kintone.api()の利用」が必須条件となりましたら、下記の文章は無視していただいて結構です。

斎藤様がすでに記載されておりますが、kintone.api()非同期メソッドです。
一つのイベント(ボタンクリックやリストの変更)中にレコードを取得して処理を行いたい要であれば同期処理を行ってはどうでしょうか?
ただ、kintone.api()は利用しない為、推奨はされていないかもしれませんが・・・

サンプルコードを以下に記載します。

少しでも参考になれば幸いです。

// 条件パラメータは必要に応じて
var appUrl = kintone.api.url(‘/k/v1/records’) + ‘?app=518’;
var xmlHttp = new XMLHttpRequest();
var result;
// 同期リクエストを行う
xmlHttp.open(“GET”, appUrl, false);
xmlHttp.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
xmlHttp.send(null);

if (xmlHttp.status == 200){
if(window.JSON){
var obj = JSON.parse(xmlHttp.responseText);
// レコード情報を取得します
result = obj.records;
for (j=0; j < result.length ; j+=1) {
// XXXXは取得したいフィールドコード
console.log(result[j].XXXX.value);
break;
}
}
}
return event;

質問の意図に沿ってませんでしたら申し訳ありません。

アイティー・プラス・ワン
星野さま

おせわになります。松本と申します。

>松本様の最優先はkintoneでjavaScriptを利用し、データを取得したいこと
>で間違いないでしょうか?
>もし「kintone.api()の利用」が必須条件となりましたら、下記の文章は無視して>いただいて結構です。

はい。実は以前よりXMLHttpRequestを使ってデータを取得しておりましたが、

kintone.api()は利用しない為、推奨はされていないかもしれませんが・・・

XMLHttpRequestの方法は非推奨のような位置づけらしいのでkintone.apiを使用した同期処理が可能であればそちらを採用しようと思っておりました。

結論から言いますと他アプリからの同期的なデータ取得に関しては
XMLHttpRequestを使うしかないということですかね。

大変わかりやすいサンプルコードありがとうございます。参考にさせていただきます。

松本さん 星野さん

既に解決済みかと思いますが、星野さんが書かれている通り、同期処理として動作させたいのであれば、基本的にはXMLHttpRequestの利用が必須かと思います。
尚、kintoneとしてはXMLHttpRequestの利用は非推奨というわけではないと思います。(kintoneのバージョンアップにより使えなくなるというわけではない)
但し、Web開発の世界で全般的にXMLHttpRequestが非推奨になっていく流れにあるという状況ではあるようですが。。

齋藤さま

XMLHttpRequestについてのご説明ありがとうございます。

同期処理として動作させたいのであれば、基本的にはXMLHttpRequestの
利用が必須かと思います。
尚、kintoneとしてはXMLHttpRequestの利用は非推奨というわけではないと>思います。(kintoneのバージョンアップにより使えなくなるというわけではない)
但し、Web開発の世界で全般的にXMLHttpRequestが非推奨になっていく流>れにあるという状況ではあるようですが。。

ありがとうございます。現状、同期的なレコード取得などはXMLHttpRequest
でないとできないようですね。こちらですすめるようにしてみます。

いろいろと丁寧なレクチャーありがとうございました。