データの形式と変換
Q1フローで文字コード Windows-31Jから他の文字コードに変換すると文字化けします
A
フローサービスを使用してWindows環境で作成したShift_JISのテキストとその他の日本語文字コード(Shift_JIS、EUC-JP、 ISO-2022-JP等)のテキストとの相互変換を行うときに、下記の文字が文字化けする場合があります。
文字化けする文字とShift_JIS文字コード
- 波線 ~ (8160)
- 二重縦線 ∥ (8161)
- マイナス記号 - (817c)
- セント記号 ¢ (8191)
- ポンド記号 £ (8192)
- ノット記号 ¬ (81ca)
- 全角ダッシュ ― (815c)
これは、Windows環境のフローで作成したShift_JISのテキストは実際はWindows-31Jであり、その他の日本語文字コードとUnicodeを介して相互変換するときに変換される文字コードポイントの相違により発生する現象です。
📝 NOTE
以降、Windows環境で使用されるShift_JISコードは、Windows-31Jと記述します。
文字化けの発生パターン
フローで選択できるエンコーディングはWindows-31J、Shift_JIS、EUC-JP、ISO-2022-JPと4種類あり(utf-8とutf-16は除く)、Shift_JIS、EUC-JP、ISO-2022-JPの3種類の中で相互に変換を行う場合は文字化けは発生しませんが、Windows-31Jとの相互変換を行う場合は文字化けが発生します。
例1: 文字化けが発生するケース
上記7文字が含まれている場合には文字化けが発生します。
Windows-31J
↓
一旦、Unicode変換表に基づきUnicodeへ変換
↓
Shift_JIS / EUC-JP / ISO2022-JP
例2: 文字化けが発生しないケース
上記7文字が含まれている場合にも文字化けは発生しません。
Shift_JIS / EUC-JP / ISO2022-JP
↓
一旦、Unicode変換表に基づきUnicodeへ変換
↓
Shift_JIS / EUC-JP / ISO2022-JP
文字化けしないようにする方法
これら文字化けの解消方法として、StringReplace関数で明示的にコードポイントの相違が発生する文字のコードポイントを指定して変換する方法があります。それぞれ、Windows-31JからJIS系文字コードへの変換の場合と、JIS系文字コードからWindows-31Jへの変換の場合の変換テーブルを記述する形になります。変換テーブルなどの詳細な方法については、StringReplace関数のヘルプを参照してください。
Q2Windows固有の機種依存文字について注意点は?
A
Windows固有の機種依存文字(例:①Ⅲなど)は、Microsoft社が独自にShift_JISを拡張したWindows-31Jという規格で表現されています。これらの文字はShift_JISでは定義されていない文字のため、この文字が含まれるデータを扱うコンポーネントの「ファイルのエンコーディング」プロパティで「shift_jis」を指定すると文字化けが発生します。エンコーディングのプロパティでは「Windows-31J」を指定してください。
Q3サロゲートペア文字に対応していますか?
A
サロゲートペア文字に対応しています。
ただし、以下の場合は未対応です。
- PDFビルダーを使用する場合
- FixedLengthでutf-16を使用する場合
- validationコンポーネントや正規表現で文字列の長さを判定する場合
Q4フローで文字コード EBCDICおよびEBCDIKを扱うことはできますか?
A
フローでFixedLengthストリームを処理する場合、通常の文字コードに加えてEBCDIC変換を行うことができます。 また、以下の文字コードにも対応しています。
- AS-CP00930 IBM CP00930(CP00290 + CP00300)
- AS-CP00939 IBM CP00939(CP01027 + CP00300)
- AS-EBCDIC-JEF EBCDIC + 富士通JEFコード
- AS-EBCDIK-JEF EBCDIK + 富士通JEFコード
- AS-EBCDIC-JIPSE EBCDIC + NEC JIPSEコード
- AS-EBCDIK-JIPSE EBCDIK + NEC JIPSEコード
- AS-EBCDIC-KEIS EBCDIC + 日立KEISコード
- AS-EBCDIK-KEIS EBCDIK + 日立KEISコード
上記の詳しい説明や、各ストリームで扱える基本的な文字コードについては、フローサービスマニュアルの「はじめに」-「フローの構成要素」-「ストリームプロパティ」を参照してください。
📝 NOTE
ASTERIA Warp 4.3.0以前はフローサービスマニュアルの「フローデザイナー」ガイドの「ストリーム」を参照してください。これらのキャラクタセットの定義は、基本的にWindows-31Jとの間でのコード変換のためにテーブルが作成されています。そのため、Windows-31Jとコード変換できるようにフローサービスで修正している部分があります。また、2バイト文字のテーブルに含まれているのはJIS X 208に含まれている文字のみです。
Q5フローで文字コード UTF-16のエンディアンを扱うことはできますか?
A
フローでUTF-16のビッグエンディアン(BE)やリトルエンディアン(LE)を扱うことができます。 ファイルの入力や出力を行うコンポーネントでは「ファイルのエンコーディング」プロパティ、各コンポーネントで出力するストリームの「出力エンコーディング」プロパティで、エンコーディングを指定します。それぞれのプロパティのプルダウンリストに選択肢はありませんが、フィールドをクリックして入力可能になった状態で「UTF-16BE」または「UTF-16LE」と直接入力して指定することによりフローで扱うことができます。 プロパティでのエンコーディングの指定により次のような扱いになります。
読み込み(入力)時
- UTF-16 - BOMでUTF-16のエンディアンを判断
- UTF-16BE - BOMなし UTF-16のビッグエンディアン(BE)
- UTF-16LE - BOMなし UTF-16のリトルエンディアン(LE)
書き込み(出力)時
- UTF-16 - BOMつき UTF-16のビッグエンディアン(BE)
- UTF-16BE - BOMなし UTF-16のビッグエンディアン(BE)
- UTF-16LE - BOMなし UTF-16のリトルエンディアン(LE)
Q6ひらがなカタカナ変換の方法を教えてください
A
ひらがなカタカナ変換に特化したコンポーネントはありませんがMapperにあるStringReplace関数を使用して文字列置換を行うことで対応可能です。
全てのひらがなをカタカナに変換するには以下のような置換するテーブルを作成していただく必要があります。
あ=ア
い=イ
う=ウ
(以下略)
StringReplace関数の詳細はヘルプをご参照ください。
フローサービスマニュアル>マッパー関数>StringReplace
Q7TableDB関数で1つの入力を複数の条件に指定することはできますか?
A
TableDB関数で1つの入力を複数の条件に当てはめることはできません。 入力の数と条件の数をあわせてください。複数の条件を指定するときにはその数の入力が必要になります。
TableDB関数の使い方については「マッパーでRDBからデータを得るには」という記事も参照してください。
Q8カレンダーを変更してもマッパー関数のHolidayとDateCalcの実行時に反映されません
A
ASTERIA Warp1906以前では管理コンソールの「ツール>カレンダー」の画面でカレンダーを編集しても、即時にはマッパー関数のHolidayとDateCalcの実行に反映されません。
変更後はASTERIA Warp全体の再起動を行ってください。
📝 NOTE
Warp1912以降は修正済みです。
Q9Left関数等でエンコーディングを指定した場合に期待した結果になりません
A
Left関数でエンコーディングを指定して文字列を切り詰める場合に、期待した結果にならないことがあります。
それは元の文字列に未定義文字(文字化けする)が含まれている場合に発生します。
例えばShift_JISでは「①」のような文字は未定義ですので、これを含む文字列をエンコーディングにShift_JISを指定して切り詰めると期待した結果にならないことがあります。
未定義文字が含まれないよう適切なエンコーディング設定でご利用ください。
今回挙げた例ですとエンコーディングにはWindows-31Jを指定してください。
📝 NOTE
Mid,Right,Truncate関数なども同様です。
Q10StringReplace関数の置換テーブルの参照に順番はありますか?
A
StringReplace関数で置換テーブルは最長一致ではなく上から順番に検索する動作となります。
例1)
置換テーブルの内容
a=あ
b=い
ab=う
入力文字列:ab
置換結果の文字列:あい
例2)
置換テーブルの内容
ab=う
a=あ
b=い
入力文字列:ab
置換結果の文字列:う
Q11StrToDateStd関数は令和に対応していますか?
A
ASTERIA Warpバージョン1812よりリリースされたStrToDateStd関数につきましてはJavaのSimpleDateFormatで使用される日時パターンを使用します。
この関数を使用し、令和元号を使用する場合は、Java 1.8.0_211以降を使用していただく必要があります。
また、ASTERIA Warpの令和対応については以下の記事も合わせてご参考ください。
Q12Table関数に指定したファイルを置き換えても反映されません
A
Table関数では指定したファイルの更新時間を確認して更新チェックを行います。 例えば、既に読み込み済みのファイルより、新しいファイルの更新時間が古ければ、反映されません。
Table関数に指定したファイルを置き換える際にはファイルの更新時間を一度確認してください。 詳細についてはTable関数の「■備考」欄を参照してください。
Q13バージョン1812からStrToDate関数が非推奨になったようですが?
A
ASTERIA Warp1812では文字列を日時に変換する関数StrToDateStdが追加され従来のStrToDateは非推奨となりました。
従来のStrToDate関数は日付フォーマットに指定したパターンとは異なる文字列の場合もできるだけ変換する動作となっています。 これに対して、StrToDateStd関数はJava標準の機能を使用して文字列を日付に変換する仕組みを採用しており、StrToDate関数より厳密に文字列の解析が行われます。
例
日付フォーマットに「yyyyMMdd」を指定して指定したパターンとは異なる文字列「2018AAAA」を変換する場合
- StrToDate — エラーにならず「0002-01-08T00:00:00.000 JST」に変換
- StrToDateStd — 「変換できない場合の動作」の設定に従いエラーが発生
このように存在しない日付の文字列を処理した場合「変換できない場合の動作」の設定に従いエラーが発生するのが本来想定されている動作になります。
📝 NOTE
日付フォーマットのパターン文字列はJava標準になりました。 元号のパターン文字列が"g","e"から"G","y"になっている点にご注意ください。
以上の点をご理解された上で、従来のStrToDate関数を使用されることについては問題ありません。 ただし、通常のコンポーネントやマッパー関数より調査に時間がかかったり、処理内容によっては最終的に不具合が確認された場合でもStrToDateStd関数への置き換えにより対応策を提示させていただく可能性はあります。
Q14マッパー関数ConvertはエンコーディングWindows-31Jで出力できますか?
A
Convert関数の「出力エンコーディング」プロパティに「Windows-31J」と直接入力することにより指定でき、Windows-31Jで出力できます。
Q15マッパー関数を自分で作成することはできますか?
A
ASTERIA Warpはコンポーネントやマッパー関数を自分で作るためのフローサービス開発キット(以下、SDK)を提供しています。SDKを利用してコンポーネントやマッパー関数を開発すると、複雑な処理を一つにまとめたり、特殊な接続先へ接続して処理することができるようになります。
詳しくはSDKのドキュメントを参照ください。
Q16StringReplace関数とTable関数の違いを教えてください
A
StringReplace関数とTable関数の大きな違いは、StringReplace関数は入力値の中の文字列を置換するのに対し、Table関数は入力値をキーにして値を取得することです。
StringReplace関数
StringReplace関数は、入力値の中にある文字列を置換するための関数です。入力値の文字列の中に置換テーブルに含まれた文字列があるとそれを置き換えて出力します。
例えば、「アステリア(株)」を「アステリア株式会社」としたいときには「(株)=株式会社」と置換テーブルに登録しておくことで変換できます。改行コードなどの正規化や上記のような表記ゆれの修正に利用することができます。
StringReplace関数の使い方は「フローサービスマニュアル」の「マッパー関数」-「文字列」-「StringReplace」を参照してください。
Table関数
Table関数は、入力値をキーにして、別の値を取得するための関数です。入力値をテーブルに登録されたキーの中から探し出し、対応する値に変換して出力します。また、TableDB関数を使うとRDB上のテーブルを利用することができます。
例えば、製品コードを製品名に置換したり、エラーコードからメッセージを取得したりするのに利用することができます。
Table関数、TableDB関数の使い方は「フローサービスマニュアル」の「マッパー関数」-「変換」-「Table」、「TableDB」を参照してください。
Q17マッパーで複数のフィールドを一度にマッピングできません
A
マッパーコンポーネントでは複数のフィールドを一度にマッピングする連結方法がいくつかあり、マッピングウィンドウで右クリックしたときに表示されるメニューの「複数フィールドの連結方法」から選ぶことができます。
初期状態は「選択したフィールド」になっており、ウィンドウ右側のフィールドからマッピングしたいフィールドをあらかじめ選択してから左側のフィールドとマッピングするようになっています。そのため、右の出力側を選択していない場合は一度に接続できないので、出力側を選択してから操作してください。
他には「フィールドの順序」「フィールドの間隔」「フィールドの名前」があります。
自分の使いやすい規則で接続することができます。詳しくは「フローサービスマニュアル」の「フローデザイナー」-「マッピング」-「複数フィールドの一括接続」を参照してください。
Q18.mapper-workというフォルダの下に巨大なファイルが出力されます
A
ユーザーのホームディレクトリ下にある .mapper-work フォルダには、デバッグ時にマッパーコンポーネントへステップインした際の実行時情報が一時ファイルとして保存されます。このファイルはマッパーに入力されたレコードのレコード数が多い場合や、XMLストリームやJSONストリームで繰り返しのフィールドが多い場合など、ストリームの量に応じてサイズが非常に大きくなることがあります。
バージョン2412以降では、デザイナー環境設定 -「全体」タブ -「コンパイル/実行」画面の「デバッグ時の一時ファイルを制限する」で、保存される一時ファイルのサイズを指定できます。
このファイルはデバッグ実行時以外は作成されません。また、フローの終了時には削除されます。
Q19CSVフィールドに改行を含むことはできますか?
A
CSVを扱う場合にCSVストリームプロパティで「囲み文字」を指定すると、フィールドに改行が含まれていてもCSVとして正しく扱われます。例えば、下記の囲み文字(")のCSVの例では、1レコード4フィールドとして扱われます。
"あああ","いいい","う
うう","えええ"
CSVストリームプロパティについては、フローサービスマニュアルの「はじめに」-「フローの構成要素」-「ストリームプロパティ」-「CSV」の「囲み文字」の項目を参照してください。
Q20固定長ファイルに出力する際に出力する長さがフィールド長より短い場合はどうなりますか?
A
- 左揃えで出力され、後ろは空白で埋められます。
- 右揃えには対応していないため、Mapper関数などを使用して文字列を生成してください。
- 負でない整数値を0埋めで右揃え出力する場合に限り、ゾーン10進を使用することで対応できる場合があります。その場合は、FixedLengthストリームの「ゾーン10進の符号の有無」プロパティを「入力時省略可、出力時正の場合出力しない」に設定してください。
Q21固定長のデータファイルを読み込むときに使用されるエンコーディングはなんですか?
A
FileGetやRecordGetコンポーネントで固定長データをFixedLengthストリームとして読み込むときはストリームプロパティの「出力エンコーディング」が使用されます。
コンポーネントの「ファイルのエンコーディング」プロパティは非表示になり使用されません。
Q22XMLストリームで名前空間付きの属性を定義するにはどうすればよいですか?
A
たとえば次のような属性値を設定してみます。
<ns:messages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ns:SingleEmailMessage">
XMLストリーム定義の「ネームスペースの設定」で以下のように設定します。
Prefix xsi
URI http://www.w3.org/2001/XMLSchema-instance
ストリーム定義のフィールド名にxsi:type属性の @xsi:type を入力してください。
属性の設定値(上記例では ns:SingleEmailMessage)をConst関数などを使用して前のMapperコンポーネントから差し込んでください。
Q23フローで読み込んだXMLの改行コードが「CR/LF」から「LF」に変更されてしまいます
A
W3Cの勧告によると、XMLパーサーはXML文書を読み込む際にXML文書内の改行をすべて LF(0x0a) に統一させます。
ASTERIA Warpではこれに準じ、XML文書から文字列を取得すると改行はすべて LF(0x0a) で統一される動作となっております。
参考:XML1.0 2.11 End-of-Line Handling
フローでXMLから取得した文字列中の改行コードを CR/LF 等の別の改行コードで処理したい場合は、MapperコンポーネントでStringReplace等の関数を使って改行コードを置換する処理を追加してください。
例:StringReplace関数で LF を CR/LF に置き換える場合の置換テーブルの内容
\n=\r\n
Q24CSVストリーム「空白を削除」プロパティの指定でタブが削除されます
A
CSVストリームの「空白を削除」プロパティが「はい」の場合に削除する対象文字は半角空白とタブです。
CSVストリームの空白の扱いについては、フローサービスマニュアルの「はじめに」-「フローの構成要素」-「ストリームプロパティ」-「CSV」の「囲み文字」「空白を削除」の項目を参照してください。
Q25CSVを読み込むときにフィールド数より項目数が少ない場合はどうなりますか?
A
フィールド数より項目数が少ない場合、あまったフィールドの値はnullになります。
Q26CSVファイルの項目数をチェックすることはできますか?
A
CSVファイルの項目数をチェックすることはできません。
Q27multipart/form-data形式でフォームデータを送信することはできますか?
A
Webサーバー上のフォームにファイルなどを添付して送りたい時には、「multipart/form-data」で送る必要があります。
フローでこのようなフォームに対してデータを送るには、MIMEEncodeコンポーネントで「multipart/form-data」形式のマルチパートのMIMEストリームを生成し、生成したMIMEストリームをHTTPPostコンポーネント、RESTコンポーネントで送信します。
作成する「multipart/form-data」形式の詳細は、さまざまなWebサイトなどの情報を参考にしてください。
📝 NOTE
MIMEEncodeコンポーネントは、ASTERIA Warp Core エディションではお使いいただけません。
Q28フローでJSONデータを返すにはどうすればよいですか?
A
HttpEndコンポーネントで、「JSON変換」プロパティの「する」「する(インデント)」を選択すると、ストリームがJSON形式に変換されて返されます。
詳しくはHttpEndコンポーネントのヘルプを参照ください。
📝 NOTE
HttpEndコンポーネントは、ASTERIA Warp Core/Core+ エディションではお使いいただけません。
Q29HTMLのフォームで入力した値をフローで取得するにはどうすればいいですか?
A
次のようにするとHTMLのフォームで入力した値をフローで取得することができます。
- 開始コンポーネントをHttpStartコンポーネントにする
- HttpStartコンポーネントのParameterListストリームにHTMLフォームのパラメータ名と同じ名前のフィールドを作成する
- 実行設定でURLトリガーを作成する
- 3で指定したURLをHTMLフォームのactionに指定する
こうすることで、HttpStartコンポーネントのParameterListストリームからHTMLフォームで入力された値が取得できます。
また、フロー作成時に「Httpフロー」を選択するとHttpStartコンポーネントが開始コンポーネントとなったフローが生成されます。 URLトリガー(HTTP起動)のフローについては「フローサービスマニュアル」の「はじめに」-「トリガーごとのフローの作成」-「HTTP起動のフロー」を参照してください。
📝 NOTE
URLトリガーは、ASTERIA Warp Core/Core+ エディションではお使いいただけません。HttpStartコンポーネントは、ASTERIA Warp Core/Core+ エディションではお使いいただけません。
Q30カンマ以外で区切られたCSVファイルを読み込むことはできますか?
A
FileGetやRecordGetコンポーネントではストリームにCSVストリームを指定することでカンマで区切られたCSVファイルを読み込むことができます。このとき、CSVストリームの「区切り文字」プロパティをカンマ以外に指定することで他の区切り文字で区切られたファイルも読み込むことができます。
「区切り文字」プロパティで選択できるのは「カンマ」「タブ」「スペース」「セミコロン」と「縦棒」のいずれかです。それ以外の文字は指定できません。
Q31UTF-16のXMLをビッグエンディアンで出力するにはどうすればいいですか?
A
XMLストリームの「出力エンコーディング」プロパティのフィールドをクリックし、utf-16be と直接入力して指定します。
⚠️ CAUTION
XML宣言のencoding属性はutf-16、utf-16be、utf-16leのいずれを指定した場合もutf-16となります。
Q32エンコーディング「AS-CP00930」と「CP930」は何が違うのですか?
A
「AS-」で始まるエンコーディングはASTERIA Warp固有のエンコーディングで、ホスト系のデータを扱うためにASTERIA Warp製品内で定義されたものです。これらのキャラクタセットの定義は Windows-31J との間でのコード変換のためにテーブルが最適化されており、その2バイト文字のテーブルに含まれているのはJIS X 208に含まれている文字のみです。
これに対し「AS-」で始まらないエンコーディング CP930 はJava提供のテーブルを使用するので、より広い範囲の文字コードが含まれています。たとえば、漢字のいわゆる「ハシゴダカ」は AS-CP00930 には含まれていませんが、CP930 には含まれています。
ASTERIA Warp固有のエンコーディングの詳細については、「フローサービスマニュアル」の「はじめに」-「詳細なトピック」-「フローの構成要素」-「ストリームプロパティ」-「FixedLength」の「フローサービス固有のエンコーディング名」を参照してください。
Q33コンポーネントやストリームのエンコーディングプロパティには何が指定できますか?
A
フローサービスには、ストリームでは「出力エンコーディング」プロパティ、コンポーネントでは「ファイルのエンコーディング」プロパティなどのようにエンコーディングを指定するプロパティがあります。このようなエンコーディングプロパティにはよく使われる utf-8 や shift_jis などの値がドロップダウンリストに定義されていますが、プロパティの中にはプロパティのフィールドをクリックして直接エンコーディング名を入力することができるものがあります。
これらのプロパティで指定できるエンコーディングについては次のように考えています。
- プロパティで選択できるエンコーディング - 動作検証済みであり正式サポート対象
- ASTERIA Warp固有のエンコーディング - 動作検証済みであり正式サポート対象
- その他のエンコーディング - Javaでサポートしている文字コードであればその範囲内で動作するが、未検証でありサポート対象外
ASTERIA Warp固有のエンコーディングはホスト系のデータを扱うためにASTERIA Warp製品内で定義されたエンコーディングです。詳細については、「フローサービスマニュアル」の「はじめに」-「詳細なトピック」-「フローの構成要素」-「ストリームプロパティ」-「FixedLength」の「フローサービス固有のエンコーディング名」を参照してください。
その他のエンコーディングは「java.nio API 用の正準名」「java.io および java.lang API 用の正準名」を指定することで利用することができます。
⚠️ CAUTION
実際の動作は各コンポーネントやストリームによって異なる場合があります。正式サポート対象外のエンコーディングを利用する場合には十分検証していただくことをお願いします。
Q34XMLスキーマをストリームのフィールド定義に利用できますか?
A
XMLスキーマをストリームのフィールド定義として利用することはできません。
Q35同じフィールド定義を何度も定義するときによい方法はありませんか?
A
フローの中で同じ形式のフィールド定義を持つストリームを何度も利用する場合には、ストリーム定義セットを定義して再利用するのが便利です。
使い方は「フローサービス マニュアル」の「フローデザイナー」-「ストリーム定義セット」を参照ください。
📝 NOTE
ストリーム定義セットは、ASTERIA Warp Core/Core+/Core++ エディションではお使いいただけません。
Q36JSONDecode/JSONEncodeコンポーネントの廃止後の対応を教えてください
A
JSONDecodeコンポーネントおよびJSONEncodeコンポーネントはASTERIA Warp 2412から廃止されており、フローデザイナー上には表示されません。ASTERIA Warp 2412以降では、JSONストリームのご利用をお願いいたします。
代替方法の例:
- JSON形式の文字列 → 別のストリームに変換したい場合(従来のJSONDecode相当)
Converterコンポーネントの利用をご検討ください。 - 別のストリーム → JSON形式の文字列に変換したい場合(従来のJSONEncode相当)
ConverterコンポーネントまたはMapperコンポーネントの利用をご検討ください。
参照:
- フローサービスマニュアル:「はじめに」-「詳細なトピック」-「ストリームプロパティ」-「JSON」(JSONストリームの詳細)
- AsteriaPark:JSONストリームの基本的な設定方法の解説動画
Q37マッパーで発生したエラーを無視するとどのような動作になりますか
A
フローの処理は継続しますが、出力ストリームや変数には意図してない値が設定されますので実装時には注意が必要です。
出力ストリームや設定される値については下記の内容をご参考ください。
出力ストリーム
次の順序で検索され出力可能な最初のストリームが出力されます。
- コンポーネントで定義された「エラーを無視する」用のストリーム
- エラーに関連付けられたストリーム
- 入力ストリーム
- 新規に作成した空のストリーム
フロー変数や後続のプロパティ
エラー発生に関係のない接続でもすべての値が空になります。
Q38マッパーでストリームのレコード件数が取得できません
A
マッパーコンポーネントの制限事項として、LoopEndコンポーネントの直後にマッパーを配置した場合「レコード件数」は取得できません。
Q39マッパー変数へ初期値をマッピングしても使用されません
A
マッパーコンポーネントを2つ並べて2つ目のマッパー変数へ値をマッピングしても、その値は使用されません。これはマッパー変数の初期化のタイミングによるものです。
マッパー変数はマッパーの処理開始時に変数が初期化されるため、1つ目のマッパーで値をマッピングしても2つ目のマッパーの処理開始時に変数が初期化されます。そのため、1つ目のマッパーでマッピングした値ではなく、2つ目のマッパー変数で設定されている初期値が使用されます。
2つのマッパー間で値を受け渡す場合はフロー変数など別の変数を使用してください。
変数のスコープについて詳しくは、フローサービスマニュアルの「はじめに」-「フローの設計」-「フローの構成要素」-「変数」を参照してください。
Q40ファイルを読み込むと文字化けします
A
FileGetやRecordGetなどのコンポーネントにて特定の形式(Text、HTML、CSV)のファイルを読み込む場合、エンコーディングが正しくないと文字化けが発生します。コンポーネントのプロパティ「ファイルのエンコーディング」で正しいエンコーディングを指定してください。
また、この設定が「自動判別」になっている場合も文字化けすることがあります。読み込むファイルのエンコーディングがあらかじめ判明している場合は、そのエンコーディングを直接指定することをお薦めします。
なお、読み込むファイルが固定長(FixedLength)形式の場合は、「ファイルのエンコーディング」は存在しないため、出力ストリームの「出力エンコーディング」が入力時にも意味を持ちますのでそちらで指定してください。下記もあわせてご参照ください。
固定長のデータファイルを読み込むときに使用されるエンコーディングはなんですか?
Q41ファイルなどに出力する時のエンコーディングを変換する方法を教えください
A
出力ストリームの「出力エンコーディング」プロパティがある場合、ファイルなどに出力時のエンコーディングを指定して文字コードを変換することができます。
例えば、shift_jisファイルを読み込んでutf-8に変換して出力する場合は、以下のように指定して、次のFilePutコンポーネントへストリームを渡してください。
- FileGetやRecordGetコンポーネントの「ファイルのエンコーディング」プロパティを
shift_jisにする - 出力ストリームの「出力エンコーディング」プロパティを
utf-8にする
Q42新元号(2019年の改元)には対応していますか?
A
ASTERIA Warp 1906以降では、2019年の改元に対応しています。 ASTERIA Warp 1812以前では、以下の関数で元号を指定している場合は元号変更の影響があります。
- StrToDate関数 (※1)
- FormatDate関数 (※2)
- Now関数
📝 NOTE
※1 StrToDate関数は、ASTERIA Warp1812から非推奨、ASTERIA Warp2412から廃止されています。※2 FormatDate関数は、ASTERIA Warp2312から非推奨、ASTERIA Warp2412から廃止されています。
ASTERIA Warpでは、2019年の改元について以下の方針で対応を行います。
| バージョン | 対応方針 |
|---|---|
| ASTERIA Warp 4.9以前 | 公開パッチを提供するバージョン(現時点でASTERIA WARP 4.9.1 / 1712以降)までバージョンアップ後、提供する公開パッチを適用して対応。 |
| ASTERIA Warp 4.9.1 | 提供する公開パッチを適用して対応。 |
| ASTERIA Warp 1610、1703 | 公開パッチを提供するバージョン(ASTERIA WARP 1712以降)までバージョンアップ後、提供する公開パッチを適用して対応。 |
| ASTERIA Warp 1712 ~ ASTERIA Warp 1812 | 提供する公開パッチを適用して対応。 |
📝 NOTE
2019年4月12日、公開パッチの提供を開始しました。公開パッチ : 新元号(2019年の改元)への対応について
新元号への対応が必要な場合はパッチ適用以外に対応できる方法はございませんので、予めご了承ください。
Q43フローで複数レコードのキーごとの値を集計することはできますか?
A
RecordAggregateコンポーネントを利用することで可能です。 またはRecordSQLコンポーネントを利用することで可能です。
詳しくはRecordAggregate、RecordSQLコンポーネントのヘルプを参照してください。
📝 NOTE
RecordAggregateコンポーネント・RecordSQLコンポーネントは、ASTERIA Warp Core エディションではお使いいただけません。
Q44RecordFilterコンポーネントの2つの出力ストリームを同じマッパーにつなげるとストリームが1つしか出力されません
A
RecordFilterコンポーネントで「一致しないレコードも取り出す」プロパティを「はい」とすると、出力コネクターが2つになったアイコンに切り替わり、一致したレコードと一致しなかったレコードの両方をそれぞれ取り出して処理することができます。
ただし、これら2つの出力ストリームを直後の同じマッパーにつないでも先につないだ1つのストリームしか見えません。両方のストリームを利用するとき、それぞれを別のマッパーにつないでから同じマッパーにつなぐと2つのストリームが見えるようになります。この場合、それぞれにつないだマッパーで「入力をそのまま出力」プロパティを「はい」にすると別にしなかったときと同じように1つしか使えませんので注意してください。
Q45Velocityコンポーネントで使うテンプレートの中で#includeでファイルを指定するとエラーになってしまいます
A
Velocityではテンプレートの指定方法が「ファイル」の場合、テンプレートの中で#includeや#parseを使うと外部ファイルに書かれたテンプレートを取り込むことができます。このとき、ファイルが見つからない場合は次のようなエラーになります。
Unable to find resource 'initialize.vm'
Velocityコンポーネントでは、外部参照するファイルの起点はユーザーのホームディレクトリになります。プロジェクトフォルダや参照元ファイルの置かれたフォルダではありませんので、注意してパスを指定してください。
📝 NOTE
テンプレートの指定方法が「直接入力」の場合は他のファイルを読み込むことはできません。
Q46XPathStringコンポーネントでXPath式を設定したフロー変数を指定しても値を取得できません
A
XPathStringなどXMLコンポーネントの「XPath」プロパティではフロー変数などの変数はXPathの述語の評価にのみ利用できます。
例えば、「XPath」プロパティの指定で「/root/record[@id=$flow.var1]」のように利用することはできますが、「$flow.var1」を指定してフロー変数var1に設定されているXPathを取得対象とするような処理はできません。
XPathの指定方法についてはXPathStringコンポーネントヘルプを参照してください。
Q47XPath関連コンポーネントでノードや要素を取得するとどのような順番になりますか?
A
XPathStringコンポーネントやXPathNodesetコンポーネントでは、XMLから複数のノードや要素を取得することができます。取得順序はXML内での出現順です。
特定の属性値など値の順に取得したいような場合、XSLTのソート機能などを利用してXML内部の出現順を変更することで期待する順序で取得することもできます。
Q48JavaInterpreterコンポーネント/関数でエラーになります
A
ループ内でJavaInterpreterコンポーネント/JavaInterpreter関数を使用するとエラーが発生することがあります。その場合、ソースコードプロパティに設定しているソースコードの中で、変数にfinal修飾子を付けていないかどうかを確認し、final修飾子を使用している場合には削除してください。
Q49「XMLのパースに失敗しました: Premature end of file」というエラーになります
A
フローを実行すると「XMLのパースに失敗しました: Premature end of file」というエラーになることがあります。これはXMLを解析するときに不正なXMLだった場合に起こります。
例えば、Converterコンポーネントで入力ストリームとなるXMLストリームをマッピングしなかった場合にこのエラーが起こります。その他、WebServiceコンポーネントを利用するときなど、XMLを利用する処理を実行したときに不正なXMLだった場合は同じようなエラーになることがあります。
このようなエラーになったときには、入力したXMLが正しいかどうかを確認するようにしてください。
またMapperコンポーネントで出力ストリームとなるXMLのフィールド定義を行っていない場合にも同様のエラーが発生します。「フローサービスマニュアル」の「はじめに」-「フローの構成要素」-「マッパー」に記載があるようにXMLのフィールド定義には最低でも文書要素の定義が必要です。Mapperコンポーネントの出力ストリームでXMLのフィールドが定義されているか確認してください。
⚠️ CAUTION
ASTERIA Warp 2412以降、WebServiceコンポーネント/WebService2コンポーネントは廃止されています。
