kintone CSVデータインポート時の一部数値の削除について

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

業務で使用している別のシステムより毎日の売上・入金データをkintone上で参照するためのアプリを作成しています。

既に顧客マスタのアプリはあるので、顧客マスタの該当レコード(キー:顧客CD)関連レコード表示で参照する予定です。(別システムよりDLしたデータをアクセスで整備して、CSVに書出したものをアプリに取込、約1000件/1日)

CSVに書き出したデータのうち、売上額・入金額・消費税のデータの「0円」を表示しないかアプリに取り込まないようにしたいのですが、うまくできず困っています。

アクセス使用時にテキスト形式として0を空白に置き換えようとしたんですが、「100」の0も消えて「1」になってしまいうまくかず・・。

色々検索してみましたがいい方法が見つからないため、CSVからの読み込み時、もしくはアプリで関連レコード表示をした際に「0円」が表示されない(もしくは見えない)方法が無いかな?と思い投稿しました。

お知恵がありましたら教えていただけると助かります。宜しくお願いします。

作成中のアプリ

関連レコード表示のイメージ

yuki-I さん

kintone アプリに csv を読み込み時、データ加工出来ればいいのですが、標準機能では出来ません。

対応策としては、下記が考えられます。

案1 csv を読み込み前に、csv を加工

テキストデータを加工できるスクリプト処理を作成して、“0” を “” に変換します。

windows でしたら、vbs, power shell など。
mac でしたら、 awk, ruby などが使えます。

他には Excel の VBA など、テキスト処理出来るスクリプトなら何でもOKです。

案2 JavaScript カスタマイズで csv 読み込み処理を開発

csv を読み込み、“0” を “” に変換後に、レコード追加

案3 csv を読み込んだ後に、データ変更

JavaScript カスタマイズで、対象レコードの数値項目の “0” を “” に変更します。

案4 レコード表示画面、一覧画面で、DOM操作して項目の表示を変更

JavaScript カスタマイズで、画面表示時に数値項目の “0” を “” に変更します。
関連レコード追加などフォーム変更があると、都度カスタマイズ対応が必要です。

 

案1-3 が、数値データを変える処理で、案4 が表示だけ変える処理です。
どれも一長一短ありますので、開発費用、運用、保守などを考慮して検討してはいかがでしょうか?

rex0220さん

お礼が遅くなりすみません。たくさんの案をありがとうございます。

色々検討した結果、案3が一番ベストかな?と思うのですが、一から作成するのは大変でしょうか?

私自身Javascriptカスタマイズを一から作ったことがないので・・何かヒントを頂けるとありがたいです。

宜しくお願いします。

 

yuki-I さん

処理フローからすると、「別システムよりDLしたデータをアクセスで整備して、CSVに書出し」とありますので、
このCSV 書き出し処理を変更するのが簡単そうです。

とりあえず、複数レコードを更新する例は、あまりなさそうです。
参考になりそうなものは、

第2回 レコード一覧画面にボタンを置いてみよう!
SweetAlert を使って、メッセージをスタイリッシュに表示させよう!
第8回 簡単な更新処理に挑戦してみよう
「kintone Utility Library for JavaScript」の使い方

これらを組み合わせると、出来ると思います。
ただ、処理件数が少し多いので、そこら辺も考慮した仕組みがよさそうです。

参考に、ちょっとコードを書いてみました。
フィールドコードは、ラベルにあわせています。

 

 

(function() {
"use strict";
kintone.events.on("app.record.index.show", function(event) {
if (document.getElementById('my_index_button') !== null) {
return event;
}

var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerHTML = 'ゼロ一括更新';

// ボタンクリック時の処理
myIndexButton.onclick = function() {
updateZeroValue();
};

kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
return event;

// ゼロ数値更新
function updateZeroValue() {
// ゼロ対象レコードの読み込み
var param = {
app: event.appId,
query: '売上額 = 0 or 入金額 = 0 or 消費税 = 0 limit 1',
fields: ['$id', '売上額', '入金額', '消費税'],
totalCount: true,
isGuest: false
};
kintoneUtility.rest.getRecords(param).then(function(resp) {
// 更新処理
if (resp.totalCount > 0) {
swal({
title: 'ゼロ数値を更新します',
text: '更新対象レコード ' + resp.totalCount + ' 件',
type: 'success',
showCancelButton: true,
closeOnConfirm: false,
showLoaderOnConfirm: true,
}, function() {

var param = {
app: event.appId,
query: '売上額 = 0 or 入金額 = 0 or 消費税 = 0',
fields: ['$id', '売上額', '入金額', '消費税'],
totalCount: false,
isGuest: false
};
kintoneUtility.rest.getAllRecordsByQuery(param).then(function(resp) {
var records = resp.records;
var newRecords = records.map(function(record) {
var newRec = {
id: record['$id'].value,
record: {}
}
if (record['売上額'].value === '0')
newRec.record['売上額'] = { value: '' };
if (record['入金額'].value === '0')
newRec.record['入金額'] = { value: '' };
if (record['消費税'].value === '0')
newRec.record['消費税'] = { value: '' };
return newRec;
});

var param = {
app: event.appId,
records: newRecords,
isGuest: false
};
kintoneUtility.rest.putAllRecords(param).then(function(resp) {
// 更新完了
swal({
title: '更新完了!',
text: newRecords.length + ' レコード更新しました',
type: 'success',
}, function() {
location.reload();
});
}).catch(function(error) {
// 更新エラー処理
sweetAlert("レコード更新エラー!", error.message, "error");
});
}).catch(function(error) {
// エラー時の処理
sweetAlert("レコード取得エラー!", error.message, "error");
});
});
}
else {
swal('更新対象レコードがありません!');
}
}).catch(function(error) {
// エラー時の処理
sweetAlert("レコード取得エラー!", error.message, "error");
});
}
});
})();

少しコードがわかりにくいと思いますので、Qiita に整理しました。

kintone 一覧画面で複数レコード更新

rex0220さん

このコード以外にもJavaScriptが必要なんですね。気づかずに入れていませんでした・・。

まとめまで作成していただいてありがとうございます!

この方法で勉強しつつやってみます!!