# データサービスコンシューマーを作成

コンシューマーを作成するためには、少なくとも次のコンポーネントが必要です:

* データフローを読み取るための入力コンポーネントを
* このフラットデータを階層型ドキュメント(ESBコンポーネントが期待している形式)にマッピングするtXMLMapコンポーネント
* 対応するウェブサービスをリクエストし、その結果を読み取るtESBConsumerコンポーネント
* ジョブ実行の結果を表示させるtLogRowコンポーネント

この特定のシナリオでは、tESBConsumerコンポーネントに国コードの要求を送信するための入力コンポーネントとして、tFixedFlowInputを使用します。

## データサービスコンシューマージョブの作成

### 手順

1. [Repository] (リポジトリー)ツリービューで[Job Designs] (ジョブデザイン)を右クリックし、[Create Job] (ジョブを作成) を選択します。
2. 表示されるダイアログボックスでは、最初のフィールド[Name] (名前)のみが必須です。「*airportJob*」と入力し、[Finish] (終了)をクリックします。メインウィンドウに空白のジョブが開き、引き続き目的のジョブを作成できます。

## コンシューマーにコンポーネントをドロップしてリンク

### 手順

1. [Palette] (パレット)の[Misc] (その他)コンポーネントグループでtFixedFlowInputコンポーネントをクリックします。次にデザインワークスペースの左側をクリックして、デザインエリアにこのコンポーネントを挿入します。
2. 同じ手順で、各グループから[Palette] (パレット)にtXMLMap、tESBConsumer、tLogRowというコンポーネントを配置します。
3. 入力コンポーネントをマッパーにリンクするには、tFixedFlowInputを右クリックし、それをクリックしたままtXMLMapにドロップします。
4. tXMLMapをtESBConsumerにリンクするには、tXMLMapを右クリックし、それをクリックしたままtESBConsumerにドラッグします。ポップアップウィンドウが開いたら、出力行リンクに付ける名前(requestなど)を入力します。次に、tESBConsumerからスキーマを取得するように指示するプロパゲーションを受け入れます。
5. [Response]行リンクを使って、tESBConsumerコンポーネントをtLogRowにリンクします。

   データサービスコンシューマーのジョブは次の図のようになります:

   ![デザインワークスペース内のジョブのスクリーンショット。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-service_consumer.png)

### タスクの結果

次に各コンポーネントを設定する必要があります。

## tFixedflowInputコンポーネントを設定

### 手順

1. tFixedFlowInputをダブルクリックし、その[Component] (コンポーネント)ビューを開きます。

   ![\[Basic settings\] (基本設定)ビュー。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-input_string.png)
2. [Edit schema] (スキーマを編集)フィールドの横にある[...]ボタンをクリックし、[Schema] (スキーマ)を開きます。

   ![\[Schema\] (スキーマ)ウィンドウ。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-input_schema.png)
3. [+]ボタンを1回クリックし、スキーマに1つのカラムを追加し、country\_codeと名前を付けます。[Type] (タイプ)フィールドはstringのままにしておきます。
4. [OK]をクリックして、このスキーマを確定します。tFixedFlowInputのBasic Settings (基本設定)の[Mode] (モード)エリアで、[Use Single Table] (シングルテーブルの使用)が有効なオプションになり、[Values] (値)テーブルにcountry\_code行が自動的に追加されています。
5. [Values] (値)テーブルの[Values] (値)カラムで、CNに引用符を付けて入力します。

## tXMLMapコンポーネントの設定

### 手順

1. tXMLMapをダブルクリックし、[Map Editor] (マップエディター)を開きます。

   ![\[Map Editor\] (マップエディター)。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-xmlmap_consumer.png)
2. 要求に対するWSDLスキーマをインポートするには、データサービスプロバイダーを作成した時と同じ手順を実行します。この例では、要求スキーマは*getAirportInformationByISOCountryCode*です。詳細は、[tXMLMapの設定](https://help.qlik.com/talend/ja-JP/data-service-route-example/8.0/configuring-txmlmap)をご覧ください。
3. 入力側(左)のメインフローテーブルでcountry\_codeをクリックし、その状態で[Expression] (式)カラムにドロップします。これは、出力側(右)のXMLツリービューの*tns:CountryAbbrviation*ノードに対応しています。

   情報メモ注: 実際には、tXMLMapを使って階層データの非常に複雑な変換を処理できます。

   tXMLMapの使用可能な全機能については、[tXMLMapの操作](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/txmlmap-operation)をご覧ください。
4. [OK]をクリックして、この設定を有効にします。

## tESBConsumerコンポーネントの設定

### 手順

1. tESBConsumerコンポーネントをダブルクリックし、その[Component] (コンポーネント)ビューを開きます。

   ![\[Basic settings\] (基本設定)ビュー。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-consumer.png)
2. [Service configuration] (サービス設定)フィールドの横にある[...]ボタンをクリックし、WSDLエディターを開きます。
3. エディターで、提供されるWSDLファイルを参照して探します。[Port Name] (ポート名)フィールドと[Operation] (操作)フィールドには、ウェブサービスで利用可能なポートとメソッドが自動的に入力されます。

   ![WSDLエディター。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-service_config.png)
4. [Port Name] (ポート名)フィールドでairportSoapを選択し、[Operation] (オペレーション)フィールでgetAirportInformationByISOCountryCodeを選択します。
5. [OK]をクリックして、設定を有効にします。

   tLogRowコンポーネントにより、前のコンポーネントからスキーマが自動的に取得されます。取得されない場合は、コンポーネントをダブルクリックし、その[Component] (コンポーネント)ビューの[Sync columns] (カラムを同期)ボタンをクリックします。

## コンシューマージョブの実行

### 手順

ジョブを実行するにはF6を押します。

[Run] (実行)ビューが開き、実行結果が表示されます。

![ジョブの実行に成功した後のコンソール結果のスクリーンショット。](https://help.qlik.com/talend/ja-JP/data-service-route-example/Resources/images/esb-best_practice-consumer_response.png)

### タスクの結果

ジョブはコンシューマーに1つの国コード要求を送信し、プロバイダーのジョブを通じてウェブサービスを要求します。応答は、tESBProviderResponseコンポーネントとtESBConsumerコンポーネントで同時に取得されます。

プロバイダーのジョブが要求を受信しても、そのジョブは停止せず、新しい要求のリスニングを続けます。