6
付録

6.1 添付CD-ROMについて

本書の添付CD-ROMには、以下のソフトウェアおよびサンプルなどが収録されています。

ディレクトリツリー:

ASTERIA
  install-asf-win.exe             ASTERIAサーバ
  install-asdesigner-win.exe      ASTERIAデザイナ
BlackJumboDog
  setup.exe                       BlackJumboDog(メールサーバ)
  ...
Home
  guest                           guestのホームディレクトリ
    htdocs                        実習3.4で利用するデータ
      search.html
      style.css
    input_data                    実習で利用するデータ
      asbook.mdb
      attachmentMailingList.csv
      author.csv
      ChoiceData.csv
      ComponentVariables.vm
      deleteItem.csv
      ebcdic.dat
      EbcdicField.csv
      ExcelInput.xls
      hello.html
      infoteria-logo.png
      insertItem.csv
      insertUpdateItem.csv
      ItemTemplateExcel.xls
      ItemTemplatePdf.xls
      MapperDateTime.vm
      MapperNumber.vm
      MapperString.vm
      music.csv
      Parallel1.csv
      Parallel2.csv
      Parallel3.csv
      ryoma.txt
      soseki.txt
      StreamVariables1.txt
      StreamVariables2.txt
      StreamVariables3.txt
      SubFlow.csv
      SubFlowResultTemplate.vm
      table.csv
      TableChoiceData.csv
      textMailingList.csv
      updateItem.csv
      webSearchResult.vm
  projects                        実習で作成するフローの見本
    200_HelloAsteriaWorld.xfp
    300_Lesson.xfp
    350_Mapper.xfp
    423_Variables.xfp
    431_Process_Branch.xfp
    432_Process_Parallel.xfp
    433_Process_Loop.xfp
    434_Process_SubFlow.xfp
    435_Process_Exception.xfp
    600_Legacy.xfp

詳細は、

ASTERIA実践ガイド公式サイト

http://book.infoteria.com/

をご覧ください。

なお、BlackJumboDogは、SIN/Sapporoworks氏が作成されたフリーソフトウェアです。 以下のURLにて、自由にダウンロードすることができ、ウェブページ上でサポートを受けることが可能となっています。作者のSIN/Sapporoworks氏に感謝します。

http://homepage2.nifty.com/spw/software/bjd/

6.2 ASTERIAの製品構成と仕様

ASTERIAの詳細な情報については、以下のウェブページを参考にしてください。

製品構成:

http://www.infoteria.com/jp/product/asteria/compose/

動作環境・仕様:

http://www.infoteria.com/jp/product/asteria/spec/

6.3 レガシーシステムと固定長フォーマット

古いメインフレームやホストがあるシステムでは、データ転送用のファイル形式としてCSVよりも固定長フォーマットが使われている場合が多くあります。固定長フォーマットは、横80文字・縦24文字などに端末の画面サイズが固定されていて、そこに表示できる文字数に合わせてデータ長を決めていた時代には主流のファイル形式でした。

ASTERIAでは固定長フォーマットを扱うストリームとして「FixedLength」をサポートしています。このストリームは他にくらべて若干特殊で、以下のような便利な機能を搭載しています。

  • 定義体(フィールド情報)のインポート
  • EBCDICのサポート
  • ゾーン10進・パック10進、および仮想小数点の対応

これらの機能を活用して、レガシーシステムのデータを取り扱うことが可能となっています。

6.3.1 定義体(フィールド情報)のインポート

固定長フォーマットの定義体(データ項目の定義情報)は、一般にExcelなどで管理されていることが多いようです。ASTERIAでは、このExcelで管理されている定義体から簡単にフィールド定義をインポートすることができます。

手順としては以下のようなものです。

まず、定義体ファイルを開き、

ここで「項目名」と「開始位置」と「長さ」を、この順番で取り出して、下図のように別シートにコピー&ペーストします。この際、開始位置が0ベースか1ベースかを確認して下さい。ASTERIAの固定長のStartPositionは0ベースなので、必要ならExcel上で開始位置を全体にマイナス1して0ベースに揃えます。

このシートをExcelから[名前を付けて保存]でCSVとして保存します。(この例では「EbcdicField.csv」というファイル名で保存しています)

次にASTERIAデザイナに移って、FileGetなどのコンポーネントをドロップし、ストリームを「FixedLength」に変え、Fieldタブに切り替えて適当なところを右クリックし、「インポート」を選択します。

