ヘッダーをスキップ
Oracle Business Activity Monitoring Architectユーザーズ・ガイド
10g(10.1.3.1.0)
B31882-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 エンタープライズ・メッセージ・ソース

この章では、エンタープライズ・メッセージ・ソースの作成および管理に必要な情報について説明します。

この章の内容は次のとおりです。

3.1 エンタープライズ・メッセージ・ソースの概要

エンタープライズ・メッセージ・ソースは、エンタープライズを介してActive Data Cacheに送信されるリアルタイム情報のプロバイダです。 各エンタープライズ・メッセージ・ソースは特定のメッセージ・キューに接続され、Active Data Cacheのデータ・オブジェクトに情報が配信されます。データ・オブジェクトはレポートで使用され、そのデータはユーザーによって表示されます。

エンタープライズ・メッセージ・ソースは、定義後、Active Data Cache内のデータ・オブジェクトに情報をロードするためのプランに含めることができます。

3.2 エンタープライズ・メッセージ・ソースの表示

既存のエンタープライズ・メッセージ・ソースを表示するには、次の手順を実行します。

図3-1 Architectの機能リスト

Architectの機能リスト
「図3-1 Architectの機能リスト」の説明

3.3 エンタープライズ・メッセージ・ソースの定義

この項の内容は次のとおりです。

エンタープライズ・メッセージ・ソースを定義する場合は、受信するメッセージ内のすべてのフィールドを指定します。 可変数のユーザー定義のフィールドが含まれているメッセージ・システムも、固定数のフィールドが含まれているシステムもあります。

文字列型フィールドの場合、そのフィールドに書式設定を適用して、プランのデータ・フローを介して送信する個別のフィールドにそのフィールドのコンテンツを分割できます。 これは、ユーザー定義のフィールドを作成できないため、メッセージ本文全体が1つの大きなフィールドとして受信されるメッセージ・システムで有効です。書式設定仕様を使用すると、XMLツリー内の場所のパスを指定した後、属性またはタグをフィールドとして抽出できます。

エンタープライズ・メッセージ・ソースを定義する前に、Architectでメッセージ・ソース接続の詳細を指定できるように、メッセージを提供するサード・パーティ・アプリケーションについて理解しておく必要があります。

エンタープライズ・メッセージ・ソースを定義するには、次の手順を実行します。

  1. Architectの機能リストから「Enterprise Message Sources」を選択します。

  2. 「Create」をクリックします。

  3. 右側のフレーム内のリストからエンタープライズ・メッセージ・ソースのタイプを選択し、「Select」をクリックします。

  4. エンタープライズ・メッセージ・ソースの名前を入力します。

  5. 設定については、次のいずれかの項を参照してください。

  6. すべてのタイプに対して、含めるデータフロー名、データ型、最大サイズおよび初期設定を指定します。書式設定は、列値がタグまたは属性に含まれているXMLまたは書式設定なしに設定できます。XSL Transformationを使用した拡張書式設定については、「拡張書式設定の使用」を参照してください。

3.3.1 Oracle(AS JMSおよびOJMS)設定の指定

Oracle(AS JMSおよびOJMS)設定には、次のものが含まれます。

  • Initial Context Factory:

    10.1.3の場合: oracle.j2ee.rmi.RMIInitialContextFactory

    10.1.2の場合: com.evermind.server.rmi.RMIInitialContextFactory

  • JNDI Service Provider URL:
    スタンドアロンのoc4jの場合: ormi://machine_name/(ここで、machine_nameはOC4Jがインストールされているホスト)
    本番用のApplication Serverの場合: opmn:ormi://<machine_name>:<opmn request port>:home(ここで、machine_nameはApplication Serverがインストールされているホストであり、opmn request portは<App server install location>/opmn/confにあるopmn.xmlで検出可能)

  • TopicConnectionFactory Name: java:comp/resource/BAMTTT/TopicConnectionFactories/bam_ttq_tab

  • Topic Name: java:comp/resource/BAMTTT/Topics/bam_ttq

  • JMS Message Type: TextMessage

  • Durable Subscriber Name: BAMFilteredSubscription

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: ClientID

3.3.2 BEA WebLogic Server設定の指定

