7.1 データマッパー
- Magic xpi の代表的なコンポーネントであるデータマッパは、データを送り元から送り先へマッピング、連携することができます。
- 連携することのできる送り元/送り先として以下の種類があります。
| 送り元 | 送り先 |
| XML ※1 | 〇 | 〇 |
| JSON ※1 | 〇 | 〇 |
| データベース | SELECT | INSERT, UPDATE, DELETE, UPSERT ※2 |
| フラットファイル(CSV, 固定長ファイル等) | 〇 | 〇 |
| XMLインタフェースを持つコンポーネント | 〇 | 〇 |
| 変数 | 〇 | 〇 |
| ODS | 〇 | 〇 |
| UDS | 〇 | 〇 |
| フロー呼び出し(Call Flow) | × | 〇 |
| テンプレートファイル ※3 | × | 〇 |
※1
XML、JSONを使用する場合はスキーマファイルが必要
※2
UPSERTはMSSQL、Oracle、DB2、DB2/400、MySQL、PostgreSQLで使用可能。
データベーススキーマプロパティ「UPSERT」を「Yes」に設定
※3
HTMLやテキストにxpi独自のタグを埋め込んだテンプレートファイルを用意し、タグ部分に動的に値を設定
【データマッパーの設定例】
![データマッパーの設定例]()
7.6 CSVをDBに取り込む
【仕様】
- データマッパーを使用してCSVのデータをDB上の商品マスタに書き込みます。
- CSVおよびDB上の商品マスタのレイアウトは下記の通りです。
![CSVをDBに取り込む]()
| 列名 | データ型 |
| 商品番号 | float |
| 商品名 | char(255) |
| 販売価格 | numeric(17,5) |
| 在庫数量 | float |
| 仕入先コード | float |
| 作成日 | datetime |
| 作成時刻 | char(6) |
| 更新日 | datetime |
| 更新時刻 | char(6) |
【Magic xpi スタジオの起動】
- 「ファイル」メニューから「開く」を選択し「MagicxpiSample1.sln」を開きます。
- ビジネスプロセスを右クリックし「CSV→DB」に名前変更します。
- フローを右クリックし「CSV→DB書込」に名前変更します。
![Magic xpi スタジオの起動]()
【MSSQLデータベースリソースの登録】
- メニュー > プロジェクト > 設定をクリックします。
- 左ペインで「リソース」が選択されている状態で「追加」ボタンを押します。
![MSSQLデータベースリソースの登録]()
- リソースタイプ「Database」を選択します。
- リソース名「MSSQL」と入力し、「OK」ボタンを押します。
※禁則文字(@、&、% 等)は使用できません。
![リソースタイプ「Database」]()
- 右ペインにデータベース接続のための詳細情報を入力します。
- 入力が終わったら画面下部の「検証」ボタンを押します。
![CSVをDBに取り込む]()
| 名 | 値 |
| DBMS | Microsoft SQL Serverを選択します |
| データベース名 | iBOLTTest |
| サーバ | .\SQLEXPRESS |
| ユーザ | sa |
| パスワード | mgtr |
※ご利用の環境にあわせて設定します。
- データベースへ接続できた場合は、設定を保存します。
- データベースへ接続できなかった場合は、設定を修正してください。
![CSVをDBに取り込む3]()
- ツールボックスから「データマッパー」をフローエリアにDrag&Dropします。
![「データマッパー」をフローエリアにDrag&Drop]()
- データマッパーを選択し、プロパティペインでステップ名を設定します。
![CSVをDBに取り込む]()
- マッパ画面が表示されます。
- 送り元にFlat FileをDrag&Dropし、プロパティペインで以下のように設定します。
![CSVをDBに取り込む]()
| 送り元タイプ | File |
| データ送り元エンコーティング | ANSI |
| ファイルパス ※次々頁参照 | EnvVal(‘currentprojectdir’)&’csv\input1.csv’ |
| 区切文字をデータに含める ※次頁参照 | No |
| 名 | CSV |
【区切文字をデータに含める】
- 区切文字(CSVの場合はカンマ)をデータに含める場合、その文字が区切文字なのか、それともデータの一部なのかを識別するために、データをダブルクォーテーションで囲う必要があります。
例)
Tokyo, Ohta,03-1111-2222 ← 3つのデータとして識別される
“Tokyo, Ohta”,”03-1111-2222″ ← 2つのデータとして識別される
- 送り元のデータがダブルクォーテーションで囲われている場合、送り元のプロパティ「区切文字をデータに含める」を「Yes」に設定します。
- 送り先のデータをダブルクォーテーションをつけて出力したい場合、送り先のプロパティ「区切文字をデータに含める」を「Yes」に設定します。
【式アシスター】
- ファイルパス右側の[…]ボタンをクリックすると「式アシスター」画面が表示されます。
- 各ボタンによる入力補助機能を使用して式を作成し、文法チェックを行うことができます。
![式アシスター]()
【式アシスターの環境変数ボタン】
- 式アシスター画面の環境変数ボタンを押し「currentprojectdir」をダブルクリックします。
- 環境変数の値を取得するEnvVal関数を使用した式が設定されます。
- 環境変数「currentprojectdir」の値は、現在のプロジェクトフォルダのパスです。
![式アシスターの環境変数ボタン]()
【フラットファイルの詳細設定】
- 詳細の右側の[…]ボタンをクリックし、フラットファイルの詳細設定画面を表示します。
![フラットファイルの詳細設定]()
- 送り先にDataBaseをDrag&Dropし、プロパティペインで以下のように設定します。
![CSVをDBに取り込む]()
【データベースウィザード】
- ウィザードの右側の[…]ボタンをクリックし、データベースウィザード画面を開きます。
![データベースウィザード]()
【テーブルの選択】
- 「MSSQL商品マスター」を選択し「追加」ボタンで追加し、「次へ」ボタンを押下します。
![テーブルの選択]()
【列の選択】
- 「MSSQL商品マスター」を選択し「追加」ボタンで追加し、「次へ」ボタンを押下します。
![列の選択]()
【SQL文の自動生成】
![SQL文の自動生成]()
【マッピング】
![マッピング]()
【接続の仕方】
![接続の仕方]()
- 送り元の項目を右クリックし「接続」をクリック → 送り先の項目をクリック
![接続の仕方2]()
【接続の削除の仕方】
- 送り元の項目を右クリックし「接続を削除」をクリック
![接続の削除の仕方]()
- 送り元の親項目を右クリックし「全ての接続を削除」をクリック
![接続の削除の仕方]()
【ノード検索方法】
- 送り元や送り先のノードを、下記4つの方法を使用して検索できます。
| No | 検索方法 | 使用方法 | 入力例 | 検索結果 |
| 1 | 名前検索 | 名前を入力します。 | 取引先 | 「取引先」を含むノード |
| 2 | データタイプ検索 | 下記いずれかの記号を入力します。 セミコロン区切で複数指定するとOR条件で検索できます。 | <C> | 複合ノード | <D> | 日付型ノード | | <N> | 数値型ノード | <T> | 時刻型ノード | | <A> | 文字型ノード | <L> | 論理型ノード | | <B> | Blob型ノード | ; | OR条件 | | <N>;<A> | 数値型または文字型のノード |
| 3 | 接続済/未接続検索 | 下記いずれかの記号を入力します。 | <+> | 接続済みのノード |
| 4 | 正規表現検索 | <R>の後に正規表現を入力します。 | <R>[0-9] | 数字が含まれるノード |
【マッピングの詳細】
| 送り元(CSVファイル) | 送り先(MSSQLの商品マスタ) |
| Record | dbo.MSSQL商品マスター ※子ノードをマッピングすると自動的にマッピングされる |
| Name1 | MSSQL商品マスター.商品番号 |
| Name2 | MSSQL商品マスター.商品名 |
| Name3 | MSSQL商品マスター.販売価格 |
| Name4 | MSSQL商品マスター.在庫数量 |
| Name5 | MSSQL商品マスター.仕入先コード |
| Name6 | MSSQL商品マスター.作成日 |
| Name7 | MSSQL商品マスター.作成時刻 |
| Name8 | MSSQL商品マスター.更新日 ※マッピングせず「計算値」に式を設定(次頁) |
| Name9 | MSSQL商品マスター.更新時刻 ※マッピングせず「計算値」に式を設定(次頁) |
【式アシスターの関数ボタン】
- 式アシスターの関数ボタンを押すと、ドロップダウンリストに関数が表示されます。
- 関数をダブルクリックすると、式の中に関数が挿入されます。
![CSVをDBに取り込む]()
Date():システム日付取得
DStr(日付, 書式):日付型→文字型変換
Time():システム時刻取得
TStr(時刻, 書式):時刻型→文字型変換
| 送り先(MSSQLの商品マスタ) | 「計算値」に設定する式 |
| MSSQL商品マスター.更新日 | Date() |
| MSSQL商品マスター.更新時刻 | TStr(Time(), ‘HHMMSS’) |
【条件の指定】
- CSVの1行目が項目名の場合、そのレコードを読み飛ばす必要があります。
- このような場合は、レコードレベルのマッピングに条件を設定します。
![条件の指定]()
【式アシスターのソースノードボタン】
- 式アシスターのソースノードボタンを押すと、ソースノードを表す文字列が表示されます。
- ソースノードを表す文字列をダブルクリックすると、式に反映されます。
![式アシスターのソースノードボタン]()
![完成]()
【データベースのデータ確認】
- データベースのデータを確認するにはManagement Studioを使用します。
![データベースのデータ確認]()
【フローのデバッグ】
| デバッグの方法 | 実施手順 | 備考 |
| プロジェクトデバッグ | メニュー > デバッグxpi > デバッグ開始 | トリガが設定されている場合や サブフローがある場合はこの方法でデバッグ |
| フローデバッグ | ソリューションエクスプローラで フローを右クリックし「デバッグ」 | 特定のフローのみをデバッグ トリガがなくても自動起動でデバッグできる |
※いずれのデバッグ方法でも、停止手順(メニュー > デバッグxpi > デバッグ停止)は共通です。
- フローデバッグをしてみましょう。
- 「CSV→DB書込」フローを右クリックし、「デバッグ」をクリックします。
![フローデバッグ]()
![デバッグの実行中]()
【Magic モニタの起動】
- デスクトップのショートカットからMagic モニタを起動します。
![Magic モニタの起動]()
- 「アクティビティログ」タブでフローの実行状況を確認します。
![アクティビティログ]()
【データの確認】
- DBテーブルにレコードが追加されたことを確認します。
![データの確認]()
【デバッグの停止】
- デバッグを停止するにはメニュー > デバッグxpi > デバッグ停止をクリックします。
![デバッグの停止]()
7.7 メールを監視する
【仕様】
- メールボックスを監視します。
- メールを受信します。
- メールに添付されたCSVファイルを取り出します。
- CSVファイルの内容をデータベースに格納します。
【フロー完成イメージ】
![フロー完成イメージ]()
【受信用メールサーバリソースの登録】
- メニュー > プロジェクト > 設定をクリックします。
- 左ペインで「リソース」が選択されている状態で「追加」ボタンを押します。
![受信用メールサーバリソースの登録]()
- リソースタイプ「Email」を選択します。
- リソース名「MailReceive」と入力し、「OK」ボタンを押します。
※禁則文字(@、&、% 等)は使用できません。
![リソースタイプ「Email」を選択]()
- 右ペインに受信用メールサーバの詳細情報を入力します。
- 入力が終わったら画面下部の「検証」ボタンを押します。
![右ペインに受信用メールサーバの詳細情報]()
※ご利用の環境にあわせて設定します。
| 名 | 値 | 備考 |
| サーバタイプ | POP3 | |
| 受信メールサーバ | localhost | POPサーバアドレス |
| 受信ポート番号 | (空白) | 受信用ポート番号(省略時は110) POP:110、 POP(Secure):995、 IMAP:143 IMAP(Secure):993 |
| 受信セキュア接続 | No | Yes, Noが選択可 |
| ユーザ | postmaster | POPサーバユーザ |
| パスワード | 12345 | POPサーバパスワード |
【受信用メールサーバサービスの登録】
- xpiで外部からのアクセスを受け付けるために、サービスを登録します。
- メニュー > プロジェクト > 設定をクリックします。
- 左ペインで「サービス」が選択されている状態で「追加」ボタンを押します。
![受信用メールサーバサービスの登録]()
- サービスタイプ「Email」を選択します。
- サービス名「MailTrigger」と入力し、「OK」ボタンを押します。
※禁則文字(@、&、% 等)は使用できません。
![サービスタイプ「Email」を選択]()
![右ペインにサービスの詳細情報を入力]()
| 名 | 値 |
| Email(リソース) | MailReceive |
| ポーリング間隔 | 5(秒) |
【フローの作成】
- ソリューションエクスプローラのビジネスプロセス「CSV→DB」を右クリックし、フローを追加します。
- 追加したフローの名前を「メール監視」に変更します。
![フローの作成]()
【メールトリガーの設定】
- 「メール監視」フローをダブルクリックし、フローエディタを開きます。
- ツールボックスから「Email」をトリガーエリアにDrag&Dropします。
![メールトリガーの設定]()
- Emailトリガーをダブルクリックすると設定画面が表示されます。
![Emailトリガーをダブルクリック]()
【受信メールの情報を変数に格納】
- ツールボックスからデータマッパをフローエリアにDrag&Dropします。
![受信メールの情報を変数に格納]()
- データマッパーをダブルクリックし、マッパ画面を表示します。
- 送り元に「XML」、送り先に「Variable」をDrag&Dropします。
![データマッパーをダブルクリック]()
【送り元の設定】
- 送り元を選択し、プロパティペインで送り元のプロパティを設定します。
![送り元の設定]()
【送り先の設定】
- 送り先を選択し、プロパティペインで送り先のプロパティを設定します。
![送り先の設定]()
【マッピング】
| 送り元 | 送り先 |
| AttachmentName (添付ファイルのファイル名) | C.UserString |
| AttachmentFile (添付ファイルの内容) | C.UserBlob |
【添付ファイルの復元】
- ツールボックスから「ファイル管理」コンポーネントをフローエリアにDrag&Dropします。
- プロパティペインでステップ名を「添付ファイル復元」に変更します。
![添付ファイルの復元]()
- 「ファイル管理」コンポーネントをダブルクリックし、設定画面を開きます。
- 「追加」ボタンを押し、「Write File」メソッドを選択します。
- 右ペインで「対象ファイル名」、「データ」を以下のように設定します。
![ファイル管理」コンポーネント]()
| 対象ファイル名 | EnvVal (‘currentprojectdir’) & ‘Output\’ & RepStr (C.UserString, ‘.csv’, ”) & ‘_’ & DStr (Date (), ‘YYYYMMDD’) & TStr (Time (), ‘HHMMSS’) & ‘.csv’ |
| データ | C.UserBlob |
【サブフローの呼び出し】
- ツールボックスから「フロー呼出」コンポーネントをフローエリアにDrag&Dropします。
![サブフローの呼び出し]()
- 「フロー呼出」コンポーネントをダブルクリックし、設定画面を開きます。
- フローID右側の[…]ボタンを押下し、フローリストを表示します。
- 表示されたフローリストから「CSV→DB書込(BP:CSV→DB)」を選択します。
![「フロー呼出」コンポーネント]()
【(参考)フロー変数の受け渡し】
- 呼び出し元フローと呼び出し先フローで、フロー変数の値を受け渡すことができます。
![(参考)フロー変数の受け渡し]()
「F.親フローの変数」の値が、「F.子フローの変数」にコピーされます。
子フロー側で「F.子フローの変数」の値を更新しても、「F.親フローの変数」には反映されません。
「F.親フローの変数」の値は、「F.子フローの変数」にコピーされません。
子フロー側で「F.子フローの変数」の値を更新すると、「F.親フローの変数」に反映されます。
「F.親フローの変数」の値が、「F.子フローの変数」にコピーされます。
子フロー側で「F.子フローの変数」の値を更新すると、「F.親フローの変数」に反映されます。
【フローの修正】
- 「CSV→DB書込」フローをダブルクリックし、フローエディタを開きます。
- データマッパをダブルクリックして、マッパ画面を表示します。
![フローの修正]()
- 送り元のプロパティにて、送り元タイプをFileからVariableに変更します。
- 変数欄の[…]ボタンを押し、変数一覧から「C.UserBlob」を選択します。
![送り元のプロパティ]()
![フローの作成は終了]()
【データ削除】
- デバッグを行う前に、商品マスターのデータを削除しておきます。
![データ削除]()
【ブレイクポイントの設定】
- ステップにブレイクポイントを設定すると、そのステップでデバッグが止まります。
- デバッグ停止中の各変数の値を確認することができます。
- 「メール監視」フローのデータマッパーにブレイクポイントを設定します。
![ブレイクポイントの設定]()
【プロジェクトデバッグ】
- 今回のフローはトリガーやサブフローがあるのでプロジェクト全体をデバッグします。
- メニュー > デバッグxpi > デバッグ開始をクリックします。
![プロジェクトデバッグ]()
【メール送信】
- Mozilla Thunderbirdを起動して、メールを送信します。
![メール送信]()
- デバッガがブレイクポイントで停止します。
- メニュー > デバッグxpi > コンテキストビューをクリックします。
![デバッガがブレイクポイント]()
【変数内容の確認】
- コンテキストビューで、その時点での各変数の内容を確認します。
![変数内容の確認]()
- コンテキストツリーを右クリックし「継続」をクリックして、デバッグを再開します。
![コンテキストツリーを右クリックし「継続」]()
【Magic モニタの確認】
![Magic モニタの確認]()
【データの確認】
- DBテーブルにレコードが追加されたことを確認します。
![データの確認]()
【ファイルの確認】
- ファイルが作成されたことを確認します。
- メニュー > デバッグxpi > デバッグ停止でデバッグを停止します。
![ファイルの確認]()