いつもお世話になっております。
javascript初心者です。
現在、勤務先でkintoneアプリを作成・提出を求められているのですが、
周囲にはプログラミングが出来る方が殆どおらず、長時間悩んでおり、相談できる方もいないので書き込みをいたしました。
現在、こちらのQiitaの記事を書いてくださった方のコードを利用させていただき、csv出力ボタンを作りました。https://qiita.com/juri_don/items/e7b21e155a7a6f84fee9
現在、チェックボックスが『済』(csv出力済みの意)の状態になっていたら、チェックが付いていないcsvデータをボタンを押した時に出力するようにし、実装が出来ています。
ここにさらに、csvを出力したら、それらのデータに対し出力済みと分かるように自動的に『済』にチェックを入れるようにしたいです。
考え方としては、出力フラグがついていないすべてのデータ(or済データを含む全データ)を取得し、
それらのデータを出力フラグを済に一括更新する、という流れかと思うのですが、
うまくコードに起こすことが出来ずに悩んでおります。(コメントアウト7.以下です)
大変初歩的すぎる質問かもしれないのですが、どうぞよろしくお願いいたします。
//kintoneアプリストアの『顧客リスト』を使用します。
(()=>{
'use strict';
//レコード一覧表示
kintone.events.on(['app.record.index.show'], event => {
//メニュー右側を取得
const sp =kintone.app.getHeaderMenuSpaceElement();
//ボタンを作る
const btn = document.createElement('button');
//ボタンに表示したいテキスト
btn.textContent='CSV出力ボタン';
//スペースフィールドにボタンを追加する
sp.appendChild(btn);
//ボタンをクリックしたときの動作
btn.onclick=()=>{
//CSVダウンロード
dlCsv();
};
return event;
});
// CSVファイル生成用
const HEADER =['顧客ランク','会社名','部署名','担当者名','郵便番号','TEL'];//CSVに出力したいフィールドのフィールドコード
// CSVをダウンロード
const dlCsv = async ()=>{
//フィールド名からCSVの文字列データを作る
const setHeaderData = () => {
let headerData = '';
HEADER.forEach(h => {
headerData += h + ',';
});
headerData += '\r';
return headerData;
};
//レコードからCSVの文字列データを作る
const recordToCsvData = records => {
let rowData = '';
records.forEach(r => {
HEADER.forEach(h => {
rowData += r[h].value + ',';
});
rowData += '\r';
});
return rowData;
};
//URLエンコード
const createDataUriFromString = str => {
// 文字列を配列に変換
const array = str.split('').map(s => s.charCodeAt());
// エンコード
const sjis_array = Encoding.convert(array, 'SJIS', 'UNICODE');
const uInt8List = new Uint8Array(sjis_array);
return uInt8List;
};
//2. CSVにしたいレコードを取得する
const param_get = {
app:kintone.app.getId(),
//すでに、済とフラグ(チェックボックス)が付いている場合、それを省く
query:'出力フラグ not in ("済")',
};
const obj_get = await kintone.api('/k/v1/records','GET',param_get);
const targetRecords = obj_get.records;
//3. レコード1件以上だったらCSV出力
if (targetRecords.length > 0) {
//4. CSVにするテキストデータを作成
const str = createDataUriFromString( setHeaderData() + recordToCsvData(targetRecords));
//5. CSVファイル作成
const blob = new Blob([str], {type:"text\/csv"});
const url = URL.createObjectURL(blob);
//6. ダウンロード処理
const a = document.createElement("a");
document.body.appendChild(a);
a.download = "test.csv";
a.href = url;
a.click();
a.remove();
URL.revokeObjectURL(url);
//7. csvでDLしたレコードを済に変える
function createPutRecords(records){
var appID = kintone.app.getID();
var putRecords =[];
for(var i = 0, j = records.length; i<j ; i++){
var record = records[i];
putRecords[i] = {
id: record.$id.value,
record:{
'出力フラグ':{
value:['済']
}
}
};
}
return putRecords;
}
const param_upd = {
'app':kintone.app.getId(),
'record':createPutRecords(records)
};
const obj_put = await kintone.api('/k/v1/records','PUT' , param_upd);
const updateRecords = obj_put.records;
console.log(updateRecords);
}
};
})();