BEA WebLogic Server設定には、次のものが含まれます。

  • Initial Context Factory: 使用するコンテキスト・ファクトリ(weblogic.jndi.WLInitialContextFactoryなど)。

  • JNDI Service Provider URL: ファイル・パスまたはURL(t3://localhost:6733など)。

  • TopicConnectionFactory Name: トピックの接続ファクトリ(JMSConnectionFactoryなど)。

  • Topic Name: トピック名(JMSTopicなど)。

  • JMS Message Type: BytesMessage、MapMessage、ObjectMessage、StreamMessage、TextMessageなどのメッセージ・タイプを選択します。

  • Durable Subscriber Name: サブスクライバの名前(BAMFilteredSubscriptionなど)。

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: クライアントID(BAMFilteredClientIDなど)。

3.3.3 IBM WebSphere MQ設定の指定

IBM WebSphere MQ設定には、次のものが含まれます。

  • Initial Context Factory: 使用するコンテキスト・ファクトリ(com.sun.jndi.fscontext.RefFSContextFactoryなど)。

  • JNDI Service Provider URL: ファイル・パスまたはURL(file:/C:/JNDI-Directoryなど)。

  • TopicConnectionFactory Name: トピックの接続ファクトリ(ivtTCFなど)。

  • Topic Name: トピック名(ivtTなど)。

  • JMS Message Type: BytesMessage、MapMessage、ObjectMessage、StreamMessage、TextMessageなどのメッセージ・タイプを選択します。

  • Durable Subscriber Name: サブスクライバの名前(BAMFilteredSubscriptionなど)。

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: クライアントID(BAMFilteredClientIDなど)。

3.3.4 Microsoft MSMQ設定の指定

Microsoft MSMQ設定には、次のものが含まれます。

  • Queue name: MSMQキュー名(horus\retail_queueなど)を入力します。

  • Message body character encoding: Unicode UTF-8、UTF-16、UTF-7またはASCIIを選択します。

  • Look for byte order marks at start of message body: 「Yes」または「No」を選択します。

フィールド名は、「ID」、「Arrival Time」、「Label」および「Data」としてすでに定義されています。書式設定のタイプを選択する場合は、行などのパス、各アイテムのタグ名または属性名、データフロー内の名前および最大サイズを指定する必要があります。

データベース・トリガーおよびWebサービスを使用すると、Microsoft MSMQを使用してデータをADCに送信できます。詳細は、次のURLを参照してください。

http://<host>:<http_port>/oraclebam/Services/EnterpriseLink/EnterpriseLink.asmx

トリガーを使用する場合、サービスが含まれているディレクトリでは、IISに匿名アクセスまたは基本認証が設定されている必要があります。

次の例に、このサービスを使用するOracleデータベース・トリガーの一部を示します。

utl_http.request(http://host/oraclebam/services/enterpriselink/
 enterpriselink.asmx/SendToMSMQ?strQueueName=private$\OracleTriggerTest&strData= '<?xmlversion="1.0"?><row><fname>'||fname||'</fname><lname>'
||lname||'</lname><title>'||title||'</title><location>'||location||
 '</location></row>'&strLabel='' HTTP/1.1);
End;

Internet Explorerには、POSTおよびGETリクエストのURLにも適用されるURLの最大長(2,048文字)があります。GETメソッドを使用する場合、この制限には実際のパスの文字数が含まれます。名前/値ペアの送信時には、POSTのURLのサイズに制限はありません。名前/値ペアは、URLではなくヘッダーで転送されるためです。

3.3.5 See Beyond JMS Intelligent Queue設定の指定

See Beyond JMS Intelligent Queue設定には、次のものが含まれます。

  • Initial Context Factory: 使用するコンテキスト・ファクトリ(com.sun.jndi.fscontext.RefFSContextFactoryなど)。

  • JNDI Service Provider URL: ファイル・パスまたはURL(file:/C:/JNDI-Directoryなど)。

  • TopicConnectionFactory Name: トピックの接続ファクトリ(ivtTCFなど)。

  • Topic Name: トピック名(ivtTなど)。

  • JMS Message Type: BytesMessage、MapMessage、ObjectMessage、StreamMessage、TextMessageなどのメッセージ・タイプを選択します。

  • Durable Subscriber Name: サブスクライバの名前(BAMFilteredSubscriptionなど)。

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: クライアントID(BAMFilteredClientIDなど)。

3.3.6 Sonic MQ設定の指定

Sonic MQ設定には、次のものが含まれます。

  • Initial Context Factory: 使用するコンテキスト・ファクトリ(com.sun.jndi.fscontext.RefFSContextFactoryなど)。

  • JNDI Service Provider URL: ファイル・パスまたはURL(file:/C:/JNDI-Directory_SonicMQなど)。

  • TopicConnectionFactory Name: トピックの接続ファクトリ(sonicTCFなど)。

  • Topic Name: トピック名(sonicTなど)。

  • JMS Message Type: BytesMessage、MapMessage、ObjectMessage、StreamMessage、TextMessageなどのメッセージ・タイプを選択します。

  • Durable Subscriber Name: サブスクライバの名前(BAMFilteredSubscriptionなど)。

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: クライアントID(BAMFilteredClientIDなど)。

3.3.7 Tibco Rendezvous設定の指定

Tibco Rendezvous設定には、次のものが含まれます。

  • Initial Context Factory: 使用するコンテキスト・ファクトリ(com.tibco.tibjms.naming.TibjmsInitialContextFactoryなど)。

  • JNDI Service Provider URL: ファイル・パスまたはURL(tibjmsnaming://localhost:7222など)。

  • TopicConnectionFactory Name: トピックの接続ファクトリ(TopicCFなど)。

  • Topic Name: トピック名(Topicなど)。

  • JMS Message Type: BytesMessage、MapMessage、ObjectMessage、StreamMessage、TextMessageなどのメッセージ・タイプを選択します。

  • Durable Subscriber Name: サブスクライバの名前(BAMFilteredSubscriptionなど)。

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: クライアントID(BAMFilteredClientIDなど)。

3.3.8 WebMethods設定の指定

WebMethods設定には、次のものが含まれます。

  • Initial Context Factory: 使用するコンテキスト・ファクトリ(com.sun.jndi.fscontext.RefFSContextFactoryなど)。

  • JNDI Service Provider URL: ファイル・パスまたはURL(file:/C:/JNDI-Directoryなど)。

  • TopicConnectionFactory Name: トピックの接続ファクトリ(ivtTCFなど)。

  • Topic Name: トピック名(ivtTなど)。

  • JMS Message Type: BytesMessage、MapMessage、ObjectMessage、StreamMessage、TextMessageなどのメッセージ・タイプを選択します。

  • Durable Subscriber Name: サブスクライバの名前(BAMFilteredSubscriptionなど)。

  • Message Selector: メッセージ・セレクタ(BAMFilter='true'など)。

  • Client ID: クライアントID(BAMFilteredClientIDなど)。

3.3.9 拡張書式設定の使用

拡張書式設定オプションによって、エンタープライズ・メッセージ・ソースに、メッセージ内の書式設定された各フィールドに対するユーザー指定のXSL Transformation(XSLT)を含めることができます。

XSL Transformationは、次の目的で使用されます。

  • 階層データの処理:データ・フローでは、階層データは処理されません。XSL Transformationによって、受信したXMLを繰返しフィールドが含まれている単一のレコードにフラット化できます。

  • 単一のキュー内に複数のタイプのメッセージが含まれているメッセージ・キューの処理:データ・フローでは、Message Receiverからのすべてのレコードは同じスキーマのものである必要があります。エンタープライズ・メッセージ・ソースは、受信するメッセージ・スキーマの結合スーパーセットとして定義できます。また、XSL Transformationによって、各メッセージ・タイプを識別して、必要に応じてこのスーパーセット・スキーマにマップできます。

  • データは階層では表されていないが、必要なデータが複数のレベルで含まれているXMLの処理: EMS書式設定では、XMLの1つのレベルのみから読取りを行うことができます。XSL Transformationによって、入力XML内の様々なレベルで必要なデータを識別し、すべてのデータが1つのレベルで結合される新しいXMLにすべてを出力できます。

  • プランに影響を及ぼさない、メッセージ書式設定への変更の処理:複雑なメッセージ処理のプランが存在し、メッセージまたはメッセージ内のデータの書式設定を少し変更した場合は、XSL Transformationによって、プランへの変更が必要なくなるようにこの変更を補正できます。

XSL Transformationを指定するには、次の手順を実行します。

  1. 定義中または編集中のエンタープライズ・メッセージ・ソースで、「Formatting」列のいずれかのXML書式設定オプションを選択します。

  2. 「Advanced formatting options」をクリックします。

    「Advanced Formatting」ダイアログ・ボックスが表示されます。

  3. このフィールドにXML変換用のXSLコードを入力するか、または貼り付けます。別の編集ツールでXSLを記述した後で、このダイアログ・ボックスにそのコードをコピーして貼り付けることができます。

  4. 「Sample XML to transform」フィールドに、変換をテストするためのサンプルXMLを入力します。サンプルXMLは、このダイアログ・ボックスには保存されません。このダイアログ・ボックスを閉じて開くと、サンプルXMLは表示されなくなります。

  5. 「Verify transformation syntax」をクリックしてXSL構文を確認します。

  6. 「Test transformation on sample XML」をクリックして変換をテストします。

    結果は、リンクの下のフィールドに表示されます。XSL構文内、サンプルXML構文内または変換時にエラーが検出された場合は、このフィールドにエラー・テキストが表示されます。

3.3.10 XSL処理およびサンプル・コード

3.3.10.1 サンプル・エンタープライズ・メッセージ・ソースでのXSL処理

Enterprise Message Receiver Transformでは、キューからメッセージを受信し、従来の行および列の書式設定に変換してデータ・フローに送信します。

階層データはサポートされていないため、データ・フロー内のレコードはフラット・レコードである必要があります。 Message Receiverでは、受信したメッセージごとに複数のデータ・フロー・レコードを生成できますが、すべてのレコードに同じスキーマが含まれている必要があります。

エンタープライズ・メッセージ・ソースの定義では、String型のメッセージ内のすべてのフィールドに書式設定仕様を指定して、文字列フィールド内のXMLを解析できます。通常、MSMQでは、メッセージの「Body」フィールドにそのメッセージのXMLが含まれています。

書式設定仕様によって、受信したXMLを1つ以上のレコードに変換する方法が示されます。データのフィールドは、XML内の特定の単一ノード・タイプ内に、そのノードの属性またはそのノードに直接含まれているタグのいずれかとして含まれていると想定しています。この書式設定で、ノードの複数のインスタンスを処理できますが、複数のノード・タイプおよびXML内の階層は処理できません。

次に、単純なメッセージの例を示します。

<order>
  <item>
    <description>Fuel pump</description>
    <price>128.95</price>
    <quantity>1</quantity>
  </item>
  <item>
    <description>Fuel filter</description>
    <price>12.95</price>
    <quantity>1</quantity>
  </item>
</order>

前述のメッセージで生成されるレコードは、次のようになります。

説明 価格
Fuel pump 128.95 1
Fuel filter 12.95 1

3.3.10.2 複雑なメッセージの処理

複雑なXMLの処理またはEnterprise Message Receiverでサポートされていない書式設定または解析を行うために、エンタープライズ・メッセージ・ソースにXSLT仕様を含め、受信したXMLがMessage Receiver書式設定に渡される前にこのXMLを事前に処理することができます。 この変換は複雑にでき、Microsoft .NET XSLT Processorでサポートされているすべてのコードを含めることができます。スクリプト化もできます。受信したString型のメッセージ内のすべてのフィールドにXSLTプリプロセッサを含めることができます。MSMQの場合、通常、これはメッセージの「Body」フィールドです。

XSLTコードは、様々な用途で使用できます。この例では、階層メッセージXMLを、書式設定によって処理できるより単純なXMLに変換するために使用されています。通常、これは、階層メッセージを複数のレコードにフラット化することを意味します。これらの複数のレコードでは、高レベルのフィールド値が繰り返されます。

Phoenix Debt Orderメッセージ

これらのメッセージ内のXMLは、階層で表されています。各メッセージに、ルートのPhoenixDebtOrderタグが含まれています。PhoenixDebtOrderタグには、1つ以上のPhoenixDebtOrderProductタグが含まれています。PhoenixDebtOrderProductタグには、それぞれ1つ以上のPhoenixDebtOrderIOIタグが含まれています。

<PhoenixDebtOrder attr1 attr2>
  <PhoenixDebtOrderProduct attr3 attr4>
    <PhoenixDebtOrderIOI attr5 attr6>

各レベルの値は、タグの属性に含まれています。

XSL Transformationの目的は、親タグの値を各インスタンスで繰り返して、前述の階層を各PhoenixDebtOrderIOIノード用のノードが含まれているフラットな構造に変換することです。

<PhoenixDebtOrder>
  <Flat attr1 attr2 attr3 attr4 attr5 attr6>

XSLでは、属性名が各レベルで異なっていること、または属性名が異なっていない場合は属性名で同じ情報が表され、属性名を繰り返す必要がないことが前提となっています。

XSLでは、各レベルのすべての属性に対する汎用コピーが作成され、特定の属性名は参照されません。いずれかのレベルで属性が追加または削除された場合でも、XSLコードを変更する必要はありません。ただし、この場合、エンタープライズ・メッセージ・ソースの書式設定を変更する必要があります。

3.3.10.3 Phoenix Debt Orderの例

次に、Phoenix Debt Orderメッセージの例を示します。

<PhoenixDebtOrder ord_id="1847494630" rgn_id="0"
 last_modified_dt="2003-06-23T16:56:35.900" ae_up_id="0" deleted_ind="0"
 iss_id="1847492081" brk_id="1877504017" inst_inv_id="0" swap_ind="0"
 identity_nm="">
<PhoenixDebtOrderProduct ord_id="1847494630" prd_id="1847494611"
 price_basis="spread" ioi_ccy_id="1847483827" canceled_ind="0" inst_alloc_qty=""
 ret_alloc_qty="">
<PhoenixDebtOrderIOI ord_ioi_id="1847558620" ord_id="1847494630"
 ioi_prd_id="1847494611" ioi_size="4770000000" ioi_px="14.123512"/>
<PhoenixDebtOrderIOI ord_ioi_id="1847558621" ord_id="1847494630"
 ioi_prd_id="1847494611" ioi_size="5540000000" ioi_px="15.252500"/>
<PhoenixDebtOrderIOI ord_ioi_id="1847558619" ord_id="1847494630"
 ioi_prd_id="1847494611" ioi_size="3330000000" ioi_px="12.500000"/>
</PhoenixDebtOrderProduct>
<PhoenixDebtOrderProduct ord_id="1847494630" prd_id="1847494612"
 price_basis="spread" ioi_ccy_id="1847483827" canceled_ind="0" inst_alloc_qty=""  ret_alloc_qty="">
<PhoenixDebtOrderIOI ord_ioi_id="1847558620" ord_id="1847494630"
 ioi_prd_id="1847494612" ioi_size="5880000000" ioi_px="14.124512"/>
<PhoenixDebtOrderIOI ord_ioi_id="1847558621" ord_id="1847494630"
 ioi_prd_id="1847494612" ioi_size="4430000000" ioi_px="12.252500"/>
</PhoenixDebtOrderProduct>
</PhoenixDebtOrder>

次に、前述の例で生成される変換済XMLを示します。

<PhoenixDebtOrder>
<Flat ord_id="1847494630" rgn_id="0"
 last_modified_dt="2003-06-23T16:56:35.900" ae_up_id="0" deleted_ind="0"
 iss_id="1847492081" brk_id="1877504017" inst_inv_id="0" swap_ind="0"
 identity_nm="" prd_id="1847494611" price_basis="spread" ioi_ccy_id="1847483827"
 canceled_ind="0" inst_alloc_qty="" ret_alloc_qty="" ord_ioi_id="1847558620"
 ioi_prd_id="1847494611" ioi_size="4770000000" ioi_px="14.123512"/>
<Flat ord_id="1847494630" rgn_id="0"
 last_modified_dt="2003-06-23T16:56:35.900" ae_up_id="0" deleted_ind="0"
 iss_id="1847492081" brk_id="1877504017" inst_inv_id="0" swap_ind="0"
 identity_nm="" prd_id="1847494611" price_basis="spread" ioi_ccy_id="1847483827"
 canceled_ind="0" inst_alloc_qty="" ret_alloc_qty="" ord_ioi_id="1847558621"
 ioi_prd_id="1847494611" ioi_size="5540000000" ioi_px="15.252500"/>
<Flat ord_id="1847494630" rgn_id="0"
 last_modified_dt="2003-06-23T16:56:35.900" ae_up_id="0" deleted_ind="0"
 iss_id="1847492081" brk_id="1877504017" inst_inv_id="0" swap_ind="0"
 identity_nm="" prd_id="1847494611" price_basis="spread" ioi_ccy_id="1847483827"
 canceled_ind="0" inst_alloc_qty="" ret_alloc_qty="" ord_ioi_id="1847558619"
 ioi_prd_id="1847494611" ioi_size="3330000000" ioi_px="12.500000"/>
<Flat ord_id="1847494630" rgn_id="0"
 last_modified_dt="2003-06-23T16:56:35.900" ae_up_id="0" deleted_ind="0"
 iss_id="1847492081" brk_id="1877504017" inst_inv_id="0" swap_ind="0"
 identity_nm="" prd_id="1847494612" price_basis="spread" ioi_ccy_id="1847483827"
 canceled_ind="0" inst_alloc_qty="" ret_alloc_qty="" ord_ioi_id="1847558620"
 ioi_prd_id="1847494612" ioi_size="5880000000" ioi_px="14.124512"/>
<Flat ord_id="1847494630" rgn_id="0"
 last_modified_dt="2003-06-23T16:56:35.900" ae_up_id="0" deleted_ind="0"
 iss_id="1847492081" brk_id="1877504017" inst_inv_id="0" swap_ind="0"
 identity_nm="" prd_id="1847494611" price_basis="spread" ioi_ccy_id="1847483827"
 canceled_ind="0" inst_alloc_qty="" ret_alloc_qty="" ord_ioi_id="1847558621"
 ioi_prd_id="1847494612" ioi_size="4430000000" ioi_px="12.252500"/>
</PhoenixDebtOrder>

3.3.10.4 順序番号

SequenceNumberと呼ばれる単一のパラメータがMessage Receiver TransformからXSL Transformationに渡されます。これは、1から始まり、メッセージが受信されるたびに増分する整数です。この番号は、元の単一メッセージに対して生成されるレコードのセットの識別、またはXSLコードで必要なその他の目的に使用できます。

この場合、XSLコードでは、単一メッセージに対して生成されるレコードのセットの識別にこの番号を使用しますが、その目的は特殊なものです。

その目的とは、サブプラン用の「Iterate each time a key field changes value」オプションを使用して、単一メッセージによってレコードのセットが生成されるたびに、データ・フロー内の反復サブプランを1回反復することです。XSLでは、データ・フロー・レコード内の順序番号が「seq_no」というフィールドとして渡されます。これは、サブプランの反復に使用されるキー・フィールドです。

サブプランは、キー値が変更されるまで実際には反復されません。サブプランがグループ・トランザクション機能を使用して最初から最後まで反復されるまで変更はコミットされないため、メッセージとメッセージの間に時間の途切れがあると、現行のメッセージの処理の完了は次のメッセージが受信されるまで遅延されます。この問題を解決するために、XSLでは、各メッセージのレコードのセットの最後に追加の仮レコードが常に生成されます。順序番号は1ずつ増分されるため、MSMQのメッセージIDの場合とは異なり、XSLでは、次の順序番号を予測できます。XSLでは、次のメッセージで使用される順序番号を使用できます。データ・フローには、仮レコードを認識して無視するロジックが含まれています。仮レコードは、dummyというord_id属性値で表されています。

3.3.10.5 XSLTコード

例3-1に、エンタープライズ・メッセージ・ソースに含まれているXSLTコードを示します。

例3-1 エンタープライズ・メッセージ・ソースのXSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="SequenceNumber"/>
  <xsl:output method="xml" omit-xml-declaration="yes"/>
  <xsl:template match="/">
    <PhoenixDebtOrder>
      <xsl:choose>
        <xsl:when test="PhoenixDebtOrder">
          <xsl:apply-templates select="PhoenixDebtOrder"/>
        </xsl:when>
        <xsl:otherwise>
          <!-- There is no root PhoenixDebtOrder tag -->
          <!-- Generate a tag with no attribute values -->
          <Flat>
            <xsl:attribute name="seq_no">
            <xsl:value-of select="$SequenceNumber"/></xsl:attribute>
          </Flat>
        </xsl:otherwise>
      </xsl:choose>
      <!-- Dummy row, always generated at the end, with the sequence number
           that the next set of rows will have. Used to cause the SubPlan
           to iterate immediately after the receipt of all rows for this order-->
      <Flat ord_id="Dummy">
        <xsl:attribute name="seq_no">
        <xsl:value-of select="$SequenceNumber + 1"/></xsl:attribute>
      </Flat>
    </PhoenixDebtOrder>
  </xsl:template>
  <xsl:template match="PhoenixDebtOrder">
    <xsl:choose>
      <xsl:when test="PhoenixDebtOrderProduct">
        <xsl:apply-templates select="PhoenixDebtOrderProduct"/>
      </xsl:when>
      <xsl:otherwise>
        <!-- There are no products -->
        <!-- Generate a tag with only the attributes from the root
             PhoenixDebtOrder tag -->
        <Flat>
          <xsl:for-each select="@*">
            <xsl:copy-of select="."/>
          </xsl:for-each>
          <xsl:attribute name="seq_no">
          <xsl:value-of select="$SequenceNumber"/></xsl:attribute>
        </Flat>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  <xsl:template match="PhoenixDebtOrderProduct">
    <xsl:choose>
      <xsl:when test="PhoenixDebtOrderIOI">
        <xsl:apply-templates select="PhoenixDebtOrderIOI"/>
      </xsl:when>
      <xsl:otherwise>
        <!-- This product has no IOIs -->
        <!-- Generate a tag with only the attributes from the root
             PhoenixDebtOrder tag and the parent PhoenixDebtOrderProductTag -->
        <Flat>
          <xsl:for-each select="../@*">
            <xsl:copy-of select="."/>
          </xsl:for-each>
          <xsl:for-each select="@*">
            <xsl:copy-of select="."/>
          </xsl:for-each>
          <xsl:attribute name="seq_no">
          <xsl:value-of select="$SequenceNumber"/></xsl:attribute>
        </Flat>
        <!-- Add a linebreak to the output XML, just for appearance -->
        <xsl:text disable-output-escaping="yes">&#10;</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  <xsl:template match="PhoenixDebtOrderIOI">
    <Flat>
      <!-- Root PhoenixDebtOrder attributes -->
      <xsl:for-each select="../../@*">
        <xsl:copy-of select="."/>
      </xsl:for-each>
      <!-- PhoenixDebtOrderProduct attributes -->
      <xsl:for-each select="../@*">
        <xsl:copy-of select="."/>
      </xsl:for-each>
      <!-- PhoenixDebtOrderIOI attributes -->
      <xsl:for-each select="@*">
        <xsl:copy-of select="."/>
      </xsl:for-each>
      <xsl:attribute name="seq_no">
      <xsl:value-of select="$SequenceNumber"/></xsl:attribute>
    </Flat>
    <!-- Add a linebreak to the output XML, just for appearance -->
    <xsl:text disable-output-escaping="yes">&#10;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

3.4 エンタープライズ・メッセージ・ソースの編集

エンタープライズ・メッセージ・ソースを編集するには、次の手順を実行します。

  1. Architectの機能リストから「Enterprise Message Sources」を選択します。

  2. エンタープライズ・メッセージ・ソースの名前をクリックします。

    メッセージ・ソース・プロパティが表示されます。

  3. 「Edit」をクリックします。

  4. 変更を行い、「Save」をクリックします。

3.5 エンタープライズ・メッセージ・ソースのコピー

エンタープライズ・メッセージ・ソースをコピーするには、次の手順を実行します。

  1. Architectの機能リストから「Enterprise Message Sources」を選択します。

  2. コピーするエンタープライズ・メッセージ・ソースの名前をクリックします。

    メッセージ・ソース・プロパティが表示されます。

  3. 「Copy」をクリックします。

  4. エンタープライズ・メッセージ・ソースのコピーに新しい名前を入力し、「Copy」をクリックします。

    新しいメッセージ・ソースが作成され、リストに追加されます。

3.6 エンタープライズ・メッセージ・ソースの削除

エンタープライズ・メッセージ・ソースを削除するには、次の手順を実行します。

  1. Architectの機能リストから「Enterprise Message Sources」を選択します。

  2. 削除するエンタープライズ・メッセージ・ソースの名前をクリックします。

    メッセージ・ソース・プロパティが表示されます。

  3. 「Delete」をクリックします。

  4. 「OK」をクリックして、メッセージ・ソースを削除することを確認します。

    メッセージ・ソースが削除されます。