※アフィリエイト広告を利用しています。

【intra-mart】エクスポートするファイル名を「任意」のファイル名に設定する手順

intra-mart

はじめに

Formaアプリのエクスポートボタンから自動的に生成されるファイル名ではなく、任意の名称でファイル(+任意の拡張子)を出力したい要件があったので、その実装手順をまとめます。

実装時のポイント

  • ファイル出力するデータは一覧orグリッドテーブルの配列データ
  • セッションストレージの仕組みを活用
  • ロジックデザイナーでセッションストレージにエクスポートファイルを作成
  • 暗黙レスポンスパラメータを用いて出力

実装手順

完成イメージは以下のとおりです。

Formaアプリ

フィールドパラメータ

以下のとおり、エクスポート元となるデータはグリッドテーブル、ファイル出力にはイベントボタンとセットします。

※ボタンエクスポートは誤りで、イベントボタンを必ず配置してください。ボタン(エクスポート)だと外部データソースでロジックデザイナーは指定できません。

アクション処理設定

アクション処理設定で、イベントボタンに対して外部データソースで後述するロジックフローを設定します。グリッド列をそれぞれ入力値に指定します。

ロジックデザイナー

入出力設定

出力に「暗黙レスポンスパラメータ」の設定が最重要ポイントです。これがないとファイルはストレージ上で作成されますが、ブラウザのダウンロードには出力されません。

また入力側は配列オブジェクトで設定しないと、グリッドからの配列データを正しく受け取れないので注意してください。

(必要なら)入力値の定義名とCSV出力定義のカラム名・型が異なる場合、push関数でカラム名・型を合わせにいく

本事例では、あえて入力値とCSV出力値の定義を一致させておりません。配列をCSV出力定義に入れる場合は、オブジェクト名は一致してなくてもいいですが、配下の各定義は完全一致していないと値が設定されません。その一致していない前提の配列PUSHロジックです。

変数をCSV出力定義の定義名に合わせるため、CSV出力の定義のカラム名と型に合わせた単一オブジェクト変数と配列オブジェクト変数を準備します。

ループを用いて、入力値に設定した配列オブジェクトを繰り返し対象として1件ずつ処理を行います。

入力値をいったん単一オブジェクト変数にマッピングし、単一オブジェクト変数をpush関数を用いて、配列オブジェクト変数にマッピングします。

セッションストレージ情報の取得で任意のファイル名をマッピング

ここでファイル名を指定します。今回はdemo_${処理年月日}.logとして、処理年月日の部分を可変としております。

固定部分は定数として定義しておきます。

concat関数で任意のファイル名を連結し作成します。最終連結結果をセッションストレージ取得の入力値にマッピングします。

CSV出力定義にマッピング

outputFileにセッションストレージ取得の結果をrecordsに配列オブジェクト変数(入力値と配下のカラムが一致している場合は、入力値をそのまま)をマッピングします。

終了時の出力マッピング

暗黙レスポンスパラメータに結果を渡します。注意点はimfrErrorFlagにfalseを指定してください。これを設定しないとエラーとして扱われます。

※ファイルの受け渡し時のみ必要であり、通常にアクション処理のロジックフローでは暗黙レスポンスパラメータ設定不要です。

後は外部データソース定義として登録し、アクション処理で利用できるようにすれば完成です。

まとめ

以上で、『【intra-mart】エクスポートするファイル名を「任意」のファイル名に設定する手順』でした。

本ロジックのミソは、セッションストレージ、暗黙リクエストパラメータ、配列オブジェクトですので、うまく動かない場合は今一度見直してみてください。

コメント

タイトルとURLをコピーしました