LoginSignup
3
1

More than 1 year has passed since last update.

[OutSystems]CSVを扱うForgeコンポーネント(CSVUtil)

Posted at

ListとCSVファイルを相互に変換するActionを提供するForgeコンポーネントの動作を確認してみました。

確認環境

Personal Environment(Version 11.13.0 (Build 31107))
Service Studio (Version 11.12.0)
CSVUtil (Version 1.11.6)

CSVファイルをエクスポートする方法

基本の方法

RecordのListをText型のCSVに変換する方法。

基本的には、CSVUtilExtensionに含まれる、ExportRecordList2CSV Actionを呼ぶだけです。
image.png

パラメータは2つ。RecordListはObject型。Object型はToObjectにRecordのListを指定することで取得できます。Configには変換設定を指定しますが、とりあえず空白で大丈夫です。

なお、Object型が要るので、ExportRecordList2CSV Action呼び出しはServer Actionで行う必要があります。Client Actionでは、Objectパラメータを要するServer Actionを呼べないため。

Config

Configパラメータの型はCSVExportConfig Structureで、以下のAttributeを持っています。

  • IsShowHeader: ヘッダ行を出力するか (デフォルトでは出力する).
  • FieldDelimiter: 行内の各要素の区切り文字 (デフォルトは「,」カンマ)
  • EncodeMode: 特殊な文字をエスケープする方法を指定(デフォルトはautoで必要なときのみ)
  • Line Separator: 行の区切り文字 (デフォルトはCRLFでWindowsの改行文字ですね
  • CustomHeader: ヘッダ行を任意指定する
  • AttrFilter: 出力するAttributeを指定する (例: EmployeeName,EmployeeFurigana)

DebugInfo

出力パラメータにはDebugInfoというものもありますが、名前どおりデバッグ用の参考情報を出してくれるようです。
戻ってきた結果を確認すると、渡したパラメータの.NETでの型名が返ってきました。
以下はサンプル(Aggregateで取得したEntityのListを渡した場合)。

RecordList:RLFinancialAssetRecordDetailRecordList
Record:RCFinancialAssetRecordDetailRecord
RecordStruct:ssENFinancialAssetRecordDetail/ FinancialAssetRecordDetail(Type=ENFinancialAssetRecordDetailEntityRecord)
  Field:_ssId / Id (Type=Int64)
  Field:_ssFinancialAssetRecordId / FinancialAssetRecordId (Type=Int64)
  Field:_ssCode / Code (Type=String)
  Field:_ssName / Name (Type=String)
  Field:_ssNumber / Number (Type=Int32)
  Field:_ssCurrentPrice / CurrentPrice (Type=Decimal)
  Field:_ssAccountTypeId / AccountTypeId (Type=Int32)

Recordの属性についても返してくれるようですね。
フォーマットは「Field: .NETでの属性名 / OutSystemsでの属性名(Type=.NETでの型)」。

日本語ヘッダーを出すには、CustomHeaderを指定する

標準的には、ヘッダー行にはRecord各AttributeのNameプロパティの値が出力されているようです。
つまりこのままでは日本語が出力されない。

日本語名をヘッダー行に出力したいときは、以下のようにCustomHeaderを指定します。
image.png

区切り文字をタブに変更

CSVではなく、TSVを出す方法は以下の通り。
FieldDelimiterに区切り文字として使用したい文字(タブ文字)を指定してください。
Chrは、文字コードを指定して対応する文字を返す組み込み関数。
image.png

出力するAttributeを選別する

AttrFilterプロパティに指定します。
出力したいAttributeのNameプロパティの値を「,」で区切って結合したものを設定すればよいようです。
image.png

CSVファイルをインポートする方法

基本の方法

バイナリ形式のCSVファイルを受け取ってRecordのListに変換するには、LoadCSV2RecordList Actionを使います。
Configパラメータはこちらにもあります。しかし、「CSVファイルをエクスポートする方法」でConfig指定なしで出力したCSVであれば、Config指定なしでインポートできました。

image.png

読み込んだ結果は、Input ParameterのRecordListで渡したListに追加してくれます。

Config

ConfigパラメータはCSVLoadConfig Structureで、以下のAttributeを持っています。

  • Encode: CSVで渡したバイナリファイルの文字エンコーディング (デフォルトはutf-8。選択できる値は.NET FrameworkのEncoding Classで使用可能な値から)
  • IsSkipHeader: 最初の行をスキップするか否か (デフォルトはスキップ。ヘッダ行があるとき用の指定ですね)
  • IsIgnoreColumnChange: フィールド数が違うときにエラーを発生させるか否か (デフォルトは発生させる)……ということだが、ソースを追ってもdllの内部に隠蔽されていて用途がいまいちわからない
  • FieldDelimiter: 行内の各要素の区切り文字 (デフォルトは「,」カンマ)
  • IsDisableDoubleQuote: CSV各セルのダブルクォートエスケープを無効化する(デフォルトはTrue)。これもソースを追っても詳細がわからない
  • AttrFilter: 読み込むAttributeを指定する (例: EmployeeName,EmployeeFurigana)
  • IsDropCommentRow: #で始まる行をコメント行としてスキップする (デフォルトはスキップ)

列と属性のマッピング

ヘッダ行の列名は関係ないようです。
CSVファイル内での列位置と、Structure内でのAttribute位置が対応している。

例:
以下のようなCSVを渡して

Id,FinancialAssetRecordId,Code,Name,Number,CurrentPrice,AccountTypeId
9110,4,1478,iSMSCI高配当,50,2255.00000000,1
9111,4,1566,上場EM債,4,44200.00000000,1

以下のEntity型のListを利用する場合。
image.png

1レコード目のId=9110, FinancialAssetRecordId=4, Code=1478...
のようにマッピングされました。
(CSVのヘッダ行の列名を変更しても、読み込んだ結果は変わらなかったので、順番だけで判定していそうです)

UTF-8以外の文字エンコーディングのファイルを読み込む

Shift-JISでエンコーディングされているファイルを読み込むための設定。
文字エンコーディングの指定先はConfigパラメータのEncodeプロパティ。指定可能な文字エンコーディングはCSVUtilのドキュメントにリンクされているEncoding Classにリストがあります。
image.png

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1