サブテーブル内の特定行の更新について

お世話になります。

作業日報入力(日単位)を登録すると、勤怠データ(月単位:サブテーブルあり)にある日報入力で入力した日付の明細行のフラグを更新しています。

サブテーブル内の指定行の値は更新されたのですが、それ以外の明細データが削除されてしまいました。

すみませんが、どこが悪いのか修正箇所をご教授いただけないでしょうか。

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

 

※以下URLを参照し、コードを作成しました。

https://developer.cybozu.io/hc/ja/articles/200752984-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%93%8D%E4%BD%9C%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF

 

==========================================================================

 

// ****************************************************************************
// ***** 保存ボタン正常後イベント
// ***** 作業日報を基に勤怠データの指定日のフラグを更新
// ****************************************************************************
kintone.events.on([“app.record.create.submit.success”, “app.record.edit.submit.success”], function(event) {

// 画面で入力した日付より年月及び日を分割取得
var i_YM = cutByte(event.record.年月日.value,1,6);
var i_D = cutByte(event.record.年月日.value,7,2);

return new kintone.Promise(function(resolve, reject) {
//勤怠入力のデータ確認
var param1 = {
app: Attendance_Input_APPID,
query: ‘社員番号 = "’ + event.record.社員番号.value + ‘" and 年月 = "’ + i_YM + ‘"’
};

kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, param1, function (resp1) {
if (resp1.records.length !== 0){
resolve(resp1);
} else {
alert(‘勤怠入力の読込みに失敗しました。’);
resolve(false);
}
});
}).then(function(resp1) {
// 更新行を算出
var mainkey = resp1.records[0].主キー.value;
var tableRecords = resp1.records[0].明細.value;
var lineId = tableRecords[Number(i_D - 1)].id;

var param2 = {
“app” : Attendance_Input_APPID,
“updateKey” : {
“field” : “主キー”,
“value” : mainkey
},
“record” : {
“明細”: {
“type”: “SUBTABLE”,
“value”: [
{
“id”: lineId,
“value”: {
“日報FLG”: {
“type”: “SINGLE_LINE_TEXT”,
“value”: “済”
}
}
}
]
}
}
};

//勤怠入力のフラグ更新
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, param2).then(function (resp2) {
resolve(event);
}, function(error) {
alert(‘勤怠入力の書込みに失敗しました。’ );
resolve(false);
});
});
});

isozumiさん

こんにちは。

サブテーブルの更新は、更新されたデータでテーブルが書き換えられてしまう(参考)ため、

以下のような手順になるかと思います。

  1. テーブルデータ全件取得
  2. 該当する行のデータを更新(JSONを編集)
  3. 更新行を含むテーブル全件データでレコードを更新

こちらのスレッドも参考にしてみてください。

 

 

松田さん

ご返事有難うございました。

(参考)の「テーブルの1行の特定のフィールドのみを更新する」の「注意事項」に記述がありました。