すると下図のようなダイアログが出ますので、ファイルタイプを「CSVファイル」に指定し、文字エンコーディングを「shift_jis」に指定し、TypeとFractionLengthのチェックを外してから、先ほど作成したcsvの定義体ファイル「EbcdicField.csv」を指定します。

インポート時にエラーが出るようでしたら、図のように指定する項目が間違えていないか、元データに間違ったデータが含まれていないか、などをチェックしてください。

下図のように読み込まれれば成功です。

6.3.2 EBCDICのサポート

固定長フォーマットでは、しばしばEBCDIC (Extended Binary Coded Decimal Interchange Code) タイプの文字コードが用いられます。

EBCDICはIBM社がホスト向けに策定した8ビットの文字コード体系ですが、歴史的に複雑な経緯があり、特に日本国内ではメーカー別に様々な独自拡張が行われてきました。

  1. 元々のEBCDICは、アルファベット大文字 + 記号 + コントロールコードのみ
  2. 1に小文字が追加されたバージョンができた
  3. 1に小文字の代わりに半角カナを追加したバージョンができた
  4. 3の空いているところに小文字を追加したバージョンができた (EBCDIC, EBCDIC-JP-E)
  5. 2の空いているところに半角カナを追加したバージョンができた (EBCDIK, EBCDIC-JP-kana)

ASTERIAでは、ストリームにFixedLengthを指定した場合、EncodingプロパティでEBCDIC (CP500) を指定することが可能です。CP500とはiso-8859-1との間で制御文字も含めて相互変換が可能なコード体系(いわゆる英語圏のEBCDIC)です。

(1) 日本語対応

ASTERIAでは、限定的ではありますがCP500の他にも下記の日本語EBCDICをサポートしています。

  • "AS-CP00930" IBM CP00930(CP00290 + CP00300)
  • "AS-CP00939"(CP01027 + CP00300)
  • "AS-EBCDIC-JEF" 富士通のEBCDIC + JEF
  • "AS-EBCDIK-JEF" 富士通のEBCDIK + JEF
  • "AS-EBCDIC-JIPSE" NECのEBCDIC + JIPSE
  • "AS-EBCDIK-JIPSE" NECのEBCDIK + JIPSE
  • "AS-EBCDIC-KEIS" 日立のEBCDIC + KEIS
  • "AS-EBCDIK-KEIS" 日立のEBCDIK + KEIS

これらは基本的にShift JIS (Windows-31J) との間でのコード変換を主眼に置いてあります。また、2バイト文字に含まれているのは、JIS X 208に含まれている文字のみです。

(2) 注意を要する文字など

  • 改行

0x15(NEL)は、\u0Aと相互にマッピングされます。これは0x15を\u85にマッピングするとUnicodeで改行としてうまく扱えない、UnicodeからWindows-31Jにマッピングした際に0x0Aにならずに改行として扱えないという問題があるためです。

  • 円記号とバックスラッシュ

EBCDICの円記号は、\u5Cと相互ににマッピングされます。これは\uA5にマッピングすると、UnicodeからWindows-31Jにマッピングした際に0x5Cにならずに円記号として扱えないという問題があるためです。また、バックスラッシュも\u5Cにマッピングされます。

  • チルダとオーバーライン

EBCDICのチルダは、\u7Eと相互にマッピングされます。また、オーバーラインも\u5Eにマッピングされます。これはWindows-31Jのマッピングで、\u7Eが0x7Eにマッピングされているためです。

(3) 使用方法

以下で、日本語EBCDICを扱う方法をサンプルを使って示します。

まず、今回扱うデータ「ebcdic.dat」は、バイナリエディタで開くと下図のようになっています。

このデータは富士通ホストのJEFコードで構成されており、全体で1レコード80バイトの固定長レコードが3行あり、その1レコード目に注目してみると「Shift-INコード、5つの全角アルファベットA、Shift-OUTコード、60バイトの空白、8桁のゾーン10進データ」となっています。

以下の手順で、この全半角混在のEBCDICデータをUTF-8のCSVストリームに変換していきます。

(1)

ASTERIAデザイナを終了させてから

[ASTERIAデザイナのインストールディレクトリ]/conf/ja/flowbuilder.xconf

をテキストエディタで開き、下図のようにFixedLengthの設定を行うところでEncodingプロパティのtype属性を"choice"から"editableChoice"に変更して保存します。

この手順でFixedLengthストリームのEncodingプロパティが下図のように直接編集可能になります。

(2)

ASTERIAデザイナを起動し、プロジェクト「600_Legacy.xfp」を開きます。ここで、ConverterコンポーネントのEncodingプロパティに「AS-EBCDIC-JEF」というコードが指定されていることを確認し、Fieldタブが下図のようになっていることを確認します。

