第7章
これまでの章では、XMLテンプレートおよび入力と出力にテンプレートを使用するXMLマップコンポーネントの作成方法について説明しました。 この章では、実際に行う作業について説明します。ここからはアクションが登場します。
注記: この章では、XMLコンポーネントで使用できる基本的なアクションについて説明します。次の章では、より強力なアクションを、また、では、これらのアクションをいくつか使用した詳細な例について取り扱います。
「アクション」は、プログラミングステートメントに類似しており、パラメータの形式で入力を受け付け、特定のタスクを実行します。 たとえば、メールの送信アクションでは、受信者の電子メールアドレスをパラメータの1つとして入力することにより、電子メールが送信されます。
個々のアクションについて学ぶ前に、まずexteNdのアクションモデルを理解する必要があります。これまでの章で、コンポーネントは、XMLドキュメントを処理したり、XML以外のデータソースと通信したりするための手順のセットであるということを説明しました。この手順のセットは「アクションモデル」と呼ばれます。Composerでは、アクションモデルは、データマッピング、データ変換、およびコンポーネントとサービス内でのデータ転送をすべて実行します。
アクションモデルは、アクションのリストから構成されています。アクションモデル内のすべてのアクションは相互に機能します。たとえば、あるコンポーネントのアクションモデルでは、請求書のデータをディスクから読み取り、電子メールアドレスを請求書から取得し、請求書が受信されたことを通知する電子メールメッセージを受信者に送信します。
このアクションモデルの例は、いくつかのアクションから構成されています。そのアクションは次のとおりです。
Composerでは、基本のXMLマップコンポーネントでアクションを実行します。これらのアクションは、JDBCコンポーネントやJMSコンポーネントなどの「他のすべてのコンポーネントタイプ」で使用できます。アクションは、[アクション]メニューで、基本的なアクションと高度なアクションに分けられています。 次の表は、Composerで使える基本的なアクションについて説明しています。 高度なアクションについては次の章で解説します。
新規アクションを作成する方法には次の4とおりがあります。
どちらの場合も、アクションを作成する前にコンポーネントを開く必要があります。
アクションモデルで、新しいアクションを配置したい場所のすぐ上の行でマウスをクリック(つまり、ハイライト表示または選択)します。選択した行の下に新しいアクションが挿入されます。
ダイアログボックスが表示されたら、必要に応じてアクションに関するパラメータを入力または選択します。(これらについては、後続のトピックで説明します。以降の説明を参照してください)。次に、該当する場合、ダイアログボックスを閉じます。
アクションの追加に加え、アクションモデルの既存のアクションを編集したり、無効にしたりすることもできます。無効にすると、そのアクションは実行できなくなりますが、アクションモデルにはそのまま保持されるため、あとで有効にすることもできます。
この章の残りの部分では、基本的なアクションとその使用方法の例を示します。
コメントアクションを使用すると、アクションモデルを記録して実行する処理を明確にすることができます。コメントはアクションモデル内のどこにでも追加できます。コメントそれ自体は処理を行いません。
コンポーネントアクションでは、指定したランタイムの入力と出力で別のコンポーネントまたはサービスを呼び出し、実行します。プロジェクト内のどのコンポーネントでも呼び出すことができます。別のコンポーネントを呼び出すには、アクションに対して次の4種類のパラメータを指定する必要があります。
[コンポーネントタイプ]には、呼び出すコンフリクトのカテゴリを指定します。コンポーネントタイプは、コンポーネントの見出しの付いた、Composerのカテゴリペインにリストされるタイプとは一致しません。次に挙げる文字列は有効な値であり、大文字小文字が区別されます。
これらは、そのコンポーネントタイプを実装する接続がインストールされているかどうかによって異なります。
[コンポーネント名]には、呼び出すコンポーネントまたはターゲットコンポーネントの名前を指定します。[コンポーネントタイプ]で選択したタイプに存在するコンポーネント名でなければなりません。
[渡されたID]には、現在のコンポーネントまたはサービス内のドキュメント名を指定します。ターゲットコンポーネントに渡すドキュメントを、1つまたは複数指定できます。何も指定しないことも可能です。ここで指定するドキュメント名は、入力ドキュメントとしてターゲットコンポーネントに渡されます。
[返されたID]には、ターゲットコンポーネントの結果を受け取る、現在のコンポーネントまたはサービス内のドキュメント名を指定します。既存のドキュメント名を使用するか、存在しない名前を指定して新しいドキュメントを作成することもできます。
これらのパラメータは、[事前定義]または[ダイナミック]のいずれかの方法で指定できます。定義済みのコンポーネントアクションでは、プロジェクトの現在の状態における値を使用した4種類のパラメータを指定します。一度指定されると、これらの値は手動で変更されない限り、アクションのすべての実行に対して適用されます。ダイナミックなコンポーネントアクションでは、ランタイム時の4種類のパラメータは、作成した式によって計算された値で指定します。 この場合、コンポーネントアクションの動作は柔軟になり、実行ごとにランタイムでの条件に対応できるようになります。1度のコンポーネントアクションで、さまざまなランタイムの条件に基づいて異なるコンポーネントを実行する、異なる入力ドキュメントを渡す、または異なるドキュメントで結果を受け取ることができます。
[アクション]メニューから、[新規アクション]、[コンポーネント]の順に選択します。キーボードショートカット<Ctrl>-<T>でも同じです。[コンポーネント]ダイアログボックスが表示されます。
[コンポーネント名]から、実行するコンポーネント名を選択します(コンポーネントのリストは、[コンポーネントタイプ]で選択したコンポーネントタイプに対応しています)。
[渡されたID]フィールドで、呼び出されるコンポーネントが出力を返すソースDOMを選択します。新しいDOMを作成する場合、[返されたID]フィールドに名前を入力します。
[アクション]メニューから、[新規アクション]、[コンポーネント]の順に選択します。キーボードショートカット<Ctrl>-<T>でも同じです。[コンポーネント]ダイアログボックスが表示されます。
有効なコンポーネントタイプ(map、service、JDBC、3270、5250、CICSRPC、JMS、HTML)のうちの1つを返すECMAScript式を作成します。
注記: コンポーネントタイプは、そのタイプを実装している接続が、使用しているComposerにインストールされている場合にのみ有効です。
現在のコンポーネントまたはサービス内のランタイム時における有効なドキュメントIDを返すECMAScript式を作成します。このドキュメントは、入力ドキュメントとしてターゲットコンポーネントまたはサービスに渡されます。複数のドキュメントを渡す場合、式は、ドキュメントIDのコンマで区切られたリスト(たとえば、Input、Input 1、Temp、MyDoc)を含む単一文字列を返す必要があります。
決定アクションでは、アクションまたはアクションのグループにブランチするif. . . thenステートメントが作成されます。決定アクションは、指定した条件に基づいて、あるブランチか別のブランチを選択するために使用します。条件には、= =、<、>、!、>=、<=、(&)、OR (||)、または<>のような、ECMAScript比較演算子を使用する必要があります。式はブールtrueステートメントまたはブールfalseステートメントを解決する必要があります。たとえば、請求書がある日付よりも古いかどうかを確認し、そうである場合に電子メールを送信できます。
[アクション]メニューから、[新規アクション]、[決定]の順に選択します。キーボードショートカット<Ctrl>-<D>でも同じです。[決定]ダイアログボックスが表示されます。
任意のECMAScript比較演算子を使用して式を入力するか、[式ビルダ]ボタンをクリックして、ランタイム時にtrueまたはfalseを返す決定スクリプト(ECMAScript式)を作成します。
[OK]をクリックします。アクションモデルには、次の決定アクションが表示されます。これにより、INVOICEノードの存在が確認されます。
式がtrueである場合に実行する1つまたは複数のアクションを追加します。trueブランチの外側から内側へ切り取り/コピーアクションをドラッグアンドドロップできます。
決定アクションのTRUEブランチまたはFALSEブランチ、あるいはその両方の内側に他の決定アクションをネストできます。アクションモデルペインの完全な決定は、次の図のとおりです。
エイリアスの宣言アクションでは、特定のXpath式に独自のカスタムラベルを適用できます(特定のアクションモデルのスコープ内でのみ有効です)。このアクションを使用すると、アクションモデルを認識しやすくでき、また入力の手間を省くことができます。
[アクション]メニューから、[新規アクション]、[エイリアスの宣言]の順に選択します。[エイリアスの宣言]ダイアログボックスが表示されます。
[XPath]ラジオボタンを選択した場合、ドロップダウンメニューから、ターゲットDOM(ターゲットXpathを含むドキュメントを示す)を選択します。次に、下のテキストフィールドに、ターゲットノードへのXPathを入力します。
[式]ラジオボタンを選択した場合、テキストフィールドに、ターゲットXPathのECMAScriptでの適切な表現を入力するか、またはテキストフィールドの右にある[式ビルダ]アイコンをクリックして、式ビルダピックリストを使用して式を作成します。
図の例では、入力パートにSHOW_PRODUCT/LIST_PRICEというノードがあります。XPath式へのエイリアス(任意の名前)を割り当てると、アクションモデルを全体を通して「$Input/SHOW_PRODUCT/LIST_PRICE」と繰り返し入力する必要がなくなるため便利です。この例では、$Input/SHOW_PRODUCT/LIST_PRICEに、「aPrice」というエイリアスが割り当てられています。エイリアスを割り当てると、アクションモデル全体を通して「$Input/SHOW_PRODUCT/LIST_PRICE」ではなく「aPrice」を使用できます。ランタイム時には、エイリアスは完全なXPathに拡張されます。
関数アクションでは、ECMAScript関数またはカスタムスクリプトリソースエディタで作成したカスタムスクリプト関数のいずれかを実行できます。DOMの要素を操作するには、関数アクションで呼び出すスクリプトが現在のコンポーネント内の完全に識別できるDOM要素の名前を参照している必要があります。
作成してアクションモデルに追加するカスタムスクリプト関数は、どのXMLツリー要素に対しても使用できます。 たとえばデータ要素の書式を変更する関数を作成できます。 要素の中身に対して数学演算を施す関数を作成できます。 メッセージパートとのやり取りのないsystem関数、database関数、またはURL関数を実行することもできます。関数アクションは、カスタムスクリプトリソースで登録したJavaメソッドを呼び出すために使用することもできます。これにより、複雑(および単純)なJavaの処理をアクションモデルに視覚的に直接統合することができます。
[アクション]メニューから、[新規アクション]、[関数]の順に選択します。キーボードショートカット<Ctrl>-<U>でも同じです。[関数]ダイアログボックスが表示されます。
[関数コール]フィールドに関数を入力するか、[式ビルダ]ボタンをクリックしてECMAScript式を作成します(後の説明を参照)。関数のコールでは、大文字小文字が区別されます。また、関数にパラメータが必要な場合、関数のコールにそれらを含めることを忘れないでください。
[OK]をクリックします。[適用]ボタンをクリックすると、ダイアログボックスを閉じずに関数アクションの結果を表示できます。これにより、関数アクションを繰り返し編集しても、結果をすばやく確認できます。
変数、関数/メソッド、または演算子をダブルクリックし、それらを関数に挿入します。関数に直接入力することもできます。
注記: 関数がECMAScriptの標準に準拠しているかどうかを確認します。準拠していない場合、関数は正しくコンパイルまたは動作しません。通常、関数をカスタムスクリプトリソース内で作成し、使用する前にテストすると、効率がよくなります。関数アクションの作成時には、カスタムスクリプトの関数名を参照し、それをパラメータとして指定できます。
注記: ECMAScriptは解釈済みの言語であるため、[検証]では、有効なECMAScript構文に準拠しているかどうかは確認されますが、ランタイムの従属式についてはチェックされません。
ログアクションは、カスタマイズ可能なレポート機能(設計時、ランタイムとも)をComposerアプリケーションに展開できます。 ログレベル設定(後の節で説明)を使用すると、レポートのレベルを詳細に制御できます。ログアクションを単に「オン」または「オフ」にする必要はありません。
ログアクションを使用する場合の例は、次のとおりです。
ログアクションでは、ComposerおよびexteNd Composer Enterprise Serverの外部のさまざまな場所に情報を記録できます。実際の場所はアクションによって指定されます。 ログ出力の場所には、システム出力、システムログ、およびユーザログの3種類があります(次を参照)。
[システム出力]オプションでは、[ログ式]フィールドに指定するメッセージが設計時のJava仮想マシンの処理ウィンドウまたはランタイム時のアクションサーバコンソールに書き出されます。
ログメッセージを作成するには、有効なECMAScript式を作成したり、式ビルダを使用してログの式を生成したりすることができます。書き出されるメッセージの前には、日付と時間のスタンプおよびログを実行しているコンポーネントの情報が記録されます。これらのメッセージは、Composerメインウィンドウのメッセージフレームにも表示されます。
[システムログ]オプションでは、[ログ式]フィールドに指定するメッセージがComposerの設定ファイルxconfig.xmlの<LOGFILE>要素に指定されたファイル名に書き出されます。 Composerのメニューバーから[ツール]>[初期設定]の順に選択し、[一般]タブに切り替えます。
[ユーザログ]オプションでは、[ログ式]フィールドに指定するメッセージが、[ログアクション]ダイアログボックスの[ユーザログファイル]フィールドに指定するファイルに書き出されます(後を参照)。
ログメッセージを作成するには、スタティックな文字列を入力したり、有効なECMAScript式を作成したり(または式ビルダを使用してログの式を生成したり)することができます。ログの式の結果は、テキストとしてログに書き出されます。書き出されるメッセージの前には、日付と時間のスタンプおよびログを実行しているコンポーネントの情報が記録されます。
ユーザログファイルを作成するには、有効なECMAScript式を作成してファイル名を生成したり、[式ビルダ]ボタンをクリックして、式ビルダを使用したりすることもできます。
個々のログアクションには、優先度レベル(1から10まで)を割り当てることができます。 ランタイム時のログアクションの優先度は、[ツール]メニューの[初期設定]ダイアログボックスの[一般]タブで設定した、レポートのしきい値と比較されます。優先度がレポートのしきい値と等しいまたはレポートのしきい値より高いログアクションが実行され(つまり、メッセージは必要に応じてシステム出力またはディスクに記録されます)、優先度の低いログアクションのメッセージは記録されません。
個々のログアクションの優先度レベルは、[ログアクション]ダイアログボックスで設定できます。 記録のしきい値は、[初期設定]ダイアログボックスの[一般]タブで設定します(次の説明を参照)。しきい値を設定すると、それと等しいかそれより高い優先度のログアクションが実行されます。 たとえば、ログアクションAの優先度が4に、ログアクションBの優先度が9に、それぞれ設定されており、[初期設定]ダイアログボックスのしきい値が8に設定されている場合、ランタイム時にはログアクションBが実行されます。ログアクションAは無視されます。
注記: レポートのレベルは、プロジェクトの展開後に、exteNd Composer Enterprise Serverのコンソール画面で調整することもできます。詳細については、Composer Enterprise Serverのドキュメントを参照してください。
[一般]タブで、「ログのしきい値」を1から10までの値に設定します。ここで設定する値が、「しきい値」です。優先度がこの値と等しいまたはこの値よりも高いログアクションのみが実行されます。
[アクション]メニューから、[新規アクション]、[ログ]の順に選択します。キーボードショートカット<Ctrl>-<L>でも同じです。[ログ]ダイアログボックスが表示されます。
[ログレベル]スピンコントロールを使用して、このログアクションの優先度レベル(1から10まで)を選択します。デフォルトでは5に設定されています。一般的に、重要度が高いメッセージには、高い値を割り当てます。ここで割り当てる優先度は、前の節で選択したしきい値と比較されます(前の節を参照)。優先度がしきい値と等しいまたはしきい値より高い場合、メッセージは記録されます。それ以外の場合では、メッセージは記録されません。
[ログ式]テキストフィールドに、文字列またはECMAScript式を入力します。 (テキストフィールドの右側にある小さなアイコンをクリックして式ビルダにアクセスし、ピックリストの選択肢を使用して式を作成できます)。
ログファイルの詳細については、システムメッセージの表示を参照してください。
マップアクションは、DOMノードの入力/出力のマッピングです。これにより、あるドキュメントのコンテキストのデータが別のドキュメントのコンテキストに転送(または、オプションで変換)されます。コンテキストには2つの部分があります。通常、最初の部分でDOMを特定し、2つ目の部分でDOM内の場所を特定します。Composerの基本ドキュメントコンテキストは、XPath式を通して特定される要素の場所(場所として参照)と結合されたDOM名として表されます。通常DOM名は、入力、入力1、入力(n)、一時、出力、またはコンポーネントにロード済みの名前の付いたDOMです。DOM内の場所を特定するXPath式には、「/」で区切られたパス要素があります。
注記: Composerのコンテキストは、それ自体がXPath式の単なるエイリアスまたは省略形であるグループ名である場合もあります。
マップアクションを作成すると、XPathおよびECMAScriptという2種類のメソッドから選択して、XMLドキュメント内での場所を特定できます。デフォルトはXPathです。これは基本の特定メソッドです。
XPathを使用する主な目的は、XMLドキュメントの部分(つまり、要素および属性)を特定または検索することです。XPathは文字列、数値、およびブール値を単純な式構文を通して操作するための基本機能も備えています。 XPathは、要素ノード、属性ノード、およびテキストノードを含む、メッセージパートノードを特定します。
XPathはパターンの一致に基づいています。ターゲットドキュメントのノードを解決する要素名のパターンを入力します。ほとんどの場合、XPathによって、入力したパターンと一致する特定ノードを含む「ノードリスト」が返されます。(多くのXPath式では、1つのノードのみが返されますが、複数のノードが返されることもあります)。その他の場合、XPathにより、プリミティブ値(文字列、数値、またはブール値)が返されることもあります。
XPath式を取るすべてのComposerダイアログボックスでは、式ビルダのピックリストを使用して式を作成できます(後のECMAScriptを使用して式を作成するを参照)。
完全なXPathの仕様については、http://www.w3.org/TR/xpath
を参照してください。
注記: XPathの仕様は、Composerの\Docディレクトリの下層にもあります。
DOM内の場所をアドレスするもう1つのメソッドは、XPathでECMAScriptを使用することです。このメソッドは、厳密なXPathアドレッシングの範囲を超える場合に使用します。ECMAScriptは、ホスト環境(つまりComposer)でオブジェクトを操作するための、オブジェクト指向のスクリプト言語です。ECMAScript (ECMA-262およびISO/IEC 16262)は、JavaScript (Netscape)およびJScript (Microsoft)の両方の基盤となる標準ベースのスクリプト言語です。 ECMAScriptは、Composerのグラフィカルユーザインタフェースのような、ホスト環境における既存の機能を補完および拡張する目的で開発されました。ホスト環境として、ComposerはECMAScriptにさまざまなオブジェクト(XMLドキュメントを含む)へのアクセスを提供し、処理できるようにします。代わりに、ECMAScriptは、これらのオブジェクトで動作できるJavaのような言語を提供します。
Composerの組み込みECMAScriptインタープリタは、XPath()と呼ばれるカスタムメソッドを認識します。これにより、次のような式を使用できます。
Input.XPath(“Inventory/Books/Engineering”)
このタイプの式の作成は、Composerの式ビルダ機能を使用することにより大幅に容易になります(後のECMAScriptを使用して式を作成するを参照)。
[アクション]メニューから、[新規アクション]、[マップ]の順に選択します。キーボードショートカット<Ctrl>-<M>でも同じです。[マップ]ダイアログボックスが表示されます。
[コピー元]のタイプは、[XPath]です。 プルダウンメニューから、パート([入力]、[出力]、または[一時])を選択し、次に、マップする要素を検索するXPath式を入力します。
注記: [式ビルダ]をクリックして、XPath式の作成にComposerを利用することもできます。 XPath式ビルダの使用を参照してください。
ダイアログボックスの中央にある[オプション]で、[コンテンツエディタ]、[コードテーブルマップ]、または[詳細]、あるいはこれら全部もしくはこのうちの2つをオンにし、マッピングの詳細な設定を行います。
注記: [コンテンツエディタ ]オプションおよび[コードテーブルマップ]オプションの詳細については、要素の変換を参照してください。[詳細]オプションについては、後の節で説明します。
[OK]をクリックします。アクションモデルペインにマップアクションが表示されます(次の図を参照)。
注記: [適用]ボタンを押すと、ダイアログボックスを閉じずにマップアクションの結果を表示できます。これにより、マップアクションを繰り返し編集しても、結果をすばやく確認できます。
マップアクションを使用してXMLドキュメント内で要素と属性をマップすると、あるデフォルトの動作が行われます。デフォルトの動作は、次の表のとおりです。
これらの動作の多くは、[詳細]マッピングダイアログボックスでのオプションの使用によって、アクションごとに変化します(次の節を参照)。
ランタイム時にJavaまたはECMAScript操作を使用して要素をマップすると、ある特別な状況が発生することがあります。 要素は、マークアップ、つまり<および>などの無効な文字を含む文字列を含むデータを受け取る可能性があります。これにより、Composerがそのような要素の加工されていないコンテンツをそのまま出力DOMのノードにマップした場合に出力ドキュメントに異常が発生するというマッピングの問題が生じます。
Composerでは、ターゲットドキュメントにその場で作成されるCDATAセクションにマークアップを含むデータをマッピングすることでこの問題を解決します。
注記: 設計時にマークアップを手動で入力すると、少々異なる動作が起こります。設計時に、(マウスボタンを右クリックし、[データの編集])を選択して)マークアップデータをノードに入力すると、マークアップ文字はその場でエンティティ化されます。 加工されていないXMLをテキストビューで表示すると、手動で入力した「<」文字は、<
に変換されていることなどがわかります。次に、エンティティ化されたデータは出力に直接マップされます。
[マップアクション]ダイアログボックスで[詳細]チェックボックスをオンにすると、次のダイアログボックスが表示されます。このダイアログボックスで設定するオプションは、現在のマップアクションにのみ適用され、次のアクションには適用されません。
このダイアログボックスのオプションにより、入力パートノードの出力パートへのマッピングを詳細に制御できます。
このコントロールのグループでは、属性のマップ方法を指定します。このグループには、次の3種類のラジオボタンがあります。
[非リーフルートノードおよび従属要素] - デフォルトでオンに設定されているこのボタンでは、Composerの標準(デフォルト)のマッピング動作を指定します。非端末(非リーフ)要素を出力にマップすると、要素(属性を除く)とそのチルドレン要素が出力にマップされます。チルドレン要素の属性データは含まれますが、元の(-ペアレント)要素の属性データは含まれません。
[使用しない] - このオプションでは、(ペアレントまたはリーフノードにかかわらず)属性データがマッピングにより継承されないことを指定します。
Composerはデフォルトで、ブランチ全体(つまり、ターゲットノードとすべてのチャイルドノード)を一度にマップします。場合によっては、この「ディープコピー」動作をオフにして、チャイルド要素を除いてペアレント要素のみをコピーします。 Composerの標準のディープコピー動作を無効にする場合、[従属要素のマップ]というチェックボックスをオフにします。
[ターゲットの作成]オプションでは、ソースノード(またはブランチ)がソースDOMに存在するかどうかによって、[マップアクション]ダイアログボックスの[ターゲット]で指定したマップ先のノード(またはブランチ)をオプションで作成できます。デフォルトの動作では、ComposerはマッピングのソースXPathで指定したノードがランタイムのソースDOMに含まれているかどうかにかかわらず、ターゲットを作成します。
たとえば、次のとおりです。[マップアクション]ダイアログボックスで、次のようなソースXPathを指定したとします。
$Input/Root/MySourceElement
一方、[ターゲット]では、次のように指定したとします。
$Output/Root/MyParentNode/SomeOtherElement
使用する入力ドキュメントがRoot/MySourceElement
に対応するノードを持たない場合、Composerはあくまでも(デフォルトで)出力DOMに空のRoot/MyParentNode/SomeOtherElement
ノードを作成します。ただし、場合によっては、この状況を望まないこともあります。このような場合、[詳細]マッピングダイアログボックスにあるこのラジオボタンを使用すると、デフォルトの動作を変更できます。
注記: [マップアクション]ダイアログボックスで[コードテーブルマップ]が選択されている場合、[ターゲットの作成]オプションは無効です。
このラジオボタンクループで使用できるオプションは次のとおりです。
このラジオボタンクループでは、要素のデータをCDATAセクションにマップする方法を制御できます。オプションは次のとおりです。
[ソースにマークアップが含まれている場合のみ] - このオプションでは、ソースデータがXMLタグ、HTMLタグ、または「無効な」文字が使用されているその他のタイプのマークアップを含む場合、データはターゲットDOMのCDATAセクションにそのまま配置されます。これはComposerのデフォルトの動作です。
[使用しない] - このオプションを設定すると、ソースデータが出力のCDATAセクションにラップされることはありません。ソースデータに含まれている無効な文字は、たとえば、>の場合、>になるなど、適切にエスケープされたエンティティに出力側で変換されます。
[常時] - ソースデータは、その形式にかかわらず出力のCDATAセクションにラップされます。
[マップアクション]ダイアログボックスでは、該当するテキストフィールドの右端にある[式ビルダ]ボタンを選択して、独自のXPath式を作成できます。 表示される[XPath式ビルダ]ダイアログボックスには、クリックするだけで有効なXPath構文を作成できるピックリストがあります。これは、基本のXPathアドレッシングの範囲を超えて、XPathのより強力な機能のいくつかを使用する場合に特に便利です。
exteNd Composerでは、W3Cで採用されてるアドレッシング構文を使用します。XPath構文は、基本的な概観ではURIアドレスと同様ですが、XMLのアドレッシングおよび操作のための詳細で強力な機能を多く備えています。より一般的な構文ルールのいくつかは、次の表のとおりです。
演算子の完全なリストについては、http://www.w3.org/TR/XPath
を参照してください。
マップアクションの[ECMAScript]ラジオボタンをオンにすると、[ECMAScript式ビルダ]が表示され、有効なECMAScript構文を簡単に作成できます。これは、厳密なXPathアドレッシングの範囲を超えて、ComposerによるECMAScriptアドレッシングのより強力な機能をいくつか使用する場合に便利です。
ECMAScript式ビルダは、次の図のとおりです。
ピックリストのオブジェクトは、使用頻度が高いものから順に表示されます。オブジェクトのすべてのプロパティおよびメソッドにも順序があります。 常にプロパティが最初にアルファベト順に表示され、その後にすべてのオブジェクトのメソッドがアルファベット順に表示されます。
[関数/メソッド]ピックリストおよび[演算子]ピックリストのすべてのアイテムには、関連付けられたツールヒントがあります。 ツールヒントを表示するには、該当するアイテムの上にカーソルを合わせます。 [変数]ピックリストのアイテムにカーソルを合わせると、アイテムに関連付けられたデータが表示されます。
注記: 複雑なECMAScript式を作成できますが、それらの式は、DOMとDOM内のアドレスを構成するドキュメントコンテキストを返す必要があります。
[検証]をクリックすると、式の構文が正しいかどうかをオプションで検証できます。 (これによって式が実行されることはありません。単に解析されるだけです)。
メールの送信アクションは、コンポーネントの実行中に、ダイナミックに電子メールメッセージを作成したり送信したりします。 メールの送信アクションを作成する際には、電子メールの宛先や送信方法をComposerに認識させるために必要な、さまざまなパラメータを指定する必要があります。 パラメーターをハードコードするほか、実行時に評価されるECMAScriptの式の形で記述しても構いません。
メールの送信アクションには次のような使い道があります。
メールの送信アクションで送信する電子メールには、任意のMIMEタイプの書類を添付することもできます。 また、メールサーバの種類(ユーザ名やパスワードがある場合、ない場合など)に応じ、さまざまなメールの送信アクションが使えます。
内部使用のメールサーバの中には、ユーザ名やパスワードがなくてもメールを送信できるものもありますが、多くのSMTPサーバは認証が済まないとアクセスできないようになっています。 メールの送信アクションで呼び出すメールサーバがユーザIDやパスワードを要求する場合は、「メール簡易認証」接続リソースを用意する必要があります。 このリソースには、使いたいメールサーバのネットワークアドレスの他、ユーザ名およびパスワードを格納します。 一度作ったリソースは、プロジェクト内のコンポーネントやサービスで、何回でも再利用できます。
使いたいサーバごと(あるいはそれぞれのユーザ名/パスワードごと)にMail via SMTPリソースが必要なわけではないことに注意してください。 Mail via SMTP接続リソースのパラメータはすべて、ECMAScriptで間接的に指定することができます。サーバ名やユーザの資格情報は、ディレクトリやデータベースを検索し、実行時に与えるようにしても構わないのです。 ECMAScriptを使えば、どのメールサーバや資格情報を使うか、独自のビジネスロジックで実行時に決めることができます。
注記: ECMAScriptを使って接続リソースのパラメータ値をダイナミックに決める方法について詳しくは、リソースに関する章の定数駆動型および式駆動型の接続についてを参照してください。
ナビゲーションフレームで、「リソース」の下層にある「接続」を右クリックし、次のように、コンテキストメニューから[新規]を選択します。
[パスワード]に、当該ユーザアカウントのパスワードを入力します。
注記: 先にも述べたように、このパラメータはECMAScriptの式で指定しても構いません。 ECMAScriptの使い方について詳しくは、リソースに関する章の定数駆動型および式駆動型の接続についてを参照してください。
[アクション]メニューから、[新規アクション]、[メールの送信]の順に選択します。[メールの送信]ダイアログボックスが表示されます。 ここには[メッセージ]、[サーバ]、および[添付ファイル]という3つのタブがあります。
[メール受信者]フィールドに、ECMAScript式を入力して受信者の電子メールアドレスを指定します。 この式を評価した結果は、「name@domain.extension
」という形式になっていなければなりません。 文字列値をハードコードする場合は、テキストを引用符で囲んでください。
[メール送信者]フィールドに、送信者の電子メールアドレスを表すECMAScript式を入力します (実際の電子メールアドレス以外にも、任意の文字列を指定できます)。 文字列値をハードコードする場合は、やはりテキストを引用符で囲んでください。
[メールの件名]フィールドに、有効なECMAScript式を入力して電子メールの件名を指定するか、件名を入力します。 文字列値をハードコードする場合は、やはりテキストを引用符で囲んでください。
[メール本文]フィールドに、有効なECMAScript式を入力して電子メールの本文テキストを指定するか、引用符で囲んで本文テキストを入力します。
[エンコード]プルダウンメニューから、メッセージ本文のエンコーディング方法を指定します。 初期状態ではASCIIになっています。
メールサーバのアドレスを求めるECMAScriptを指定する場合は、ラジオボタンの[メールサーバ]を選択します。 「SMTP簡易認証によるメール送信」接続リソースで指定されたサーバを使う場合は、ラジオボタンの[接続名]を選択します (このリソースタイプについてはSMTP簡易認証によるメール送信を参照)。 (ユーザ名とパスワードによる)認証が必要な場合は、[接続名]を選択することになります。
電子メールにファイルを添付する場合は、[添付ファイル]タブに切り替えます (必要なければ[OK]をクリックしてコンポーネントエディタに戻ります)。 ダイアログが次のように切り替わります。
[コンテンツタイプ]に添付ファイルのMIMEタイプを指定します。 ドロップダウンメニューから選択しても、直接入力しても構いません。
[添付ファイル]に、ファイルの内容を表すEXMAScriptの式([タイプ]欄で[文字列]を選んだ場合)、またはURLを入力します。 上の1行目の例では、コンポーネントの入力ドキュメントの /messageノードを参照して、添付ファイルの内容を求めるようになっています。 2行目の例では、ECMAScriptであらかじめ宣言された「image」という変数を参照し、JPEG画像のURLを求めるようになっています。 変数の値は実行時に、たとえば「file:///d:/server-1/resourcestore/images/stockimage.jpg
というように求められます。
スイッチアクション(JavaおよびC言語のswitchステートメントにより呼び出される)は、特定の入力変数の値またはXPath式に基づいてアプリケーションを適切なカスタムロジックへブランチさせるためのものです。スイッチアクションは、ネストされた決定アクションの連続を使用する必要性を回避できる便利なアクションです。このアクションを使用すると、複数のアクションを除外したり、それらを一貫した、わかりやすく読みやすい単一のアクションに統合したりすることによって、アクションモデルの読みやすさを大幅に向上させることができます。
スイッチアクションでは、一連の値または選択肢(「ケース」)を入力値と比較します。値または選択肢は、スタティックまたはダイナミックのいずれかです。入力値と選択肢のうちの1つに完全一致が起こると、実行は選択肢の下層にリストされているアクションにブランチします。ケースは、一連のif/elseステートメントと同様に「リストされた順序で」テストされ、一致が起こると、一致ロジックの実行はスイッチアクション内の他の実行を除外します。
ケースに関連付けられたカスタムロジックは、単一のアクションまたはアクションのブロックで構成でき、アクションにはComposerの標準(基本的または高度な)アクションと特定の接続に固有のアクションを含むことができます。
受信するXMLドキュメントが商品の小売り注文であり、アプリケーションで実行する必要のあるタスクの1つが顧客の住所に基づく発送方法の決定であるとします。スイッチアクションへの入力には、次のようなXPath式が考えられます。
$Input/Order/Customer/Address/Country
スイッチアクションのケースの値および各選択肢に対して関連付けられたロジックは、次のような場合があります。
CASE:"USA" CALL shipMethod = (weight < 10) ?"FedEx" :"UPS"; CASE:"ANGOLA" CALL shipMethod = "Air Gemini"; CASE:"ARGENTINA" CALL shipMethod = "International First Services"; CASE:"AUSTRALIA" CALL shipMethod = "Ansett International"; . . . DEFAULT: CALL shipMethod = "UPS";
ランタイム時には、Order/Customer/Address/Countryの入力DOM要素の値は、一致が起こるまで、「USA」を始め、後続の各ケースの値と比較されます。この例では、「ANGOLA」で一致で起こった場合、「Air Gemini」を(ECMAScript)変数shipMethod
に割り当てる関数アクションが実行され、その後直ちにスイッチアクションは終了し、次に実行は、スイッチアクションの後に最初のアクション(存在する場合)へと続きます。
注記: JavaおよびC言語のケースステートメントに組み込まれている「フォールスルー」動作は、Composerのスイッチアクションではないため、明示的なブレークアクションをケースのアクショングループに挿入する必要はありません。 一致が起こると、次のケースへのフォールスルーが起こることはありません。
前の例は、決定アクションの連続として作成することもできます。決定アクションの連鎖の擬似ロジックは、次のようになります。
country = inputValue if (country == USA) ship via A or B else if (country == ANGOLA) ship via C else if (country == ARGENTINA) ship via D else if (country == AUSTRALIA) ship via E [etc] else ship via Default shipper
スイッチを使用すると、この種類のコードに特有の階段状のインデントとif/elseロジックの繰り返しを使用する必要がなくなります。また、読みやすく、保守の容易なコードを作成することにもつながります。一般に、長い条件文を取り扱う場合は、スイッチアクションの使用を考慮する必要があります。
各スイッチアクションの下の最後の「ケース」には、常にDefaultというラベルが付きます。この行は自動的に生成され、削除することはできません。Defaultの下に配置されるアクションは、スイッチアクションがランタイム時に、ケースのリストで一致するケースと遭遇しなかった場合に限り、実行されます。
注記: Defaultの下にアクションを配置することを要求されていない場合、ログアクションまたはRaise Errorアクションであっても、「一致なし」の場合に備えて何らかの予備ロジックを用意しておくことがプラグラム作成上、望まれます。
[アクション]メニューから、[新規アクション]、[スイッチ]の順に選択します。[スイッチ]アクションダイアログボックスが表示されます。 (次のダイアログボックスに指定されているテキスト値はデフォルトではありません。これらの値は単に例として示されているものです)。
ダイアログボックスの上部にある[式]に、XPathまたはECMAScript式を入力します。これは、スイッチアクションに対する入力値です。
コンボボックスに、前の手順で指定した入力値と比較される、スタティックな文字列値またはECMAScript式を入力します。各ケースの値は、ランタイム時には、リストした順序で比較されます。 (ヒント: パフォーマンスを最適にするには、可能性の高い一致から順にリストします)。
注記: デフォルトでは、ケースの新しいエントリは既存のリストの最後に追加されます。 ただし、選択肢を選び、必要に応じて[上]ボタンと[下]ボタンをクリックすると、選択肢の順序を変更できます。
[OK]をクリックします。 ダイアログボックスが閉じ、アクションモデルに新しいスイッチアクションが表示されます。次の例を参照してください。
アクションモデルに新しいスイッチアクションを追加すると、ケースの値のリストが表示されます。ケースに独自のカスタムロジックを関連付けるには、ケースをクリックし、次に新しいアクションを必要に応じて1つずつ追加します。新しいアクションを追加するには、マウスの右ボタンをクリックし、コンテキストメニューから[新規アクション]を選択します。アクションブロックに含めることができるアクションの数(およびタイプ)に制限はありません。
スイッチアクションの編集に使用する主なツールは、[スイッチ]アクションダイアログボックスです。ここでは、入力式を編集したり、ケースの順序を変更したり、ケースの式を編集したり、ケースの値を追加または削除したりすることができます。 このダイアログボックスには、アクションモデルで任意のスイッチアクションをダブルクリックするだけでアクセスできます。
アクションモデル自体(設定のダイアログボックスを開かない場合)では、編集できる内容に制限があります。この制限は次のとおりです。
スイッチアクション(一番上の行)自体で、切り取り、コピー、削除、および貼り付けの操作を行うと、すべての一致と関連付けられたアクションのリストを含む、Switchブロック全体が切り取られたり、コピーされたりします。
アクションモデルの選択されたケースの値を切り取るまたは削除することはできますが、(貼り付けによて)新しいケースの値を「追加」することはできません。
切り取りまたは削除の操作では、ケース自体だけでなく、関連付けられたすべてのアクションが切り取られたり、削除されたりします。
WebサービスやXML統合アプリケーションの開発には、非常に複雑な作業が必要です。 Composerには、アプリケーション開発に必要な数多くの作業を整理するために、作業リストを管理する機能があります。
アクションモデルで、作業リストを追加しようとする箇所のすぐ上の行を選択します。 選択した行の下に新しいリスト項目が挿入されます。
必要ならば[注記]に追加情報を入力します。このテキストは、マウスのポインタが項目上にある場合に項目のツールヒントの一部として表示されます。
下向き矢印をクリックし、作業の[完了パーセント]を指定します。まだ作業を始めていなければ0のままで構いません。作業の進捗に合わせてこの値を更新していくことになります。
作業リストはコンポーネント内だけで有効なものではありません。 プロジェクト全体に関係する作業も管理できます。
メッセージフレームの[作業]タブをクリックします(28ナビゲーションフレーム、メッセージフレーム、およびコンテンツフレームを参照)。
マウスを右クリックし、コンテキストメニューの[項目の追加]を選択すると、作業項目が追加されます。 作業内容は上記と同様にして指定してください。
コンポーネントまたはプロジェクトに追加した作業項目の進捗状況は、メッセージフレームの[作業]タブで追跡できます。
[作業]タブに切り替えると、各作業項目の状況をひと目で見渡すことができます。
作業項目の管理は、アクションモデルから行うほか、メッセージフレームの[作業]タブで右クリックすることによっても行えます。 [インデント]、[アウトデント]メニューを使って、作業項目の編集、追加、削除、および再グループ化ができます。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...