同期PUTでサブテーブルを更新する時に with a status of 400 (Bad Request)  入力内容が正しくありません エラーが出ました

同期PUTでサブテーブルを更新する時に with a status of 400 (Bad Request) 入力内容が正しくありません エラーが出ました

図1のJSONで「kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, body, function(resp)」うまく出来ますが、同期PUT通信で図2のエラーが出ました。エラー中に更新するレコードIDがないとかいていますが、僕のJSON中に書いていますけど、ID:230は更新するレコードIDです。

分かる方が教えて頂ければ助かります。ありがとうございます。

 

(function() {
“use strict”;

//レコードの編集、詳細画面で適用する
var events = [
‘app.record.edit.submit’,
‘app.record.create.submit’
];
kintone.events.on(events, function(event) {
var record = event.record;
var subtabledata=record.売上計上明細テーブル;
//
var token = kintone.getRequestToken();
updatek22subtable(230,token);
return event;
});

////
function updatek22subtable(rid,token){

var subtable={ // テーブルへの追加行
“value” : {
“売上合計_売上計上” : {
“value” : “888”
}
}
};
var strsubtable=JSON.stringify(subtable);

var body2 = ‘{ “app”: 22,“id”: 230, “record” : { “注文書一覧_売上” : { “value” :[’ + strsubtable + ‘]}},“REQUEST_TOKEN”:"’ + kintone.getRequestToken() + ‘" }’;

var subtableobj=JSON.parse(body2);

var body3 ={“app”: 22,
“records”: [
{
“id”: 230,
“record”: {
“注文書一覧_売上”: {
“value”:[{“value” : {“売上合計_売上計上” :{ “value” : “888” }}}]
}
}
}
]
};

var appid=22;

var query = ‘レコード番号="’ + rid+‘"’;//
query = encodeURIComponent(query);
var appUrl = kintone.api.url(‘/k/v1/records’) + ‘?app=’+ appid + ‘&query=’ + query;

var resp_data=req(appUrl);
if(resp_data.records.length > 0){
for(var i = 0; resp_data.records.length > i; i++){
//k22サブテーブルに更新
var strJSON =body3;// ‘{ “app”: “22”,“id”: ‘+rid+’, “record” : { “注文書一覧_売上” : { “value” : [{“value” : {“売上合計_売上計上” :{ “value” : “888” }}}]}},“__REQUEST_TOKEN__”:"’ + token + ‘" }’;

putreq(strJSON);

}

}

}

function req(reqUri) {

// 同期リクエストを行う
var xmlHttp = new XMLHttpRequest();
xmlHttp.open(“GET”, reqUri, false);
xmlHttp.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
xmlHttp.send(null);

//取得したレコードをArrayに格納
var resp_data = JSON.parse(xmlHttp.responseText);
return resp_data;
}

function putreq(strJSON){

// 登録先アプリの設定
var appURL = kintone.api.url(‘/k/v1/record’);

var xmlhttp = false;

var xhr = new XMLHttpRequest();
xhr.open(‘PUT’, appURL);
xhr.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xhr.setRequestHeader(‘Content-Type’, ‘application/json’);
xhr.onload = function() {
if (xhr.status === 200) {
// success
console.log(JSON.parse(xhr.responseText));
} else {
// error
console.log(JSON.parse(xhr.responseText));
}
};
xhr.send(JSON.stringify(strJSON));

 

}

})();

 

 図1

 図2

 

pankou4649 さん

リクエスト内容は複数レコードの構造ですが、リクエスト先が1レコード対応のAPIです。

var appURL = kintone.api.url(‘/k/v1/record’);

rex0220さん

ご返事、有難うございます。この問題が改善しました、有難うございます。助かりました。

でも下記 図A エラーが出ました。調べますと B)リンク → サブテーブルは "[ ]"が要らないと書いていますので、  C)のスースに変わりました、でも図3のエラーが出ました。

つまり、下記の最新ソースのbody3とbody4はどちらがただしいです、僕が全然分かりません。

図A

B)

https://developer.cybozu.io/hc/ja/articles/201941784-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B4%E6%96%B0-PUT-

 

C)

var body4 ={
“app”: 22,
“records”: [
{ // 1件目のデータ
“id”: 230,
“record”: {
“注文書一覧_売上”: {
“value”:{“value” : {“売上合計_売上計上” :{ “value” : 888 }}}
}
}
}
]
};

図3

 

図4

最新のソース