(3)

このフローを実行すると、以下のようにCSVが表示されます。

このようにして、ASTERIAでEBCDICデータを取り込んで、様々な処理を行っていくことが可能です。

参考情報:



  • RFC1345 ftp://ftp.rfc-editor.org/in-notes/rfc1345.txt

下図は、上記「EBCDICコード表 Ebcdic ver1.1」の表示サンプルです。

6.3.3 ゾーン10進・パック10進、および仮想小数点の対応

ASTERIAは、ゾーン10進やパック10進といった特殊な数値形式を扱うことができます。ASTERIAの型としてはZonedDecimalとPackedDecimalがそれぞれ相当します。

ゾーン10進は、1バイトあたり1桁の10進数を表現するBCD (Binary Coded Decimal) 形式のひとつで、1バイトの上位4ビットをゾーン部、下位4ビットを数値部として表現し、最後の1桁のゾーン部が符号部となる方式です。符号部がFまたはCの場合にプラス、Dの場合にマイナスを表現します。

パック10進は、ゾーン10進のゾーン部の無駄を省き、1バイトあたり2桁の10進数を表現するBCDで、符号が末尾の4ビットで表現されます。符号部の表現方法はゾーン10進と同じです。

さらに、固定長フォーマットのゾーン10進とパック10進では、仮想小数点を扱うことが可能です。Lengthで全体の長さを、FractionLengthで小数部の長さを指定します。

仮想小数点とは、データ本体には小数点の位置を示す情報を持たず、小数点の位置を外部から教える方法です。これは、小数点記号そのものが1文字とカウントされてしまうと都合が悪い固定長データならではの事情から生まれた考え方です。例えば「12345678」という数値列に対してFractionLengthが3に定義されている場合、「12345.678」と解釈することになります。

お気づきかも知れませんが、ゾーン10進におけるF0からF9までのコードはEBCDIC互換となっています。つまり例えば、コードF0はEBCDIC(文字型)と解釈してもゼロですし、ゾーン10進(数値型)と解釈してもゼロです。これは、バイトストリームに対して型情報(定義体)を外に持たなければならないという制約の中にあって、型情報が入手できなくてもとりあえずデータを文字型として表示してみれば意味がわかる可能性が高い、というちょっとした工夫のひとつと言えるでしょう。また、このように考えれば、EBCDICやゾーン10進などのレガシーデータに馴染みの薄いエンジニアにとっても理解の助けになると思います。

6.4 コンポーネント・マッパー関数・システム変数一覧

ここでは、主要なコンポーネントの一覧、マッパー関数の一覧、システム変数の一覧を掲載します。(特別なものは除いてあります)

6.4.1 コンポーネント一覧

(1) Controlタブ

Controlタブには、データの流れを制御したり、排他制御を行ったり、コマンドやJavaなど外部プログラムの実行を行うコンポーネント群が配置されています。

(2) Branchタブ

Branchタブには、処理を条件分岐したり、合流するコンポーネントが配置されています。

(3) Storageタブ

Storageタブには、ファイル、RDB、MQ、XMLデータベース、Domino、SAP R/3などのデータストレージの入出力に関するコンポーネントが配置されています。

(4) Networkタブ

Networkタブには、HTTP / FTP / SMTP / POP3 / IMAP4 / LDAPなどの各種ネットワークプロトコルや暗号化メール、WebMacro(ウェブ自動巡回)コンポーネントなどが配置されています。

(5) Formatタブ

Formatタブには、Excel / PDFとのデータ変換や、Velocityテンプレートによる動的テキスト生成、Zipによる圧縮・解凍、XSLT/XPathによるXML構造変換、レコードデータのジョインやソートを行うコンポーネントが配置されています。

(6) Fileタブ

Fileタブには、ファイルの移動・コピー・削除などのファイル/ディレクトリ操作のためのコンポーネントが配置されています。

6.4.2 マッパー関数一覧

(1) 文字列関数

文字列データを処理するための関数です。

