4.2 データモデル
|
|
ストリームと変数・定数の説明に入る前に、基本型(基本となるデータ型)について少し学んでおきましょう。 一般に、コンピュータでは扱うデータの内容に応じて、たとえば「文字列」「数値」「日時」「バイナリ」など、いくつかのデータ型を使い分けます。これは、データの意味をより明確化したり、コンピュータ内部での処理を効率化するためです。 ASTERIAでは、基本となるデータ型として次の7種類を持っています。ここでは、細かい内容はともかくとして「いくつかの基本となるデータ型というものがある」「データの意味内容に応じて使い分ける」という点を覚えておいていただければ十分です。
|
データ型、ASTERIA Users Guideの「4.3.データ型の詳細」もあわせてご覧ください。 |
ただし、Boolean型は現在のASTERIA 3 「SP2」では変数・定数としては使うことができません。次期リリースの「SP3」で使えるようになる予定です。
なお、データ型は変換することが可能です。データ型の変換はキャストとも呼ばれます。ASTERIAでは自動的にキャストが実行されますので、たとえば文字列型データを整数型の変数に代入する場合などは、フローを作るときに設定をすることなく、自動的に文字列型から整数型へキャストされてデータが代入されます。
ただし、変換できないデータであった場合はエラーとなります。詳しくはASTERIA Users Guideの「4.3.2 データ型の変換」をご覧ください。
|
|
ストリームとは、フロー上を流れるデータオブジェクトです。ストリームには「Text」や「Record」などいくつかのストリームフォーマットがあります。
|
ASTERIA Users Guide の「4.2.ストリームフォーマットとフィールド」もご参照ください。 |
|
FixedLengthに関して:固定長やEBCDICについては、付録で詳しく解説しています。 |
|
HTMLに関して:MIMEタイプが「text/plain」ではなく「text/html」になる、ということです。 |
レコード系のストリームフォーマットには、「ループ」の概念が関係してきます。ループについては次の節で解説していますので、あわせてご参照ください。
たとえばCSV形式のファイルは元々はテキストファイルですから、テキストストリームとして扱うことも可能です。しかし、CSVストリームとして扱うことで、各フィールドのデータへのアクセスが簡単になるというメリットがあります。
|
|
ASTERIAでの変数・定数には次の種類があります。
変数・定数の種類と有効範囲を図示すると次のようになります。
なお、上図には「システム変数」「ストリーム変数」は含まれていません。これは、この2つは他の変数・定数と少し性格が異なるためです。詳しくは、それぞれの項目でご説明します。
|
なお、フロー変数はフロー間でのデータの受け渡しに使うこともできます。詳しくは、次節の「サブフロー」の項目をご覧ください。 |
|
|
これも自由に値を読み書きできる変数です。フロー変数との違いは、「セッション変数を読み書きできる範囲は、同一セッションの同一プロジェクトに含まれるすべてのフローである」という点です。よって、セッション変数を利用するとフロー間で値の受け渡しを行なうことができます。しかし、処理全体の見通しが悪くなるため、なるべくセッション変数は使用しないほうがいいでしょう。たとえば、サブフローとの値の受け渡しは前述のフロー変数(コンポーネントプロパティ)を使う方法がおすすめです。 |
セッション変数は、従来のプログラミング言語で言うところのグローバル変数と似た性格を持っています。 |
セッション変数は、プロパティウインドウの「Variables」タブ内の下図の箇所で用意します。
サンプル: 「423_Variables.xfp」の中にある、「セッション変数1」フローを開いてください。
|
このサンプルでは説明のために、後述する「サブフロー」を用いています。サブフローについての詳細は次節をご覧ください。 |
繰り返しになりますが、このサンプルでは説明のために異なるフロー間でのデータ受け渡しにセッション変数を用いています。しかしこの方法は、フローの見通しを良くするという観点からはおすすめできない方法です。フロー間でのデータ受け渡しにはフロー変数とコンポーネントプロパティを使う方法をご利用ください。
このフローでは、「セッション変数2」フローの呼び出しと、セッション変数「Sample3」からストリームへのデータ読み込みをしています。
ポイントは、この「セッション変数1」フローでは、セッション変数「Sample3」へのデータ書き込みは行なっていないという点です。「Sample3」へのデータ書き込みは、「セッション変数2」フローの中で行なっています。
「セッション変数1」フローの実行結果は、次のようになります。
|
|
これは定数ですので、値の読み出しは自由にできますが、値の書き込みはできません。プロジェクト定数の値はフロー作成時に定義した値となります。 プロジェクト定数は、プロパティウインドウの「Variables」タブ内の下図の箇所で用意します。 プロジェクト定数はこのように、変数のデフォルト値を設定するのと同じ方法で値をセットします。
サンプル: 「423_Variables.xfp」の中にある、「プロジェクト定数」フローを開いてください。
マッピングは、次のようになっています。
このフローを実行すると次のようになります。
|
システム変数の一覧は、付録をご覧ください。 |
これは特殊な変数です。値の読み出しは自由にできますが、値の書き込みはシステム以外はすることができません。設定できる変数名もあらかじめ決められており、必要に応じて使用するシステム変数をプルダウンで選択するようになっています。主に、セッションIDやエラーメッセージの取得に用います。 システム変数は、プロパティウインドウの「Variables」タブ内の下図の箇所で用意します。 ここでは、「セッションID(SessionId)」を取得するように設定されています。
サンプル: 「423_Variables.xfp」の中にある、「システム変数」フローを開いてください。
マッピングは、次のようになっています。
このフローを実行すると次のようになります。
実行結果にはなにやら意味不明な文字列が表示されていますが、これが「セッションID」です。フローが実行されるごとに「セッション」がASTERIA内部で自動的に生成され、IDとしてユニークな文字列が発行されます。
|
|
コンポーネント変数は、一部のコンポーネントに用意されている変数です。そのコンポーネントの中でしか読み書きすることはできません。たとえば、Velocityコンポーネントの例で見てみましょう。 コンポーネント変数は、フロー変数などとは異なり、そのコンポーネントの「LocalVariables」タブで設定します。
サンプル: 「423_Variables.xfp」の中にある、「コンポーネント変数」フローを開いてください。
マッピングの方法は、他の変数と同様です。
Velocityテンプレートの内容は以下の通りです。
Velocityのテンプレートから、コンポーネント変数の値を読み出す方法 たとえば、この例では「LocalVariables」タブにコンポーネント変数 「Sample5」が用意され、マッパーから値がマッピングされています。 その値をテンプレート内で取得するには、次のように記述します。 $local.Sample5 (注:実際には、「$」記号は半角です。) 実際に値を取得すると、次のようになります。 $local.Sample5 このフローを実行すると、次のような結果になります。
コンポーネント変数が用意されているコンポーネントは、Velocity、XMLMerge、XMLUpdateなどです。
|
|
これは、ストリームに関連付いた変数です。この変数は、ストリームの個々の内容に対してファイル名や更新日時などの属性情報(メタデータ)を付加するためのものと考えればよいでしょう。たとえば、ファイル取得時のファイルパスの取得や、添付ファイル付メール送信時の添付ファイル名設定に使用します。
なお、「RecordNo」というストリーム変数については、次節の「ループ」の項目を参照してください。 ストリーム変数の読み込みは、マッパー内で直接行なうことができます。 ストリーム変数の書き込みには、StreamVariablesコンポーネントを使用します。 まず、ストリーム変数の読み込みのサンプルを見てみましょう。 「423_Variables.xfp」の中にある、「ストリーム変数の読み込み」フローを開いてください。
ここではまず、FileSystem(Get)コンポーネントのFilePathプロパティにワイルドカードを設定することで、複数のファイルが取得されるようにしています。
ワイルドカードとは、「任意の文字」を表現するために用いる特殊な記号です。ASTERIAでは「*」と「?」がワイルドカードとして使用できます。「*」は「0個以上の任意の文字」、「?」は「任意の1文字」という意味になります。 つづいてマッパーで、ストリーム変数から「ファイルのフルパス(FilePath)」と「ファイルの最終更新日時(FileDate)」を取得し、ファイルの中身とあわせてCSVストリームにマッピングしています。
このフローを実行すると、次のように表示されます。
ストリーム変数が自動的に付加されるコンポーネントは、FileGet、FTPGet、UNZIPなどです。 つづいて、ストリーム変数の書き込みのサンプルを見てみましょう。 「423_Variables.xfp」の中にある、「ストリーム変数の書き込み」フローを開いてください。
ここでは、マッパーでテキストストリームとファイル名を動的に生成し、StreamVariablesコンポーネントでZIPの中身となるテキストファイルのファイル名をストリーム変数に書き込んでいます。そしてZIPコンポーネントでそのテキストストリームを圧縮し、ファイルに保存しています。ZIPファイルの保存先は「[HOME]/output_data/WriteStreamVariables.zip」です。 ストリーム変数は、StreamVariablesコンポーネントの「StreamVariables」タブで設定します。
マッピングは、他の変数と同様に行なえます。ここでは、現在日時を取得して、テキストファイルの中身とファイル名に加工しています。
フローを実行後、生成されたZIPファイルを確認してください。次のようなファイル名になりましたか?(数字の部分はフローの実行日時ですので、実行タイミングにより変わります。)
ストリーム変数をファイル名の決定などに利用するコンポーネントは、AttachmentMail、ZIPなどです。 |