一覧表で、複数レコードのステータスを一括で更新できたら便利だと思いませんか?
標準機能では一つずつ操作する必要がありますが、JavaScriptを活用することで一括操作が可能になります。
反映イメージ
デモサイトはこちら上記デモサイトでは、チェックボックスが選択された行のステータスをまとめて更新します。
作業手順1
一括更新用のCSSを設置
一覧表の上部に一括更新パネルを表示させるので、専用のCSSを設置してください。
<!-- General CSS Files --> <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
作業手順2
一括更新用のJavaScriptを設置
一括更新パネルの動作を設定するJavaScriptを設置します。
<script>
$(function() {
// 1. UIの設置
const batchHtml = `
<div id="my-batch-panel" style="margin: 10px 0; padding: 10px; background: #f0f0f0; border-radius: 4px; display: flex; align-items: center; gap: 10px; width: 100%; justify-content: center;">
<input type="button" id="btn-toggle-all" value="全選択 / 解除" class="smp-table-button">
<span style="margin-left: 20px; font-weight: bold; font-size: 10pt;">選択行のステータスを一括変更:</span>
<select id="batch-status-select" style="font-size: 10pt;">
<option value="">-- 選択してください --</option>
<option value="1">未対応</option>
<option value="2">確認中</option>
<option value="3">承認済み</option>
</select>
<input type="button" id="btn-apply-batch" value="適用" class="smp-table-button">
</div>
`;
// ★ターゲットの判定
const $target = $('#smp-table-106935').length ? $('#smp-table-106935') : $('.smp-table');
if ($target.length) {
$target.before(batchHtml);
} else {
$('.mainBody').append(batchHtml);
}
// 2. 全選択 / 解除
$(document).on('click', '#btn-toggle-all', function() {
const checkboxes = $('.smp-table-check');
const isAnyUnchecked = checkboxes.filter(':not(:checked)').length > 0;
checkboxes.each(function() {
if ($(this).prop('checked') !== isAnyUnchecked) {
$(this).trigger('click');
}
});
});
// 3. ステータス一括変更
$(document).on('click', '#btn-apply-batch', function() {
const selectedValue = $('#batch-status-select').val();
if (!selectedValue) {
alert('変更後のステータスを選択してください。');
return;
}
const selectedRows = $('.smp-table-check:checked');
if (selectedRows.length === 0) {
alert('対象のデータにチェックを入れてください。');
return;
}
if (confirm(selectedRows.length + ' 件のステータスを一括変更しますか?')) {
selectedRows.each(function() {
const row = $(this).closest('tr');
// name属性に f003577797 が含まれるもの
const statusSelect = row.find('select[name*="f003577797"]');
if (statusSelect.length) {
statusSelect.val(selectedValue);
if (window.SpiralTable && SpiralTable.changeBC) {
SpiralTable.changeBC(statusSelect[0]);
}
}
});
alert('適用しました。「更新」ボタンを押すと保存されます。');
}
});
});
</script>
※ 変更が必要な部分
・
<option value="1">未対応</option>部分は選択肢の名称を設定してください。
・
f003577797の部分は、DBを確認し該当のフィールドコードに変更してください。
・
smp-table-106935の部分は、一覧表のURLを確認しtableの後の数字5桁に変更してください。
参考
フィールドコードの確認方法
一覧表のURLの確認方法
まとめ
本記事のポイント
・標準機能では一括更新ができないため、本カスタマイズで一覧画面の利便性を最大化できます
・1件ずつ選択して変更する手間を省き、大量データの更新作業を大幅に短縮できます
・汎用性の高いコードのため、フィールド名とテーブル名を合わせるだけで簡単に実装が可能です
・標準機能では一括更新ができないため、本カスタマイズで一覧画面の利便性を最大化できます
・1件ずつ選択して変更する手間を省き、大量データの更新作業を大幅に短縮できます
・汎用性の高いコードのため、フィールド名とテーブル名を合わせるだけで簡単に実装が可能です
【お知らせ】本実装の構築代行・カスタマイズを承ります
記事でご紹介した内容や、貴社の要件に合わせた柔軟なカスタマイズ開発を承っております。
SPIRALの専門チームが要件定義から実装まで一貫してサポートいたしますので、まずはお見積もりをご依頼ください。