アイコン関数名機能概要
ASC 文字列内の全角文字を半角文字に変換します
CONCATENATE 複数の文字列を結合して 1 つの連結文字列につなげます
CONST 固定文字列を返します
EXTSTR 指定された文字列を検索し、その右側もしくは左側の文字列を返します
FILENAME パス文字列を入力すると、最後尾のファイル名部分を返します
JIS 文字列内の半角文字を全角文字に変換します
LEFT 文字列の先頭(左端)から指定された文字数の文字を返します
LEN 文字列の長さを返します
LOWER プロパティで指定された言語指定に基づき入力文字列を小文字に変換します
MID 文字列から一部を返します
REPEAT 指定回数分繰り返した文字列を生成します
RIGHT 文字列の末尾(右端)から指定された文字数の文字を返します
TRIM 文字列から両端の空白を削除します
UPPER プロパティで指定された言語指定に基づき入力文字列を大文字に変換します
UUID UUID(Universally Unique IDentifier)を生成します
EMBED テンプレートに入力値を埋め込んで出力します
InsertString 文字列を挿入します
DeleteString 文字列を削除します
TRUNCATE 文字列の指定された開始方向から指定された文字数を切り捨てた残り部分を返します
StringReplace 入力文字列を置換します
REGEXP 正規表現で入力文字列のパターンマッチングを行います
RegexpMatch 入力値が正規表現にマッチする場合にTrueを返します
RegexpFind 入力値が正規表現にマッチする場合にそのインデックスを返します
REGEXPREPLACE 正規表現でマッチした文字列を指定された文字列で置換します

(2) 数値関数

数値データの加減乗除などを行うための関数です。

アイコン関数名機能概要
ABS 絶対値を返します
ADD 二つの数値を加算します
AVERAGE 数値の平均を返します
CALC 固定値と演算をした計算結果を返します
DIVIDE 二つの数値を除算します
MOD 二つの数値を割った余りを計算します
MULTIPLY 二つの数値を乗算します
RAND 乱数を生成します
ROUND 入力値を「四捨五入」、「切り上げ」、「切り捨て」の処理をします
SUBTRACT 二つの数値を減算します
SUM 数値の合計を返します

(3) 日付関数

日付形式の変換や、日時の計算を行う関数です。

アイコン関数名機能概要
DATE 年、月、日から日時データを生成します
DATECALC 日時を加減算します
DATETIME 年、月、日、時、分、秒、ミリ秒から日時データを生成します
DAY 日時から指定されたタイムゾーンでの日を取得します
HOUR 日時から指定されたタイムゾーンでの時刻を取得します
MILLISECOND 日時から指定されたタイムゾーンでのミリ秒の値を取得します
MINUTE 日時から指定されたタイムゾーンでの分を取得します
MONTH 日時から指定されたタイムゾーンでの月を取得します
NOW 現在の日時を返します
SECOND 日時から指定されたタイムゾーンでの秒を取得します
STRTODATE 任意フォーマットの文字列から日時データを生成します
TIME 指定した時・分・秒・ミリ秒に対応する日時データを返します
WEEKDAY 日時から曜日を返します。曜日は数値で返され、値はそれぞれ「1=日 2=月 3=火 4=水 5=木 6=金 7=土」となります
YEAR 日時から指定されたタイムゾーンでの年を取得します

(4) 変換関数

日時や数値の表記形式の整形、コード変換を行う関数です。

アイコン関数名機能概要
FORMATDATE 日時を指定のフォーマットに整形します
FORMATDECIMAL 数値を指定のフォーマットに整形します
FORMATNUMBER 数値を各国の数字形式の文字列に変換します
FORMATCURRENCY 数値を各国の通貨形式の文字列に変換します
FORMATPERCENT 数値を各国のパーセント形式の文字列に変換します
TABLE CSVか Properties形式(key=value)のデータを読み込み、入力をキーとして対応する値を返します
TABLEDB データベースのテーブルから検索を行い、その結果を値として返します
ENCODE 入力データをBASE64, quoted-printable, uuencodeのアルゴリズムでエンコードします
DECODE 入力データをBASE64, quoted-printable, uuencodeのアルゴリズムでデコードします
DIGEST 入力データから指定したハッシュアルゴリズムに基づきダイジェスト文字列を生成します
URLENCODE 任意の文字列をx-www-form-url符号化形式にエンコードします
URLDECODE x-www-form-url符号化形式を文字列にデコードします
CONVERT 入力文字列またはバイト列を別のエンコーディングの文字列またはバイト列にします

(5) 制御関数

条件指定による値選択やJavaインタプリタなどのカスタム関数です。

アイコン関数名機能概要
IF 入力を比較し、TrueもしくはFalseプロパティに設定されている値を返します
CHOICE Input1入力値に応じて、Input2以降の入力された値のいずれかを選びます
NULLCHECK 入力をすべてチェックしNullでない最初の値を返します
JAVAINTERPRETER Sourceプロパティで指定されるJavaのコードを実行します

(6) バイナリ関数

値をバイナリデータとして処理するための関数です。

