レコード一覧画面でボタン押下後に項目が更新されるようにしたい

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

アプリのレコード一覧画面にCSV出力ボタンを設置し、そのボタンを押すと、レコードをCSV出力、レコードの項目を更新する、という一連の処理をkintoneのREST API、Javascriptを使用して実装しようとしております。
CSVの出力までは問題なく行えて、エラーも出ずにレスポンスでレコードのリビジョンが上がるのですが、肝心のレコードの項目更新がされず困っております。

いろいろ調べて試してみたのですが、さっぱり解決の糸口がつかめないため、お知恵を貸していただけますと助かります。

以下、長いですがほぼそのままのコードになります。
よろしくお願いいたします。

(function() {
‘use strict’;

var CSVButtonEl;
kintone.events.on(‘app.record.index.show’, function (event) {

//変数の定義
var records = event.records;
console.log(records);

//CSV用フィールドコード
var seikyu_code, user_name, A, depart, dest, B, C = “”;
var postal_code, prefect, address, building, phone = “”;
var D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c = “”;

//function requestで使う変数
var resp = [];
var query = “”;
var app_id = kintone.app.getRelatedRecordsTargetAppId(‘reference’);

//csvの配列
var csv = [];

//ボタンの有無をチェック
if (!CSVButtonEl) {
setBtn();
CSVButtonEl.addEventListener(‘click’, toClick);
}

//ボタンエレメントの生成
function setBtn() {
var spaceEl = kintone.app.getHeaderMenuSpaceElement();
var text = document.createTextNode(‘CSV出力’);
CSVButtonEl = document.createElement(‘button’);
CSVButtonEl.appendChild(text);
spaceEl.appendChild(CSVButtonEl);
}

//クリックした際の処理
function toClick() {
getMakeCsv();
downloadFile(csv);
console.log(‘ok’);

exportFlag();
}

function getMakeCsv() {
//現在のレコード情報を取得
csv += [‘請求先コード’,‘請求先名’,‘請求先部署番号’,‘請求先部署名’,‘宛名1’,‘宛名2’,‘宛名3’,‘郵便番号’,‘都道府県’,‘地区町村番地’,‘建物名’,‘電話番号’,‘請求書テンプレート’,‘決済手段’,‘振込元口座名義’,‘会計ソフト連携用請求先部署コード’,‘CC送信先メールアドレス’,‘請求元担当者コード’,‘メモ’,‘請求先部署コード’,‘合計請求書_請求先コード’,‘合計請求書_請求先部署番号’,‘合計請求書_請求先部署コード’,‘請求方法’,‘請求書発行日_月’,‘請求書発行日_日’,‘請求書送付予定日_月’,‘請求書送付予定日_日’,‘決済期限_月’,‘決済期限_日’,‘請求元銀行振込パターンコード’,‘決済情報番号’,‘決済情報コード’,‘決済情報名’,‘請求先部署売掛金補助科目コード’,‘請求先部署前受金補助科目コード’,‘請求先部署仮受金補助科目コード’,‘手数料自動消込許容金額’, ‘’];//1行目の項目名は手動で設ける必要がある
for (var i = 0; i < records.length; i++) {
seikyu_code = records[i].seikyu_code.value;
user_name = records[i].user_name.value;
A = records[i].A.value;
depart = records[i].depart.value;
dest = records[i].dest.value;
B = records[i].B.value;
C = records[i].C.value;
postal_code = records[i].postal_code.value;
prefect = records[i].prefect.value;
address = records[i].address.value;
building = records[i].address.value;
phone = records[i].phone.value;
D = records[i].D.value;
E = records[i].E.value;
F = records[i].F.value;
G = records[i].G.value;
H = records[i].H.value;
I = records[i].I.value;
J = records[i].J.value;
K = records[i].K.value;
L = records[i].L.value;
M = records[i].M.value;
N = records[i].N.value;
O = records[i].O.value;
P = records[i].P.value;
Q = records[i].Q.value;
R = records[i].R.value;
S = records[i].S.value;
T = records[i].T.value;
U = records[i].U.value;
V = records[i].V.value;
W = records[i].W.value;
X = records[i].X.value;
Y = records[i].Y.value;
Z = records[i].Z.value;
a = records[i].a.value;
b = records[i].b.value;
c = records[i].c.value;

//CSVファイルに上記で取得したデータを記入していく
csv += seikyu_code +‘,’+ user_name +‘,’+ A +‘,’+ depart +‘,’+ dest +‘,’+ B +‘,’+ C +‘,’+ postal_code +‘,’+ prefect +‘,’+ address +‘,’+ building +‘,’+ phone +‘,’+ D +‘,’+ E +‘,’+ F +‘,’+ G +‘,’+ H +‘,’+ I +‘,’+ J +‘,’+ K +‘,’+ L +‘,’+ M +‘,’+ N +‘,’+ O +‘,’+ P +‘,’+ Q +‘,’+ R +‘,’+ S +‘,’+ T +‘,’+ U +‘,’+ V +‘,’+ W +‘,’+ X +‘,’+ Y +‘,’+ Z +‘,’+ a +‘,’+ b +‘,’+ c +‘,’+ ‘’;
}
}

function request(app_id, query){
var appUrl = kintone.api.url(‘/k/v1/records’) + ‘?app=’ + app_id + ‘&query=’ + query;
var respdata = JSON.parse(xmlHttp.responseText);
return respdata;
}

//ダウンロード関数
function downloadFile(csv) {
//ファイル名の設定
var filename = ‘CSV_’ + getTimeStamp() + ‘.csv’;

//Blob準備
var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
var blob = new Blob([bom, csv], {type: ‘text/csv’});

if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, filename);
} else {
var url = (window.URL || window.webkitURL);
var blobUrl = url.createObjectURL(blob);
var e = document.createEvent(‘MouseEvents’);
e.initMouseEvent(‘click’, true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var a = document.createElementNS(“http://www.w3.org/1999/xhtml”, “a”);
a.href = blobUrl;
a.download = filename;
a.dispatchEvent(e);
}
}

//エクスポート済みフラグを立てる
function exportFlag() {
var records = event.records;
var appId = kintone.app.getId();
var params = {
“app” : appId ,
“records” : []
};

for (let j = 0; j < records.length; j++) {
params.records[j] = {
“id” : records[j].$id.value ,
“export_flag” : {
“value” : [“済”]
}
};
}

kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, params , function(resp) {
console.log(resp);
/*location.reload();*/
}, function(err) {
console.log(err);
});

}

//ファイル名に付与する日付の取得
function getTimeStamp() {
var d = new Date();
var YYYY = d.getFullYear();
var MM = (d.getMonth() + 1);
var DD = d.getDate();
var hh = d.getHours();
var mm = d.getMinutes();
if (MM < 10) { MM = ‘0’ + MM; }
if (DD < 10) { DD = ‘0’ + DD; }
if (hh < 10) { hh = ‘0’ + hh; }
else if (mm < 10) { mm = ‘0’ + mm; }
String();
return ‘’ + YYYY + MM + DD + hh + mm;
}
});
})();