(function() {
“use strict”;

//レコードの編集、詳細画面で適用する
var events = [
‘app.record.edit.submit’,
‘app.record.create.submit’
];
kintone.events.on(events, function(event) {
var record = event.record;
var subtabledata=record.売上計上明細テーブル;
//
var token = kintone.getRequestToken();
updatek22subtable(230,token);
return event;
});

////
function updatek22subtable(rid,token){

var subtable={ // テーブルへの追加行
“value” : {
“売上合計_売上計上” : {
“value” : “888”
}
}
};
var strsubtable=JSON.stringify(subtable);

var body2 = ‘{ “app”: 22,“id”: 230, “record” : { “注文書一覧_売上” : { “value” :[’ + strsubtable + ‘]}},“REQUEST_TOKEN”:"’ + kintone.getRequestToken() + ‘" }’;

var subtableobj=JSON.parse(body2);

var body3 ={“app”: 22,
“records”: [
{
“id”: 230,
“record”: {
“注文書一覧_売上”: {
“value”:[{“value” : {“売上合計_売上計上” :{ “value” : “888” }}}]
}
}
}
]
};

var body4 ={
“app”: 22,
“records”: [
{ // 1件目のデータ
“id”: 230,
“record”: {
“注文書一覧_売上”: {
“value”:{“value” : {“売上合計_売上計上” :{ “value” : 888 }}}
}
}
}
]
};

var appid=22;

var query = ‘レコード番号="’ + rid+‘"’;//
query = encodeURIComponent(query);
var appUrl = kintone.api.url(‘/k/v1/records’) + ‘?app=’+ appid + ‘&query=’ + query;

var resp_data=req(appUrl);
if(resp_data.records.length > 0){
for(var i = 0; resp_data.records.length > i; i++){
//k22サブテーブルに更新
var strJSON =body4;// ‘{ “app”: “22”,“id”: ‘+rid+’, “record” : { “注文書一覧_売上” : { “value” : [{“value” : {“売上合計_売上計上” :{ “value” : “888” }}}]}},“__REQUEST_TOKEN__”:"’ + token + ‘" }’;

putreq(strJSON);

}

}

}

function req(reqUri) {

// 同期リクエストを行う
var xmlHttp = new XMLHttpRequest();
xmlHttp.open(“GET”, reqUri, false);
xmlHttp.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
xmlHttp.send(null);

//取得したレコードをArrayに格納
var resp_data = JSON.parse(xmlHttp.responseText);
return resp_data;
}

function putreq(strJSON){

// 登録先アプリの設定
var appURL = kintone.api.url(‘/k/v1/records’);

var xmlhttp = false;

var xhr = new XMLHttpRequest();
xhr.open(‘PUT’, appURL);
xhr.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xhr.setRequestHeader(‘Content-Type’, ‘application/json’);
xhr.onload = function() {
if (xhr.status === 200) {
// success
console.log(JSON.parse(xhr.responseText));
} else {
// error
console.log(JSON.parse(xhr.responseText));
}
};
xhr.send(JSON.stringify(strJSON));

 

}

})();

 

 

サブテーブルは、配列構造です。

 

“注文書一覧_売上”: {
“value”:{“value” : {“売上合計_売上計上” :{ “value” : 888 }}}
}

 

 

**rex0220さん **

ご返事、有難うございます。

>サブテーブルは、配列構造です。
 >"注文書一覧_売上": {
>"value":{"value" : {"売上合計_売上計上" :{ "value" : 888 }}}
>}

 つまり 僕のbody4が正しいですか?PUTでサブテーブル更新と普通のレコード更新と同じと考えています、ただサブテーブルの更新は一つフィルドではなく、配列ですと認識は正しいですか?

でも、下記のエラーはbody4のJSONは違いますと書いています、どこの問題は全然分かりません、rex0220さん もし 何かわかったら、教えて頂きたいです。

有難うございます。

先ほどアップロードしていたコードが削除されていますが、コード上は、配列ではなくオブジェクトでした。

先ほど言ったように、実際に送信したデータをデバッグツールで確認しましょう。

 

“注文書一覧_売上”: {
“value”:{“value” : {“売上合計_売上計上” :{ “value” : 888 }}}
}

 

 

rex0220さん

ご返事、有難うございます。

debug ツールはどこにありますか?

下記に参考になりそうなリンクがありますので、確認してみてください。

https://qiita.com/rex0220/items/05ebd85e918eeb16e483#%E3%83%87%E3%83%90%E3%83%83%E3%82%B0

rex0220さん

有難うございます。