PUTを使ってテーブルを更新する際、チェックボックスからチェックを外すことができない

カスタマイズビューにおいて、レコードごとに表示したチェックボックスの状態を、テーブルに反映させたいと考えております。

カスタマイズビューにて、あるレコードのチェックボックスにチェックを入れて保存ボタンを押すと、同一アプリの該当レコードのチェックボックスにチェックが入るようにはできたのですが、

その逆に、あるレコードのチェックボックスを外して保存ボタンを押しても、エラー『400 (Bad Request)』となってしまいます。

https://cybozudev.zendesk.com/hc/ja/articles/202166330-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E5%BD%A2%E5%BC%8F

上記を参考にして、OrderSelectというチェックボックスのSelectという名前の項目にチェックを入れることはできましたが、逆にこのSelectという項目からチェックを外す際には、put のパラメーターに何をセットすればよいのでしょうか?
OrderSelect に null や “” をセットしても(確かに当然ですが)エラーとなります。

基本的な質問で大変恐縮ですが、よろしくお願いいたします。

以下、保存ボタンを押した際のソースです。

SaveListButton.onclick = function() {
var ListTable = document.getElementById(‘OrderListTTbody’);
var SelectFlug = ‘’;
var putRecords = [];
var j = 0;
for(var i = 0 ; i < ListTable.rows.length; i++){
if (ListTable.rows[i].cells[0].childNodes[0].checked == true) {
var FlgSelect = “Select”;
var SelectedQuantity = ListTable.rows[i].cells[3].childNodes[0].selectedIndex;
}
else {
var FlgSelect = null;
var SelectedQuantity = 0;
}
putRecords[j] = {
id: ListTable.rows[i].cells[4].innerText,
record: {
“OrderSelect”: { “value”: [FlgSelect]},
OrderQuantity: { value: SelectedQuantity }
}
};
j = j + 1;
}
kintone.api(
kintone.api.url(‘/k/v1/records’, true),
‘PUT’, {
app: CrrAppId,
records: putRecords
},
function(resp) {
alert(‘ルックアップの更新が完了しました!’);
}
);
};

 

配列の空 [] を渡してあげます。
あと、変数の宣言位置が気になったので、直してます。

var FlgSelect = [];
var SelectedQuantity = 0;
if (ListTable.rows[i].cells[0].childNodes[0].checked == true) {
FlgSelect = ["Select"];
SelectedQuantity = ListTable.rows[i].cells[3].childNodes[0].selectedIndex;
}
putRecords[j] = {
id: ListTable.rows[i].cells[4].innerText,
record: {
"OrderSelect": { "value": FlgSelect },
OrderQuantity: { value: SelectedQuantity }
}
};

チェックボックスからチェックを外す際は、空の配列を送ってみましたが、やっぱり上記と同様のエラー『400 (Bad Request)』でダメでした。
その際のソース(PUTパラメーター作成部分)です。

for(var i = 0 ; i < ListTable.rows.length; i++){
var FlgSelect = [];
if (ListTable.rows[i].cells[0].childNodes[0].checked == true) {
FlgSelect[0] = “Select”;
var SelectedQuantity = ListTable.rows[i].cells[3].childNodes[0].selectedIndex;
}
else {
var SelectedQuantity = 0;
}
putRecords[j] = {
id: ListTable.rows[i].cells[4].innerText,
record: {
“OrderSelect”: { “value”: FlgSelect},
OrderQuantity: { value: SelectedQuantity }
}
};
j = j + 1;
}

何かまたトンチンカンなことをしているようでしたら、ご指摘いただけると幸いです。
お忙しい中大変恐縮ですが、よろしくお願いいたします。

すみません、返信を確認する前に追加の投稿をしてしまいました。
行き違いでした。
頂いたソースを参考にちょっと考えてみます。

OrderSelect が必須項目とか?

rex0220さん

いつも本当にありがとうございます。

やっていることはあっているはずだし、ソースも間違っていないし、デバッグで確認してもパラメータはちゃんと空の配列を送っているし、それでも『400 (Bad Request)』のエラーを突き付けられて半日悩みました。
その結果、チェックボックスではなく、一緒にPUT 用のパラメータに設定している Quantity に入れる数字の型がまずいことが原因と判明しました。
当初悩んでいたチェックボックスとは全く関係ないところでエラーが出ていたようで、呆れるばかりです。
お騒がせいたしました。

**チェックボックスに関しては、頂いたソースで動作します。

Quantity には当然数字が入るのですが、携帯やタブレットでの入力を想定して、フォームの設定でドロップダウンを使って1から99までの数字を選べるように設定しておりました。
(今は、カスタマイズビューを使って画面を作っているのでアプリのフォームの設定でドロップダウンにする必要などないのですが)
ドロップダウンということは、文字も数字も選択できるわけで、当然文字列で待ち構えているのですが、PUTのパラメータには数値を設定していたので『400 (Bad Request)』となっていたようです。
数値項目を文字列に変換してパラメータに設定したところ、あっけなくエラーは解消されました。**

空の配列の設定や、数値から文字列への変換など、いろいろ勉強になりました。
ありがとうございます。

 

ご参考に。
chrome のデバッグツールで、 Network タブを見ると、送受信した内容を見ることができます。
Bad Request の場合は、送信内容を見ると原因がわかることが多いです。

 

ありがとうございます。
今度同じエラーが出たら参考にしてみます。