【参考にさせていただいたサイト】

https://www.alloneslife-0to1work.jp/all/kintone_csv

https://developer.cybozu.io/hc/ja/community/posts/360040498432-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E7%94%BB%E9%9D%A2%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%97%E3%81%9F%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A7-%E5%90%84%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%80%A4%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%81%84

https://developer.cybozu.io/hc/ja/community/posts/360040498432-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E7%94%BB%E9%9D%A2%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%97%E3%81%9F%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A7-%E5%90%84%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%80%A4%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%81%84?input_string=%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E7%94%BB%E9%9D%A2%E3%81%A7%E3%83%9C%E3%82%BF%E3%83%B3%E6%8A%BC%E4%B8%8B%E5%BE%8C%E3%81%AB%E9%A0%85%E7%9B%AE%E3%81%8C%E6%9B%B4%E6%96%B0%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84

https://developer.cybozu.io/hc/ja/articles/201941054-%E9%9B%86%E8%A8%88%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92CSV%E3%81%A7%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF-

https://developer.cybozu.io/hc/ja/articles/201941784

フジア さん

exportFlag() 関数で定義しているレコード一括 API のリクエストボディに誤りがあるっぽいです。

一括の場合、更新するレコードは recordプロパティで括る必要があります。

リクエストボディを作成している for文を以下のように修正すれば恐らく更新できると思います。

for (let j = 0; j < records.length; j++) {
params.records[j] = {
“id”: records[j].$id.value,
“record”:{
“export_flag”: {
“value”: [“済”]
}
}
};
}

補足ですが、実行自体が成功しているのは kintone rest api は、必須項目以外のリクエストボディはなくても動き、逆に必須項目以外に全く関係ない項目を足しても無視して、実行自体は成功します。

なので、recordプロパティがないリクエストボディで実行した場合は、関係ない項目扱いになるため、無視した動きになるため、実行自体の成功はしている状態ですね。

しぶいさま

ご指摘ありがとうございます!!
頂いたご指摘通り修正しましたところ、意図通りの動きを実装することができました!
以前レコード反映の部分を"record":{}で囲む記載をしていた際、エラーが発生してしまっていて、書き方が誤っていると思い込んでしまっておりました。

とても助かりました。
ありがとうございました!!