kintoneに登録されているレコードを更新したら、外部サービスに登録されている情報(IDで紐付いている)も同期する仕組みを考えています。
外部サービスのAPIを使って情報を引き出すこと(GET)までは出来たのですが、更新を行う方法(POSTやPUT)が分かりません。
※引き出す(GET)方法
var leedUrl=(外部サービスのURLやトークン情報、呼び出したいレコードのIDなど);
kintone.proxy(leedUrl, ‘GET’, {}, {}).then(function(args) {
argsにレコード情報が入っています。
更新を行う場合、kintone.proxyのメソッドの部分を「PUT(またはPOST)」にすれば良いのだと思うのですが、
更新情報をどこに記載すればよいのでしょうか?
具体的には、リクエストボディにXMLで情報をセットして、更新を行いたいのですが…
kintone.proxyのデータ欄に書いてみましたが、うまくいきませんでした。
どうぞよろしくお願いいたします。
TAKAさんこんにちは。
相手側のAPIの仕様によって方法はことなりますね。
POSTでXMLデータを送信するタイプであれば、
headersに{‘Content-Type’: ‘text/xml; charset=UTF-8’}
を指定して、dataにXMLを文字列として渡すことになるのではないでしょうか。
https://cybozudev.zendesk.com/hc/ja/articles/202166320
dataは、オブジェクトで渡すとjsonに変換され、文字列で渡すとそのまま出力されます(確か)
お返事ありがとうございます。
やはりdataのところに記載するので合っているのですね…
そこまでは推測していたのですが、実際にここに更新情報を記載すると、
parser error:Start tag expected ‘<’ not found
とエラーが表示されます。
根本的にXMLの生成がうまく出来ていないのでしょうか。
「XMLを文字列として渡す」とは、たとえば
var str=‘<xml><data1>ああああ</data1></xm>’;
のような形になるのでしょうか。
基礎的な部分の知識が不足しているため、このコミュニティにそぐわないご質問をしているようでしたら申し訳ございません。
よろしければアドバイスいただけましたら大変助かります。
>var str=‘<xml><data1>ああああ</data1></xm>’;
>のような形になるのでしょうか。
はい、そういう意図でした。
XMLのパースエラーが発生しているようなので、正しいXMLが生成されているかまず確認してみてください
(ちなみに上のXMLは不正で、</xm>でなく</xml>が正しいです。)
あと、kintone proxyはx-www-form-urlencoded形式には対応していないので、
POST/PUTで<パラメータ名>=<値>みたいなかたちのデータを送ることはできません。
アドバイスありがとうございました。
XMLの生成のところを確認してみます。
大変助かりました。
また何かありましたらご質問するかと思いますが、よろしくお願いいたします。