アイコン関数名機能概要
CONSTB 定型のバイト列を出力します。入力はありません
LENB バイト数を返します
LEFTB バイト列の先頭(左端)から指定されたバイト数のバイト列を返します
RIGHTB バイト列の末尾(右端)から指定されたバイト数のバイト列を返します
MIDB バイト列の任意の位置から指定されたバイト数のバイト列を返します
REPLACEB バイト列の中の任意の位置のバイト列を別のバイト列に置換します
TRUNCATEB バイト列の指定された開始方向から指定されたバイト数を切り捨てた残り部分のバイト列を返します
CONCATENATEB 複数のバイト列を結合して 1 つの連結バイト列につなげます

(7) Boolean関数

値を論理演算や比較を行うための関数です。

アイコン関数名機能概要
AND 入力値の論理積を返します
OR 入力値の論理和を返します
NOT 入力値の否定を返します
Equal 入力値を比較し、値が等しい場合にTrueを返します
NotEqual 入力値を比較し、値が等しくない場合にTrueを返します
Greater 入力値を比較し、入力値がDataプロパティの値よりも大きい場合にTrueを返します
GreaterEqual 入力値を比較し、入力値がDataプロパティの値よりも大きいか等しい場合にTrueを返します
Less 入力値を比較し、入力値がDataプロパティの値よりも小さい場合にTrueを返します
LessEqual 入力値を比較し、入力値がDataプロパティの値よりも小さいか等しい場合にTrueを返します
SelectIndex 値がTrueである最初の入力値のインデックスを返します
BoolIf 入力値1がTrueの場合はTrueプロパティの値を、Falseの場合はFalseプロパティの値を出力します

(8) MIME関数

メールヘッダやMIMEヘッダの情報を加工するための関数です。

アイコン関数名機能概要
MailAddressParser メールヘッダのAddressフィールド(From、To、CCなど)からアドレスまたは名前部分を抜き出します
MailAddressExclude メールヘッダのAddressフィールド(From、To、CCなど)から指定のアドレスを除いたアドレスリストを返します
MailAddressCount メールヘッダのAddressフィールド(From、To、CCなど)に設定されているアドレスの数を返します
MIMEParameterParser MIMEヘッダからパラメータを抜き出します

6.4.3 システム変数一覧

ASTERIAの状態を表すためにあらかじめ定義されている変数です。システム変数は読み取り専用でフローから変更することはできません。システム変数には以下のものがあります。

変数名 内容
ProjectOwner プロジェクトの設計ユーザー名
ProjectName プロジェクト名
ProjectFileName プロジェクトファイル名
FlowName フロー名
OwnerDirectory プロジェクトオーナーのホームディレクトリ
SessionId セッションID
ExecuteUser 実行ユーザー名
UserDirectory 実行ユーザーのホームディレクトリ
ParentProjectName サブフロー、またはException フローの場合、呼出し元フローのプロジェクト名
ParentFlowName サブフロー、またはException フローの場合、呼出し元フローのフロー名
ExceptionComponent Exception フローの場合、Exception の原因となったコンポーネント名
ExceptionErrorCode Exception フローの場合、Exception のエラーコード
ExceptionFunctionName Exceptionフローの場合、Exception の原因となったMapper関数の名前
ExceptionComponentType Exception フローの場合、Exception の原因となったコンポーネントのコンポーネント種別
ExceptionMessage Exception フローの場合、Exception メッセージ
ExceptionParam1〜5 Exception フローの場合、Exception の原因となったコンポーネントによって設定されたパラメータの値
ExceptionParamName1〜5 Exception フローの場合、Exception の原因となったコンポーネントによって設定されたパラメータの名前
ExceptionDetail これはException の詳細情報を文字列化したもので、フローでException が発生した場合にException フローの中からアクセスできます。内容には以下のものが含まれます。
  • ExceptionState
  • Exception になったコンポーネントとその時のプロパティ
  • Exception になったコンポーネントの入力ストリームの文字列値
  • ExceptionParam(設定されている場合)
  • ExceptionStream(設定されている場合)
  • スタックトレース
RequestURL HTTP でフローを実行した場合の実行URL
※ サーバー名とポートは入りません
RequestId リクエストID
HttpRemoteHost Http でリクエストされた場合のリモートホスト名
HttpRemoteAddr Http でリクエストされた場合のリモートホストのIPアドレス
HttpServerPort Http リクエストを受けたHttpServer のポート番号
HttpServerName Http リクエストを受けたHttpServer のサーバ名
AsteriaDirectory ASTERIA のインストールディレクトリ