はじめに
Salesforce から他サービスへデータ連携する際、CSVファイルを出力して連携を実現することがあります。私自身も、Salesforce 組織のディスク容量を超過しないように過去データを別サービスへ移行したり、Salesforce 上のデータを他システムへ取り込むなど、CSVファイルを出力する場面がいくつかありました。
CSVファイルの出力方法によっては出力されるデータ形式の違いに注意が必要です。
Salesforce では一般的なテキスト型や数値型に加えて、選択リストや参照関係などSalesforce 特有のデータ型があり、出力される形式に特徴があります。
今回はカスタムオブジェクトで作成可能な項目のデータ型を対象に、レポートからCSV出力する場合とデータローダを用いてCSV出力する場合のデータ形式の注意点についてまとめました。
他サービスとのデータ連携を検討される方の参考になれば幸いです。
対象とするデータ型一覧
Salesforce上のデータ型 | 一般的なDB定義 <テキスト> | 一般的なDB定義 <数値> | 一般的なDB定義 <日付/時刻> |
---|---|---|---|
テキスト | ○ | ||
ロングテキストエリア | ○ | ||
テキストエリア(リッチ) | ○ | ||
テキストエリア項目 | ○ | ||
テキスト暗号化項目 | ○ | ||
URL | ○ | ||
メール | ○ | ||
電話番号 | ○ | ||
チェックボックス | ○ | ||
選択リスト項目 | ○ | ||
複数選択リスト | ○ | ||
主従関係 | ○ | ||
参照関係 | ○ | ||
地理位置情報 | ○ | ||
数値 | ○ | ||
通貨 | ○ | ||
パーセント項目 | ○ | ||
日付 | ○ | ||
日時 | ○ | ||
時間項目 | ○ |
以降、検証用に作成したカスタムオブジェクトの項目を用いて、データ型ごとにSalesforce 画面からの入力イメージとデータローダを用いた出力イメージ、レポートによる出力イメージを表示します。
実際のCSV出力時のイメージに合わせて、データローダを用いた出力イメージでは1行目に項目のAPI参照名(ヘッダー行)、2行目以降に値(明細行)を表示します。また、レポートによる出力イメージでは1行目に項目のラベル名(ヘッダー行)、2行目以降に値(明細行)を表示します。
一般的なDB定義でテキストとして扱われるデータ型
データ型:テキスト
登録値をそのまま出力する。

データ型:ロングテキストエリア、テキストエリア項目
複数行に表示が可能なテキスト項目。
テキストエリア項目は最大255文字、ロングテキストエリアは最大131,072文字が入力可能。
Enterで改行することで、改行の記号がテキストとして追加され、CSV出力時には改行を含めて登録値を出力する。

データ型:テキストエリア(リッチ)
フォント設定が可能なテキスト項目。
データローダを用いた出力の場合は、HTMLコードをテキストとして出力し、レポートによる出力イメージは表示値をそのまま出力する。

データ型:テキスト暗号化
オブジェクトマネージャーにおける項目定義にて、設定するマスク文字を出力する。

データ型:URL、メール、電話番号
Salesforce画面では入力値をリンクで表示し、リンクを押下することでURLリンク先へのアクセスやメールの送信、電話の発信が可能です。
CSV出力では登録値をそのままテキストとして出力する。
以下は電話番号の出力イメージであり、URLやメールの項目も同様に登録値をそのままテキストとして出力する。

データ型:チェックボックス
データローダを用いた出力ではtrue(チェックあり)/false(チェックなし)を表示し、レポートによる出力イメージでは 1(チェックあり)/0(チェックなし)を表示する。

データ型:選択リスト
データローダを用いた出力では選択された値のAPI参照名を表示し、レポートによる出力イメージでは選択された値のラベル名を表示する。

データ型:複数選択リスト
データローダを用いた出力では選択された値のAPI参照名を表示し、レポートによる出力イメージでは選択された値のラベル名を表示する。複数の値が選択されている場合は、セミコロン「;」で結合して出力する。

