初歩的な質問ですいません。色々調べたのですが、うまく動きませんので
こちらで質問させていただきます。
RESTAPIを用いてレコードを抽出するために下記の様な形でクエリーを発行しております。
var appNo = “XX”;
var data =“?app=” + appNo + “&query=”;
var query ="created_time > "2014-05-01T09:00:00+0900" and created_time < "2014-05-01T14:00:00+0900" order by record_number desc limit 2 ";
query = encodeURI(query);
data = data + query;
var kintoneURL = “https://XXXX.cybozu.com/k/v1/records.json” + data //KintoneAPI呼出
var cAuthorization = “省略”
~この後にXMLHttpRequestでGET~
ところがStatusが520で帰ってきて「CB_IL02」というエラーとなってしまいます。
queryの文字列を抜いて実行するとうまく動くようですが
var data =“?app=” + appNo + “&=”;
今度は抽出条件をきちんと判定してくれないように見受けられます。
APIの資料には項目名が日本語でも抽出できるように見えたのですが、
どのように記述すればうまくクエリーを働かせることができるのでしょうか?
ご教示のほど、よろしくお願いいたします。
xsoladmさん、こんばんは。
URLエンコード用の関数を「encodeURI」から「encodeURIComponent」に変えて頂くと、上手くいくと思います。
この辺を見て頂くと違いがわかりますがURLエンコードも使い分けが必要で、私が経験したケースではkintoneのJavaScriptでは次の表記でうまくいっています。
http://www.m-bsys.com/code/javascripr-encodeuri
var appUrl = kintone.api.url(‘/k/v1/records’) + ‘?app=’+ kintone.app.getId() + ‘&query=’ + encodeURIComponent(query);
「encodeURI」、「XMLHttpRequest」から勝手にJavaScriptとの推測でコメントさせて頂きましたが、お使いになる言語によって、URLエンコードする関数の仕様が微妙に異なったりするので、ご確認頂ければと思います。
ご回答ありがとうございます。
説明不足で申し訳ありません。
現在JavaScriptでテストスクリプトを作成し、
RESTAPIを用いて接続を試みています。
アドバイスに従って書替えてみたのですが、
状況は変わらずStatus=520でエラーが「CB_IL02」のままです。
5行目の「query」という記述を外すと、レスポンスが返ってきてJSON自体は取得できていますが、抽出条件はうまく動きません。
他に何か調べられるところがありますでしょうか?
var appNo = “XX”;
var kintoneURL = “https://XXXX.cybozu.com/k/v1/records.json”
var cAuthorization = “省略”
var data =‘?app=’ + appNo + ‘&query=’;
var query ="created_time > "2014-05-01T09:00:00+0900" and created_time < "2014-05-01T14:00:00+0900" order by record_number desc limit 2 ";
query = encodeURIComponent(query);
kintoneURL = kintoneURL + data + query;
重ね重ね申し訳ありませんがよろしくお願いいたします。
すみません。的を外したようですね(「+」記号にエンコードかからなかったのかと)。
私の経験で「520」、「CB_IL02」になるパターンとして、他に未設定のフィールドコードがqueryに入っているケースがありましたが、いかがでしょうか?
私の方で再度試させてもらった感じですと、以下のコードはそのまま動くと思います。startTime、endTimeを振ってみると取れるレコード数が変わってくると思います(条件から全て外れても数量0のオブジェクトが返ります)。
(function () {
“use strict”;
kintone.events.on('app.record.index.show', function(event){
var startTime = "2014-05-01T09:00:00+0900";
var endTime = "2014-05-01T14:00:00+0900";
var query = '作成日時 > "' + startTime + '" and 作成日時 < "' + endTime +'" order by レコード番号';
var appUrl = kintone.api.url('/k/v1/records') + '?app='+ kintone.app.getId() + '&query=' + encodeURIComponent(query);
var xmlHttp;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", appUrl, false);
xmlHttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlHttp.send(null);
var obj = JSON.parse(xmlHttp.responseText);
console.log(obj);
}); // kintone.events
})();
あとは、条件を4つ設定されているようですので、一つずつチェックされてみるのも良いかと思います。
コードの一部が枠から漏れてしまいましたね(–;
ちなみに、以前は「ダブルクウォテーション(“)」をエスケープ「”」する必要があったような気がしましたが、これはどちらでも良いようです。
また、queryを外して動いている分は、通常のレコード取得(直近100件全フィールド)が動作できているということですね。オプションパラメータとしてqueryやfields[]を「&(アンド)」で組み合わせる事で絞られていきますので、queryの4条件の中に原因があります。
ありがとうございます。無事動作しました。
最終的には以下の様にすると無事動作しました。
var appNo = “XX”;
//KintoneAPI用URL
var kintoneURL = “https://XXX.cybozu.com/k/v1/records.json” //追加ヘッダー
var cAuthorization =“省略”
var data =‘?app=’ + appNo + ‘&query=’;
//開始時刻指定
var startTime = “2014-05-01T09:00:00+0900”;
//終了時刻指定
var endTime = “2014-05-01T14:00:00+0900”;
//クエリー指定
var query =‘作成日時 > "’ + startTime + ‘" and 作成日時 < "’ + endTime +'" order by レコード番号 desc limit 1 ';
query = encodeURIComponent(query);
kintoneURL = kintoneURL + data + query;
非常に助かりました。ありがとうございます。