初めて投稿します。
ASP.NET(C#)でRESTAPIを通じて、kintoneからデータを取得するプログラムを作成していて、問題にあたっており困っています。ご教授頂ければ幸いです。
問題箇所
strQuery1 = “creator in("” + creat + “")”;
creator は 作成者項目のフィールドコードです。
creat には、プログラムの上流で検索したい文字列が代入されます。
上記の strQuery1 変数を、クエリ文としてAPIで問合せした時に、
creat に代入された値によって、挙動がかわり、困っています。
値が半角文字列・・・問題無し。きちんと対象レコードがかえってきます。
値が全角文字列・・・Error E201: Kintone API 処理エラー (520:520)
これまでテキスト等の項目について、抽出をかけていた時はこういった現象はなかったのですが、作成者を条件に抽出をする場合、文字列の事前処理が必要なのでしょうか。
よろしくお願いいたします。
(追記です)
queryパラメータは、API問合せ前に、UTF-8エンコードし、URLクエリ文字列を生成しています。
queryString += “&query=” + HttpUtility.UrlEncode(strQuery1, Encoding.UTF8);
OKパターン(半角)
app=省略&query=creator+in(%22yangyi%22)
NGパターン(全角)
app=省略&query=creator+in(%22%e6%9d%be%e6%9d%91%22)
私が見る限り、特に差は無い様に感じるのですが、エラー原因が分かりません。
上海レンユアー 松村さん、難解なエラーメッセージですね。
ChromeのPOSTMANと次のPythonスクリプトで試行させて頂きました限りでは、全角/半角で挙動が変わるといったことはなさそうです。
私がASP.NETの知識が無く申し訳ないのですが、ASP.NETの環境で生成されているリクエストURIでPOSTMAN等のブラウザアドオンのHTTPクライアントでリクエストが通るか確認されると切り分け出来るのではないかと思います。直接的な解決策でなく、また試行済みでしたらすみません。
coding: utf-8
import httplib, urllib, base64, json
authToken = base64.b64encode(“yamashita:password”)
query = urllib.quote(‘creator in ("やました", "yamashita")’)
params={}
headers = {“X-Cybozu-Authorization”: authToken}
conn = httplib.HTTPSConnection(‘{subdomain}.cybozu.com:443’)
conn.request(“GET”, “/k/v1/records.json?app={appId}&query=”+query, params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
print data
conn.close()
Yamashita さん
ご丁寧なアドバイス、まことにありがとうございます。おかげさまで解決致しました。POSTMANという便利なツールがあるのですね。恥ずかしながら、初めて使いました。
結論から言いますと、作成者フィールドの検索仕様を完全に勘違いしておりました。kintoneのユーザー作成時に、ログイン名と表示名がありますが、この表示名で検索していると思い込んでおりました。
前述の全角文字列での問い合わせは、あくまで表示名なので、実際にはそのログイン名は存在せず、「指定したユーザー(code:全角文字列)が見つかりません。」というエラーメッセージが帰ってきていました。
プログラムではステータスしか拾っていなかったので、POSTMANでこのメッセージを目視確認できた為、原因判明しました。
初歩的なミスで恥ずかしいですが、とにかく解決できたので、大変助かりました。お礼申し上げます。
上海レンユアー 松村さん、解決されたようで良かったです!
実は私も最初に同じくエラーメッセージ見て修正した経験がありましたので、ピュアなエラーメッセージではなさそうということを含めて何となくの予感がありました^^ メッセージに経験があったが故に確信も持てなかった訳ですが。
少し補足させて頂きますと、kintoneはリクエストとしての文法が正しければエラーメッセージもJSONで返してくれます。過去にcodeの部分の値の定義が変更になった事もありますが、この辺を開発に役立てるのもありかと思います。このような変更は滅多にありませんし、事前にお知らせがありますので。
私もスクリプト等で上手くリクエスト出来ない時には、まずPOSTMANで通せるか確認します。これが出来れば後は自分の書き方を疑って詰めていく感じです。
POSTMAN以外にもブラウザアドオンのHTTPクライアントはありますが、POSTMANはコレクションとしてリクエストを保存出来たり、コレクションのエクスポート/インポートもでき、便利だと思います。kintoneではファイルアップロードに使われているform-dataのリクエストも通せたりもしますので、離せなくなります。