一覧ページの一括ダウンロード/一括更新のファイル形式を Excel (xlsx) から CSV に切り替える設定用フィールドです。 モジュールの Fields に定義するだけで有効になり、レイアウトへの配置は不要です (配置しても実行時は何も描画されません)。
- 一括ダウンロードが CSV になる: 一覧ページ (PageLink の
CanBulkDataDownload: true) のダウンロードボタンが{モジュール名}.csvを出力 - 一括更新が CSV を受け付ける: 選択できるのは
FileExtensionの拡張子のファイルだけ (既定.csv。xlsx / xlsm は拒否される)。中身はファイル内容で自動判定するため、拡張子がそのままで中身が xlsx のファイルは Excel として読み込む - エンコーディング指定: UTF-8 (BOM 付き / なし) と Shift_JIS を選択可能。既定は BOM 付き UTF-8 (Excel でダブルクリックしても文字化けしない)
- 区切り文字の指定: カンマ / タブ / セミコロンから選択
- 取込前検証: 対応しない列名・型変換できないセルを行番号付きで報告し、エラーがあれば 1 行も取り込まない
- このフィールドを定義しない場合は従来どおり xlsx
このフィールドはファイル形式だけを切り替えます。列の並びや外部列名を相手仕様に合わせるのは
独立した機能 FileColumnMappingField で、併用すると相手仕様の CSV (WebEDI 等) になります
(列マッピング単独なら Excel のまま列だけ差し替わる)。
さらに併用時にこのフィールドの Delimiter を None (区切り文字なし) にすると固定長形式になり、
列は桁位置で切られます。列幅は FileColumnMappingField の列ごとの設定、幅の単位 (FixedLengthWidthUnit)・
エンコーディング・拡張子 (例 dat) はこのフィールドの指定が使われます (併用必須 = デザインチェック)。
| プロパティ | 型 | 必須 | 説明 |
|---|---|---|---|
| Name | string | ○ | フィールド名 |
| Encoding | enum | - | エンコーディング。Utf8Bom (既定) / Utf8 / ShiftJis |
| Delimiter | enum | - | 区切り文字。Comma (既定) / Tab / Semicolon / None (区切り文字なし = 固定長形式。FileColumnMappingField 併用必須) |
| FileExtension | string | - | ダウンロードのファイル拡張子。既定 csv (txt / dat 等に変更可) |
| FixedLengthWidthUnit | Byte / Char | - | 固定長形式での列幅の単位。既定 Byte (Shift_JIS の全角 = 2 バイト)。列幅自体は FileColumnMappingField の列ごと |
| PreventFormulaInjection | bool | - | 式インジェクション対策。既定 false (データを加工しない)。true にすると Excel 等が数式として評価する先頭文字 (= + - @ タブ CR) のセルの先頭にダウンロード時 ' が付き (-123 など数値には付かない。値自体が ' で始まるセルは ' が 1 つ増える)、アップロード時にセル先頭の ' が 1 つ外れる。式を意図して出し入れする列がある場合や相手仕様 (WebEDI) のファイルでは false のまま。固定長形式 (Delimiter: None) では無効 |
{
"Encoding": "Utf8Bom",
"Name": "CsvTransfer",
"TypeFullName": "Codeer.LowCode.Blazor.Extras.Designs.CsvFileFormatFieldDesign"
}クライアントはこのフィールドからダウンロードファイルの拡張子 (csv) を決め、
サーバーは同じモジュールデザインからこのフィールドを参照して生成/取り込みを分岐します。
サーバーテンプレートの ModuleDataController が対応済みである必要があります (未対応のサーバーでは
「.csv という名前の xlsx」が落ちてきます)。
テンプレートの実装 (list_file / submit_by_file) は処理本体を BulkFileTransfer に移譲しています:
//一括ダウンロード/一括更新の処理本体は Extras の BulkFileTransfer に移譲
//(モジュールデザインの CsvFileFormatField の有無で CSV / Excel を分岐する)
[HttpPost("list_file")]
public async Task<IActionResult> GetListFileAsync(SearchCondition? condition)
=> Ok(await BulkFileTransfer.GetListFileAsync(_dataService.Design.DesignData, _dataService.ModuleDataIO, condition!));
[HttpPost("submit_by_file")]
public async Task<List<ModuleSubmitResult>> SubmitByFileAsync(string? moduleName)
=> await BulkFileTransfer.SubmitByFileAsync(_dataService.Design.DesignData, _dataService.ModuleDataIO, moduleName, Request.Body);BulkFileTransfer は Codeer.LowCode.Blazor.Extras.Server.BulkFile 名前空間、
CSV の生成/パース単体は CsvUtils (Codeer.LowCode.Blazor.Extras.Server.Csv) にあります
(いずれも Codeer.LowCode.Blazor.Extras.Server パッケージ)。
形式の追加や外部システム連携などの特殊実装は、テンプレート側で BulkFileTransfer を呼ばずに
独自処理へ差し替えることで行えます (モジュールデザインの具象フィールド型を参照して分岐できます)。
- RFC 4180 準拠 (カンマ・引用符・改行を含むセルは引用符で囲み、引用符は二重化)。改行コードは CRLF
- 1 行目はヘッダ行 (xlsx の一括ダウンロードと同じ列構成)
- アップロード時、全セルが空の行は無視される
- 式インジェクション対策は
PreventFormulaInjection(既定false)
一覧ページのボタン以外に、スクリプトからも同じ形式定義で入出力できる
(取込 = BulkFileReader、出力 = BulkFileTransferService.Download。行スキップ・演算・重複チェックなどの
行ロジックをスクリプトで書くのはこの経路)。
このフィールドは値を持たず、スクリプトから利用できる API を公開していません。
実行時は何も描画しないため、CSS カスタマイズの対象はありません。