Skip to content

Latest commit

 

History

History
93 lines (69 loc) · 6.31 KB

File metadata and controls

93 lines (69 loc) · 6.31 KB

Design

一覧ページの一括ダウンロード/一括更新のファイル形式を 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) では無効

モジュール JSON 例

{
  "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 を呼ばずに 独自処理へ差し替えることで行えます (モジュールデザインの具象フィールド型を参照して分岐できます)。

CSV の仕様

  • RFC 4180 準拠 (カンマ・引用符・改行を含むセルは引用符で囲み、引用符は二重化)。改行コードは CRLF
  • 1 行目はヘッダ行 (xlsx の一括ダウンロードと同じ列構成)
  • アップロード時、全セルが空の行は無視される
  • 式インジェクション対策は PreventFormulaInjection (既定 false)

スクリプトからの一括入出力

一覧ページのボタン以外に、スクリプトからも同じ形式定義で入出力できる (取込 = BulkFileReader、出力 = BulkFileTransferService.Download。行スキップ・演算・重複チェックなどの 行ロジックをスクリプトで書くのはこの経路)。

Script

スクリプト API

このフィールドは値を持たず、スクリプトから利用できる API を公開していません。

CSS

CSS カスタマイズ

実行時は何も描画しないため、CSS カスタマイズの対象はありません。