データ型:主従関係、参照関係
データローダを用いた出力では選択されたレコードのSalesforceIDを表示し、レポートによる出力イメージでは選択されたレコードのName項目の値を表示する。

データ型:地図位置情報
オブジェクトマネージャで地図位置情報項目を生成すると、サブ項目として緯度と経度の項目が自動的に作成される。CSV出力時はサブ項目の緯度と経度を出力することで、入力値が表示可能です。

一般的なDB定義で数値として扱われるデータ型
データ型:数値
Salesforce 画面では、3桁ごとにカンマで区切って表示される。
CSV出力の場合は、カンマで区切らずに数値を表示する。
データローダを用いた出力では、小数2桁目以降の末尾の0は除いた形で表示し、レポートによる出力イメージではオブジェクトマネージャの項目定義で設定した小数桁まで0埋めの形で表示する。

データ型:通貨、パーセント
Salesforce 画面では、通貨の場合は先頭に組織で設定している通貨単位記号、パーセントの場合は末尾に”%”を付けて、3桁ごとにカンマで区切って表示される。
CSV出力の場合は、カンマで区切らずに数値を表示する。
データローダを用いた出力では、小数2桁目以降の末尾の0は除いた形で表示し、レポートによる出力イメージでは、オブジェクトマネージャの項目定義で設定した小数桁まで0埋めの形で表示する。

一般的なDB定義で日付/時刻として扱われるデータ型
データ型:日付
データローダを用いた出力では、ハイフンを用いた“yyyy-mm-dd”の形で表示し、レポートによる出力イメージでは、スラッシュ「/」を用いた“yyyy/mm/dd”の形で表示する。

データ型:日時
データローダを用いた出力では、ハイフンを用いた“yyyy-mm-dd’T’HH:MM:SS.SSS Z”の形でグリニッジ標準時(GMT)の日時を表示する。レポートによる出力イメージでは、スラッシュ「/」を用いた“yyyy/mm/dd HH:MM”の形で入力した日時を表示する。

データ型:時間
データローダを用いた出力では、“HH:MM:SS.SSS Z”の形で入力した時間を表示する。レポートによる出力イメージでは、“HH:MM”の形で入力した時間を表示する。

おわりに
CSVの出力方法、データ型ごとに出力される形式の違いについて確認することができました。
ロングテキストエリアのように、改行のある項目を出力CSVに含む場合、出力内容が1行=1レコードとならないため、注意が必要ですね。出力レコードの件数を確認したい場合、データローダで出力した際は処理終了時のメッセージで確認、もしくは出力したCSVファイルを、リッチテキストの改行を考慮したツールで開くことでレコード件数の確認ができます。
また、Salesforceにおける組織のロケール設定やユーザのロケール設定が、日付項目の出力形式に影響するとされています。出力形式が異なることで、データ連携先のサービスで日付項目として認識しなくなるパターンにも注意が必要です。
連携先のサービスで指定されるフォーマットに合わせて出力値を変換する必要がありますね。
選択リスト項目などAPI項目名を出力する項目は、”toLabel()” を使用することで表示ラベルを出力することができます。数式項目を用いれば、より複雑な変換をして出力することが可能になります。
CSVファイルを用いた他サービスへのデータ連携などを見越した項目の作成や、データ変換時の1つのヒントになれば幸いです。
投稿者プロフィール

-
2020年頃よりSalesforce の学習を始めました。
Apex によるバックエンド処理や、Visualforce 画面などを用いた開発業務を行っています。
日々進化するSalesforce での開発における、便利な方法を皆さまと共有できればと思います。
最新の投稿
Salesforce2025.01.23【Salesforce】ユーザーを無効化する時に注意すべきポイント2つを紹介
Salesforce2024.07.01【Salesforce】注意!CSV出力時のデータ型ごとの出力形式の違い
Salesforce2024.01.19【Salesforce】非同期処理の大量のデータを他システムへ連携するためのDataspider Cloud 活用例
Salesforce2023.05.24【Salesforce】Apex処理のガバナ制限におけるヒープサイズ制限による「System.LimitException: Batchable instance is too big」エラーの回避方法について