AアプリのデータをBアプリのテーブルに追加する方法を考えています。
1.GETメソッドでBアプリのテーブル情報を取得
2.戻り値のJSON形式データに行追加
3.POSTメソッドで更新
このような感じで考えていますが、2で悩んでいます。
簡単に1行データだけを追加する方法はないのでしょうか。
JavaScriptで実装したいのですが、JSON形式の更新データを作成する関数を作成するしかないのでしょうか。
良い方法があればご教授頂けますでしょうか。
よろしくお願いいたします。
AアプリのデータをBアプリのテーブルに追加する方法を考えています。
1.GETメソッドでBアプリのテーブル情報を取得
2.戻り値のJSON形式データに行追加
3.POSTメソッドで更新
このような感じで考えていますが、2で悩んでいます。
簡単に1行データだけを追加する方法はないのでしょうか。
JavaScriptで実装したいのですが、JSON形式の更新データを作成する関数を作成するしかないのでしょうか。
良い方法があればご教授頂けますでしょうか。
よろしくお願いいたします。
Aアプリのイベントで1〜3を実現するのであれば、ご認識の通りJSONのデータを作成する必要はあります。
が、テーブル1行を追加するだけでればわざわざ関数にしなくても良いかなと思います。
例えば、サブテーブル(Table)の文字列フィールド(table_string)に一行値を入れるのであれば以下の様なJSONでいけます。
‘{ “app”: “アプリID”,“id”: “更新するレコード番号”, “record” : { “Table” : { “value” : [{“value” : {“table_string” :{ “value” : “テストです” }}}]}}," REQUEST_TOKEN":“トークン” }’;
ご存知かもしれませんがテーブルを更新する時は、既にテーブルに値がある場合は必ずすべての行の値を指定する必要があります。
また、更新時には必ずリクエストトークンを取らないといけませんのでこちらもご注意を。
簡単なサンプルコードを以下に書きますね。(半角空白が削られてしまうのでみづらくてすみません。。)
// CSRFトークンのの取得
var token = kintone.getRequestToken();
// 登録先アプリの設定
var appURL = kintone.api.url('/k/v1/record');
// JSONの設定
var strJSON = '{ "app": "43","id": "1", "record" : { "Table" : { "value" : [{"value" : {"table_string" :{ "value" : "テストです" }}}]}}," __REQUEST_TOKEN__":"' + token + '" }';
var xmlhttp = false;
if(typeof ActiveXObject != "undefined"){ //IE
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlhttp = false;
}
}
if(!xmlhttp && typeof XMLHttpRequest != "undefined") { //IE以外
xmlhttp = new XMLHttpRequest();
}
xmlhttp.open("PUT", appURL, false);
xmlhttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlhttp.setRequestHeader('Content-Type','application/json');
xmlhttp.send(strJSON);
if (xmlhttp.status == 200) {
//成功した時の処理
}else{ //削除失敗
//失敗した時の処理
}
と、思ったらコードはそのまま表示されるようになってました!
行を追加したテーブルを反映するリクエスト用JSONを作るには、次のような書き方ができると思います(ベタですが)。1のGETが単一レコード取得(record.json)で、レスポンスをobjとしておきます。
//-- beginning of snippet
var insertedRow = { // テーブルへの追加行
“value” : {
“col1” : { // 1列目のフィールドコード
“value” : “テストです1” // 1列目の値
},
“col2” : { // 2列目のフィールドコード
“value” : “テストです2” // 2列目の値
}
}
};
obj[‘record’][‘Table’][‘value’].push(insertedRow); // 取得したレコードJSONのテーブルの最終行に追加
var strJSON = ‘{ “app”: “43”,“id”: “1”, “record” : { “Table” : { “value” :’ + obj[‘record’][‘Table’][‘value’] + ‘}}," REQUEST_TOKEN":"’ + token + ‘" }’; // テーブル部分をリクエスト用JSONに組込み
//-- end of snippet
テーブルの取り扱いは情報が少なかったですが、Tipやdocumentationの方にも情報が追加されていますので、参考にされてはと思います。
https://developers.cybozu.com/ja/kintone-api/apprec-createapi.html
ありがとうございます。
戻り値のJSONに行を追加できました。
ただ、更新は全行値を指定しないといけないんですね。
追加したオブジェクトをそのまま引数に渡せれば楽なんですけど。。
大川さん
テーブル全体がいちフィールドという扱いから、このようになるんでしょうねぇ。ちょっと深くなるのが難点ですが・・・慣れると、これはこれでありかなぁとなってしまっています(^^;