LoginSignup
1
0

ASTERIA Warp Core/Core+でサブフロー処理を考える

Last updated at Posted at 2024-02-18

はじめに

ASTERIA Warp Standard Edition/Enterprise Editionで利用できる「サブフロー呼び出し」機能は構築で非常に役立つ機能です。下位EditionのCore/Core+では残念ながらサブフロー呼び出しが行えません。どうしてもサブフロー的に共通処理呼び出しがしたい!という場合もあると思います。万が一の時に使用できるかもしれないCore/Core+でのサブフロー的な呼び出し方法を紹介します。

事前知識

ASTERIA Warpはエラー処理に優れており、処理フローに対しエラー処理を別個に用意しException処理を独立させる事が可能です。通常は各フローのプロパティーの「汎用エラー処理」に専用エラー処理を設定されている事でしょう。
それ以外のエラー処理として、エラーが発生するコンポーネントではそのエラーに対応するエラー処理として別フローを指定する事が可能です。そしてそれがCore/Core+で別フローを起動する唯一の方法です。
エラー処理として呼び出しされるフローで通常のサブフローとは異なる呼び出し方がされます。エラー処理の詳細は、ADNのエラー処理を設定するにはを参照してください。

エラー処理として呼び出されたフローは

  1. エラーが発生したコンポーネントの入力ストリームが渡される
  2. エラーが発生したフローのフロー変数と同名の公開フロー変数に値が渡される
  3. 発生したエラーがパラメータを持つエラーの場合、システム変数にパラメータ値として渡される。
  4. ExceptionReturnにより呼び出し元フローに戻る事ができ、その際にストリームを返却する事ができる

となっています。
Subflowコンポーネントの変わりに、このエラー処理を利用します。

メインフロー

このフローは受け渡された内容、戻ってきた内容を確認するためだけのものですが、エラー処理の起点となるのはFileGetコンポーネントのみでこのコンポーネントのエラー処理にサブフローを指定する事で疑似的なサブフロー呼び出しを行います。

12-Flow.jpg

フロー変数

フロー変数 データ型 初期値 公開
受け渡し変数1 String しない
受け渡し変数2 integer しない

【処理概要】

  1. 受け渡し情報の準備
  2. サブフロー呼び出し
  3. 戻りストリームの処理

サブフローの呼び出しは「FileGet」で行います。

受け渡し準備

サブフローに渡すストリーム、変数の準備を行っています。

VelocityでCSVを指定していますが、これは何でも構いません。エラーが発生するFileGetの入力にわたすため、Mapperは「入力をそのまま出力」をはいとしています。

ストリーム型(CSV)

フィールド名 データ型
メインカラム1 String
メインカラム2 Integer

FileGetのエラーは、「汎用」と「ファイルが存在しない」があり、それぞれパラメータ「FilePath」があり、エラー発生時のファイルパスの値が受け渡せます。こちらもサブフローに値として渡せるフィールドととる事が出来ますので、この例では値を設定しています。また、サブフロー側の公開変数と同名の変数も同様に値渡しできますので、こちらにも値を事前に設定をしています。

12-Mapper1.jpg

レイヤー

レイヤー名 レイヤー条件
移送 なし

サブフロー呼び出し

エラーを発生させるコンポーネントはエラーがあれば何でも良いですがリソースを消費せずエラーパラメータのあるFileGetを選択します。このコンポーネントはファイルパスに指定したファイルがない場合にエラーを発生しますので、呼び出すエラーは、「ファイルが存在しない」とします。FileGetのエラー処理の「ファイルが存在しない」にサブフローを指定します。(当然そのファイルパスで指定した名前のファイルがあってはいけません)
ファイルを読み込みしないこのFileGetに指定するストリームは何で設定するか、という事になりますが、エラーで戻ってくるストリームがある場合、その戻りストリームに合わせてストリームを設定します。そうしなければ、戻りストリームを利用する事が出来ません。戻りストリームが必要ないのであればなんでも構いませんが、この方法では通常のサブフロー呼び出しの様に直接戻り値が受け取れません。そのため処理結果などの判定のためのストリーム(PerameterListなど)を設定しても良いでしょう。
今回のサブフローでは、CSV形式で4つのカラムで戻ってきますので、そのストリームを設定しておきます。

ExceptionReturn戻り値は、通常のサブフローとは異なりそのままでは戻り値にアクセスできません。エラーフロー側で設定した戻り値は、メインフローに戻った際、エラーメッセージに格納されますがシステム変数からはアクセスできません。通常のサブフロー呼び出しの様に戻り値による処理分岐をする場合は、BranchByExceptionを使用し一旦エラーメッセージ(戻り値)を取得しその値により分岐を行います。

ヘルプ:ExceptionReturn

ストリーム型(CSV)

フィールド名 データ型
field1 String
field2 String
field3 String
field4 String

ここで注意が必要なのは、戻ってきたストリームはエラー側で指定されたストリームで定義されたものであり、メイン側で定義されるストリームはあくまで次のMapperで値にアクセスするためのものです。そのため戻り側で設定しているカラム名ではなくFileGet側で設定したカラム名になりますが、中身は戻ってきたストリームの値となります。このあたりは実際に実行してみて動作内容を確認する必要があります。

戻りストリームの処理

このMapperでは戻りのストリームをレコード型のストリームにマッピングしています。戻りストリームが利用可能であることを示すためのものです。

12-Mapper2.jpg

レイヤー

レイヤー名 レイヤー条件
移送 なし

サブフロー

今回のサブフローは受け渡されたデータをCSV型にして戻す処理としています。
入力ストリームはCSVストリームで、メインフローのFileGetに入力されたストリームと同じものです。フロー変数は受け渡されるフロー変数を公開で設定しておきます。
戻りストリームは受け渡された情報を加工しCSV型で戻します。

処理フロー

13-Flow.jpg

【処理概要】

  1. ストリームをテキストに変換
  2. 戻りストリームの成型
  3. ExceptionReturnでストリームを戻し、次のコンポーネントに移動させる

入力ストリーム(CSV)

フィールド名 データ型
受け渡されたストリームカラム1 String
受け渡されたストリームカラム2 String

フロー変数

フロー変数 データ型 初期値 公開
受け渡し変数1 String する
受け渡し変数2 integer する

戻りストリームの成型

入力ストリームをテキスト可したもの、受け渡し変数の1と2、システム変数でエラーパラメータとして指定された値をEmbedで加工して項目に設定しています。

13-Mapper1.jpg

レイヤー

レイヤー名 レイヤー条件
移送 なし

最後に

本来であればこのエラー処理はこの様な呼び出し方を行う事はありません。ですが、この処理が、「FileGetの読み込みファイルが存在しない場合にそのファイルをDBから取得し生成する処理」などの形であればどうでしょうか?実際の構築の対象にはなると思います。少しイレギュラーな形での紹介となりましたが、エラー処理フローの利用方法を一度検証しておけば、Core/Core+でのサブフロー的構築が1つの解決方法として役立つのではと思います。

1
0
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
1
0