REST APIのPUTメソッド実行時のレスポンスについて

いつも参考にさせていただいております。

現在作成しているアプリケーションにおいてサブテーブル内のデータが思った通りに更新できないため、切り分けとしてクライアントツール(POSTMAN)にて
下記のBODYで更新(PUT)すると、レスポンスがリビジョンしか返ってきません。(サブテーブル内のレコードも更新されていません。)

https://developer.cybozu.io/hc/ja/articles/201941784の「レスポンス」を確認すると、「レコードごとに更新したレコードのidとリビジョンが返されます。」
と記載されていますので、常にリビジョンと更新したデータがレスポンスに含まれるのではと考えております。

*PUTしたBODY

{“app” :“appId”,
“id” :“recordid”,
“record” :{
“イベント一覧表”: {
“value”:[
{
“イベント名”: {
“type”: “SINGLE_LINE_TEXT”,
“value”: “イベント1”
}
}
]
}
}
}

原因として考えられることは、PUTしたBODYのJSONフォーマット(構造)が誤っているためと考えてよろしいでしょうか。

以上よろしくお願いいたします。

持田さん

レコードの更新( 1 件) の場合は、「 更新したレコードのリビジョンが返されます。」 とあります。

レコードの一括更新の場合は、「 レコードごとに更新したレコードのidとリビジョンが返されます。」 です。

レスポンスの内容からっすると、 レコードの更新( 1 件) を使われていると思います。

どちらにせよ、レスポンスのサンプルを見るとわかりますが、「更新したデータがレスポンスに含まれる」のではありません。

「サブテーブル内のレコードも更新されていません」は、持田さんが考えている通り、JSONフォーマット(構造)が誤っているためです。

ちょっと分かりにくいですが、value の階層が足りません。

あと、サンプルにある「“id”: (行のID)」を指定しない場合は、テーブルの全行削除・全行追加になります。

 

{
"app": "appId",
"id": "recordid",
"record": {
"イベント一覧表": {
"value": [{
"value": {
"イベント名": {
"type": "SINGLE_LINE_TEXT",
"value": "イベント1"
}
}
}]
}
}
}

rex0220様

 

いつもお世話になっております。

ご連絡ありがとうございます。

やはり、JSONフォーマットが異なっていたとのことで、自分の想定が合っていたことについては少々安堵いたしました。

サブテーブルの扱いについてまだまだ不慣れな点が多く、いただいたアドバイスをもとにもう一度トライしてみます。

取り急ぎお礼まで。

ありがとうございました。

rex0220様

いつもお世話になっております。
しばらく間が空いてしまい申し訳ございませんが、本件に関連して1点ご教示いただければと思います。
ご教示いただきましたJSONフォーマットにてPUTメソッドを実行したところ対象のサブテーブルのデータが更新される(全件削除したうえで
JSONフォーマットで指定したデータが追加される)ことを確認いたしました。
追加処理として、上記のJSONフォーマットにてPUTメソッド実行後に、さらにサブテーブルにデータを1件ずつ追加したい場合、pushメソッドを使っての更新を考えておりましたが、console.logなどによるトレースもかけておりますが現在のところうまく反映できていません。
追加時にはJSONフォーマットを

subtable.push( {
“value” : {
“イベント名”: {
“type”: “SINGLE_LINE_TEXT”,
“value”: "イベント2”
}
});

としてpushしようとしております。
誤りや参考可能な情報などございましたらご教示いただけますでしょうか。

どうぞよろしくお願いいたします。

PUT 時に、エラーになっていますか?

たぶんテーブルには、"イベント名"以外の項目もあると思います。

テーブルに行を追加する場合は、テーブル内の項目をすべて設定してください。

 

rex0220様

いつもお世話になっております。
アドバイスありがとうございます。
ご質問の件ですが、
console.logやエラー処理を確認する限り、PUT時にエラーは発生していません(該当のサブテーブルには何も値が反映されていない状況です)。
また、”イベント名"以外の全てのサブテーブルのフィールドを指定しています。
気になるのは、テーブル更新のために先ほど記述した

subtable.push( {
“value” : {
“イベント名”: {
“type”: “SINGLE_LINE_TEXT”,
“value”: "イベント2”
}

・・・(サブテーブルの全ての項目をpush)・・・

});

にてsubtableにレコードの全ての項目をpushした後、

tableRecords =
{
“イベント一覧”: {
“value”:[{
subtable
} // end value
] //end “value”:[
} // end “イベント一覧”
} // end tableRecords

で、tableRecords変数に格納されている配列でPUTすると、console.log上、2018年09月19日 18:17にご教示いただきました正常に更新される
場合と比較してsubtableの文字列で表される階層が現れてしまうことです(比較すると1階層深くなっています。)。
上記アドバイスいただいた内容やhttps://developer.cybozu.io/hc/ja/articles/201941784の「リクエストボディ」の構造と比較するとsubtableの分だけ1階層深くなっていることが正常に更新できない原因ではと推測しておりますがどのように実装したらよいのか、現状手探りの状態です。
恐れ入りますがアドバイスを頂けたら幸いです。

以上よろしくお願いいたします。