![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第4章
「アクション」は、プログラミングステートメントに類似しており、パラメータの形式で入力を受け付け、特定のタスクを実行します(アクションの一般情報については、『Composerユーザガイド』のアクションに関する章を参照してください。ここでは、Composerの基本的なアクションに精通しているものと想定して説明を進めます)。SAPコンポーネントエディタ内では、他のComposerコンポーネントエディタと同様に、XMLドキュメントを処理したり、非XMLデータソースと通信したりするための命令のセットを設計時に作成して、(後で展開するため)「アクションモデル」に保存できます。アクションモデルには、データベースとXMLドキュメント間でのすべてのデータマッピング、データ変換、データ転送、およびコンポーネントとサービス内でのデータ転送を実行するために必要なビジネスロジックが含まれています。
アクションモデルは、アクションのリストから構成されています。アクションモデル内のすべてのアクションは相互に機能します。たとえば、あるアクションモデルでは、請求書のデータをディスクから読み取り、データを在庫データベースから取得し、一時XMLドキュメントに結果をマップして変換し、変換されたデータを出力XMLドキュメントにマップする個々のアクションを含みます。
このアクションモデルの例は、いくつかの個々のアクションから構成されています。たとえば、次のようなアクションが含まれます。
Composer SAP Connectでは、Composerおよびランタイム環境からのSAPのBAPIまたはその他のRFC可能な関数モジュール(RFM)への着信、発信コールが可能です。Composer SAP Connectは、Javaコネクタライブラリを使用してSAPのBAPIおよびRFMを呼び出します。
SAPコンポーネントエディタには、exteNd ComposerのXMLマップコンポーネントエディタの重要な機能がすべて含まれています。XMLマップコンポーネントエディタには、SAPコンポーネントエディタだけに関連する次の2つのアクションがあります。
SAP関数アクションのダイアログボックスは、[SAP関数]、[SAP要求]、および[SAP応答]という3つのタブで構成されています。
[SAP関数]タブでは、関数名が検証され、現在の接続先のSAPシステムにこの関数が存在することが確認されます。関数名が有効な場合、[関数]テキストフィールドの[検索]に表示され、[関数]リストで選択できます。
入力された関数名が無効な場合、エントリ「関数が見つかりません」というエントリが[関数]リストに表示されます。検証中に、通信エラーなど、別のタイプのエラーが発生した場合、「関数を検索中にエラーが発生しました」というエントリが[関数]リストに表示されます。[SAP要求]タブおよび[SAP応答]タブは、[関数]リストで有効な関数名をダブルクリックすると、使用できるようになります。
アクションメニューから、[新規アクション]>[SAP関数]の順にクリックするか、マップアクションペインで右クリックして、[新規アクション]>[SAP関数]の順にクリックします。
ダイアログボックスに表示される最初のタブは、[SAP関数]タブです。ダイアログボックスが表示されると、[SAP要求]タブと[SAP応答]タブは使用できなくなり、[関数]リストは空になります。
[検索]ボタンをクリックして、関数の完全なリスト(次を参照)を取得します。検索結果にフィルタをかけるには、検索情報を指定します。指定するには、RFC*のようにSAP関数プレフィックスの後にワイルドカード文字(*)を入力して、SAP関数のタイプを検索します。検索文字列を入力した後、[検索]ボタンをクリックします。検索条件に一致する関数のリストが表示されます。スクロールバーを使用して関数を検索し、その関数をダブルクリックします。ワイルドカード文字は、リテラル文字列の任意の部分に使用できます(*FC、*FC*、RFC*など)。
検索条件に一致する関数がない場合、エントリ「関数が見つかりません」が[関数]リストに表示されます。空の文字列を入力すると、検索では、デフォルトでワイルドカード文字が使用されます。
検索が成功すると、検索文字列が保存されます。保存された検索文字列は、その後ユーザがSAP関数アクションを作成する場合に、関数リストをフィルタするために使用されます。
検索が成功すると、ユーザはダブルクリックすることによってSAP関数を選択できます。SAP関数を選択すると、関数ラベル「選択済み」が設定され、[SAP要求]タブおよび[SAP応答]タブが使用できるようになり、表示や編集作業を行うことができます。
デフォルトで、[マッピングにNEPを使用]チェックボックスはオンになっています。入力XMLドキュメントからネイティブ環境ペイン内に表示される[SAP要求]フィールドにデータをマップする場合、[マッピングにNEPを使用]オプションを選択します。[マッピングにNEPを使用]オプションを選択すると、[SAP要求]タブでその他すべてのコントロールが使用できるようになります。
入力XMLドキュメントから[SAP要求]フィールドにデータをマップしない場合、チェックボックスをオフにして、[マッピングにNEPを使用]オプションの選択を解除します。この場合、ネイティブ環境ペインには[SAP要求]タブは表示されないため、式エディタで使用できる発行メソッドを使用する必要があります(以下の式ビルダに関する節を参照)。[マッピングにNEPを使用]オプションが選択されている場合でも、式エディタの発行メソッドを使用できます。
フィールド属性を追加する場合、[フィールド属性を含める]チェックボックスをオンにする必要があります。[マッピングにNEPを使用]オプションおよび[フィールド属性を含める]オプションの両方が選択されている場合、NEPの[SAP要求]タブ内に表示されるSAP要求ドキュメントには、フィールド、構造、テーブルのそれぞれについてのメタデータが属性として含まれます。
[SAP関数]ダイアログボックスのSAP要求ツリーでは、デフォルトで事前に選択され、使用できない必須ノードが表示されます。ただし、必須でないノードは選択したり、選択を解除したりできます。
SAP要求ツリー内では、いくつかの(すべてではない)必須ではないチャイルドノードが選択されている場合、ペアレントノードは選択された状態で、グレーの背景色で表示されます。必須ではないチャイルドノードが選択されていない場合、ペアレントノードは選択された状態で、通常の白い背景色で表示されます。
フィールド名にカーソルを置くと、そのフィールドの説明が表示されます。この説明は、ツールヒント内に表示されます(図を参照)。
デフォルトでは、[マッピングにNEPを使用]チェックボックスはオンになっています。ネイティブ環境ペイン内に表示される[SAP応答]フィールドから出力XMLドキュメントにデータをマップする場合、[マッピングにNEPを使用]オプションを選択します。[マッピングにNEPを使用]オプションを選択すると、[SAP応答]タブでその他すべてのコントロールが使用できるようになります。
ネイティブ環境ペイン内に表示される[SAP応答]フィールドから出力XMLドキュメントにデータをマップしない場合、チェックボックスをオフにして[マッピングにNEPを使用]オプションの選択を解除します。この場合、ネイティブ環境ペインには[SAP応答]タブは表示されないので、式エディタで使用できる発行メソッドを使用する必要があります(以下の式エディタに関する節を参照)。[マッピングにNEPを使用]オプションが選択されている場合でも、式エディタの発行メソッドを使用できます。
フィールド属性を追加する場合、[フィールド属性を含める]チェックボックスをオンにする必要があります。[マッピングにNEPを使用]オプションおよび[フィールド属性を含める]オプションの両方が選択されている場合、NEPの[SAP応答]タブ内に表示されるSAP応答ドキュメントには、フィールド、構造、テーブルのそれぞれについてのメタデータが属性として含まれます。
[SAP関数]ダイアログボックスのSAP応答ツリーでは、デフォルトで事前に選択され、使用できない必須ノードが表示されます。ただし、必須でないノードは選択したり、選択を解除したりできます。
SAP応答ツリー内では、いくつかの(すべてではない)必須ではないチャイルドノードが選択されている場合、ペアレントノードは選択された状態で、グレーの背景色で表示されます。必須ではないチャイルドノードが選択されていない場合、ペアレントノードは選択された状態で、通常の白い背景色で表示されます。
[SAP関数]アクションダイアログボックスの[OK]ボタンをクリックすると、エントリが検証され、アクションが保存されます。[マッピングモデルの使用]オプションが選択されている場合、[SAP要求]タブおよび[SAP応答]タブがネイティブ環境ペインに表示され、新しいSAP関数アクションがアクションモデルペインで自動的に作成されます。
このアクションは、アクションモデルに示されているように、次の4つのラインで構成されています。
[Before Executeアクション] - [SAP要求]のマッピングモデルドキュメントにデータをマップしたり、SAP関数にデータを直接設定したりできます。
[SAP関数の実行] - [SAP要求]のマッピングモデルデータを関数に設定し、関数を実行し、[SAP応答]のマッピングモデルデータを関数から取得します。
[After Executeアクション] - [SAP応答]のマッピングモデルドキュメントからデータをマップしたり、SAP関数からデータを直接取得したりできます。
次の操作を実行すると、既存のSAP関数アクションを編集できます。
SAPコンポーネントは、アクションモデル内のSAP関数アクションの構造が自動的に作成される点で、他のコンポーネントとは異なります。この構造は、SAP関数をアクションモデルに追加するときに作成されます。このガイドの第3章「SAPコンポーネントの作成」の手順に従って、SAPコンポーネントを作成できます。この例で示すSAPコンポーネントの作成では、SAP要求テンプレートおよびSAP応答テンプレートが入力および出力にそれぞれ選択されています。新しく作成したSAPコンポーネントは、SAPコンポーネントエディタウィンドウに表示されます。
[Before Executeアクション] - [SAP要求]のマッピングモデルドキュメントにデータをマップしたり、SAP関数にデータを直接設定したりできます。この方法は、次の節で説明するようにいくつかあります。
XMLドキュメントの一部を[SAP要求]にマップするには、ネイティブ環境ペインの空の領域を([SAP要求]タブが選択されいる状態で)右クリックします。コンテキストメニューが表示されます。
[マップ]コマンドを選択します。[マップ]ダイアログボックスが表示されます。次の手順では、[マップ]ダイアログボックスの[コピー元]フィールドと[ターゲット]フィールドが初期化されます。
[マップ]ダイアログボックスでは、[入力]がソースパートのデフォルトとして表示され、[SAPRequest]が[ターゲット]のデフォルトとして表示されます(プルダウンメニューを使用して、別の[コピー元]および[ターゲット]を選択できます)。ソースとして使用するXPathフラグメントが分かっている場合は、ボックスに入力します。分からない場合、右側の青い式エディタアイコンをクリックします。式エディタアイコンをクリックすると、[コピー元]の[式エディタ]ダイアログボックスが表示されます。
このダイアログボックスの上部にある選択リストを使用すると、ポイントしてクリックするだけで、XPathフラグメントまたはECMAScript、あるいはその両方を作成できます。この場合、[入力]パート(左上)のツリービューを展開して、完全な入力ツリー構造を表示します。ツリーの項目をダブルクリックすると、ダイアログボックスの下部にその項目(ツリーのその部分に対するXPathフラグメント)が自動的に表示されます。[OK]をクリックすると、[マップ]ダイアログボックスの該当する箇所にXPath情報が表示されます。
[入力]からメッセージ本文のMATNR_LOWのXPathの場所に情報をマップするには、[マップ]ダイアログボックスの[ターゲット]の部分に入力します。
[OK]をクリックすると、[マップ]ダイアログボックスが閉じ、SAPコンポーネントエディタのメインウィンドウでマップの結果を確認できるようになります。
この手順は、メッセージ本文にデータを入力するたびに繰り返すことができます。または、関数アクションを(ECMAScript DOMメソッドと同時に)使用して、プログラムによりメッセージ本文にXMLノードを作成することもできます。
「ドラッグアンドドロップ」を使用して、[入力]パートの一部から[SAP要求ドキュメント](以下で説明する制限に従って)に、またはその逆方向に、データを直接マップできます。表示可能なパートペインで[入力]ノードをクリックしたまま、[SAP要求ドキュメント]の目的の位置までドラッグして、マウスボタンを放します。該当するマップアクションがアクションモデルに自動的に追加されます。
ノードは[SAP要求]タブの任意のブランチまたはフィールドにドロップできます。ただし、ノードを属性にドロップすることはできません。ソースの値が、ターゲットフィールドノードのタイプに対して検証されない場合、「ドラッグ操作の禁止」記号が、マウスポインタとして左側に表示され、「無効なドロップターゲット」というメッセージがステータスエリアに表示されます。ソースの値が、ターゲットフィールドノードの長さに対して長過ぎる場合、「ドラッグ操作の禁止」記号が表示され、「このドロップターゲット先に対してドラッグ長さが無効です。」というメッセージがステータスエリアに表示されます。
SAP関数アクションによりSAP要求DOM (存在する場合)が実行されると、SAP要求DOMがクリアされ、SAP要求DOM (存在する場合)が再ロードされます。次に、[Before Executeアクション]リストが実行されます。さらにSAP関数の実行アクションが実行されます。ここでは、SAP要求マッピングモデルドキュメントマッピングが関数に設定され、その関数が実行され、SAP応答マッピングモデルドキュメントに関数の結果が設定されます。
SAP関数アクションのルートがアクションモデルの現在の(または選択されている)アクションである場合、メインツールバーの[SAP関数の実行]ボタンが有効になります。これ以外の場合、このボタンは使用できません。[SAP関数の実行]ボタンをクリックすると、SAPシステムに接続され、SAP関数アクション内でアクションが実行されます。さらに、SAPシステムから切断されます。
実行が成功すると、次のメッセージダイアログボックスが表示されます。
[After Executeアクション] - SAP応答マッピングモデルドキュメントからデータをマップしたり、SAP関数からデータを直接取得したりできます。
[SAP応答]の一部をXMLドキュメントにマップするには、ネイティブ環境ペインの空の領域を([SAP応答]タブが選択されいる状態で)右クリックします。コンテキストメニューが表示されます。
[マップ...]コマンドを選択します。[マップ]ダイアログボックスが表示されます。
[マップ]ダイアログボックスでは、[SAP応答]が[コピー元]のデフォルトとして表示され、[出力]が[ターゲット]パートのデフォルトとして表示されます(プルダウンメニューを使用して、別の[コピー元]および[ターゲット]を選択できます)。ソースとして使用するXPathフラグメントが分かっている場合、提供されているフィールドに入力します。分からない場合、右側の青い式エディタアイコンをクリックします。式エディタアイコンをクリックすると、[コピー元]の[式エディタ]ダイアログボックスが表示されます。
このダイアログボックスの上部にある選択リストを使用すると、ポイントしてクリックするだけで、XPathフラグメントまたはECMAScript、あるいはその両方を作成できます。この場合、[SAP応答ドキュメント](左上)のツリービューを展開して、完全なツリー構造を表示します。ツリーの項目をダブルクリックすると、ダイアログボックスの下部にその項目(ツリーのその部分に対するXPathフラグメント)が自動的に表示されます。[OK]をクリックすると、[マップ]ダイアログボックスの該当する箇所にXPath情報が表示されます。
この手順は、[出力]パートにデータを入力するたびに繰り返すことができます。または、関数アクションを(ECMAScript DOMメソッドと同時に)使用して、プログラムにより[出力]パートにXMLノードを作成することもできます。
「ドラッグアンドドロップ」を使用して、[SAP応答ドキュメント]の一部から[出力]パートにデータを直接マップできます。[SAP応答ドキュメント]の任意のノードをクリックしたまま、[出力]パートの目的の位置までドラッグして、マウスボタンを放します。該当するマップアクションがアクションモデルに追加されます。
接続付きコンポーネントアクションは、SAPコンポーネントから別のコンポーネントを呼び出し、同じ接続を共有できるため、特有なアクションです。このアクションを使用すると、大きなコンポーネントをメインSAPコンポーネントとサブコンポーネントに分けることができるため、アクションモデルを簡単に管理できます。メインコンポーネントとサブコンポーネントで接続を共有することにより、接続オーバーヘッドが大幅に削減されるので、実行時のパフォーマンスが向上します。このコマンドは、セッション接続を指定するときに特に役に立ちます。
サブコンポーネントの呼び出しが可能な程度のメインコンポーネントの基本構造を作成および記録します。たとえば、サブコンポーネントには、「BAPI_MATERIAL_GET_ DETAIL」という名前を付けます。
メインメニューから、またはマウスを右クリックして、[新規アクション]>[接続付きコンポーネント]の順に選択します。次のダイアログボックスが表示されます。
[コンポーネントタイプ]プルダウンリストから、コンポーネントタイプの名前を選択します。[コンポーネント名]プルダウンリストから、コンポーネントの名前を選択します。
変更する必要がある場合、渡されるIDをプルダウンリストから選択します。変更する必要がある場合、返されるIDをプルダウンリストから選択します。[OK]をクリックします。
メインコンポーネントのアニメーションを実行して、接続付きコンポーネントアクションをステップインします。サブコンポーネントが開きます。画面が「BAPI MATERIAL GET DETAIL」という名前のコンポーネントに変わります。
コンポーネントを作成したように、サブコンポーネントアクションモデルを作成します。
注記: この例の要素の繰り返しアクションは、複数行を処理するように作成されています。
サブコンポーネントのアニメーションを実行して、ステップインします。サブコンポーネントの結果が、[出力DOM]タブおよび[SAP応答]タブに表示されます。
SAP アクションモデルを作成するには、式ビルダを使用して、データをSAP関数に直接設定します。通常、これらの値をECMAScript式で反映できるようにすると便利です。式ビルダの選択リスト([式エディタ]ウィンドウ上部)には、SAP固有のメソッドが含まれます(次の図を参照)。
Object getImportField(String asName)
- [簡易インポート]フィールドの値を名前で取得します。
setImportField(String asName, String asType)
- [簡易インポート]フィールドの値を名前とタイプで設定します。マップアクションのターゲット式として使用します。
Object getExportField(String asName)
- [簡易エクスポート]フィールドの値を名前で取得します。
Object getImportStructField(String asStructName, String asName)
- [インポート構造]フィールドの値を構造名とフィールド名で取得します。
Node getImportStructAsXML(String asStructName)
- [インポート構造]の名前をXMLノードとして取得します。
setImportStructField(String asStructName, String asName, String asType)
- [インポート構造]フィールドの値を構造名、フィールド名、およびフィールドタイプで設定します。マップアクションのターゲット式として使用します。
setImportStructWithXML(String asStructName)
- [インポート構造]の名前をXMLノードとして設定します。
Object getExportStructField(String asStructName, String asName)
- [エクスポート構造]フィールドの値を構造名とフィールド名で取得します。
Node getExportStructAsXML(String asStructName)
- [エクスポートン構造]の名前をXMLノードとして取得します。
Object getTableField(String asTableName, String asName)
- [テーブル]フィールドの値をテーブル名とフィールド名で取得します。
Node getTableAsXML(String asTableName)
- [テーブル]の名前をXMLノードとして取得します。
int getTableRowCount(String asTableName)
- 指定したテーブルの行数を整数で取得します。
appendTableRow(String asTableName)
- 指定したテーブルの最後に行を追加します。
nextTableRow(String asTableName)
- 指定したテーブルの次の行にカーソルを移動します。
setTableRow(String asTableName, int aiRow)
- 指定したテーブルの指定した行にカーソルを移動します。
setTableField(String asTableName, String asName, String asType)
- [テーブル]フィールドの値をテーブル名、フィールド名、およびフィールドタイプで設定します。マップアクションのターゲット式として使用します。
setTableWithXML(String asTableName)
- [テーブル]の名前をXMLノードとして設定します。
Node getFunctionAsXML()
- SAP関数を表すNodeを返します。実行前または実行後に使用できます。
dumpFunctionToLog()
- getFunctionAsXML()を呼び出し、DATE属性を関数名要素に追加し、Framework Factory log()メソッドを介してログにフォーマットを出力します。
String getLastError()
- 最新の実行エラーを返します。
String getFunctionName()
- 関数名を返します。
Object getRFCObject()
- RFCオブジェクトを返します。JCoの場合、これはJCO.Functionオブジェクトです。
setRequestSetAsString(boolean abFlag) - 実行前に関数への入力を文字列として設定するか、フィールドタイプに該当するオブジェクトに変換してから設定するかを決めます。デフォルトでは、このフラグは、ECMAラッパでtrueです。たとえば、フラグがtrueで、フィールドタイプがDATEの場合、モデルドキュメントまたは発行setterメソッドを介した入力は、「YYYYMMDD」形式の入力である必要があります。フラグがfalseで、フィールドタイプがDATEの場合、入力がモデルドキュメントを介する場合、文字列がjava Date()オブジェクトへの入力として使用されます。フラグがfalseで、フィールドタイプがDATEであり、入力が発行setterを介する場合、ユーザはjava Date()オブジェクトに直接渡すか、java Date()オブジェクトへの入力として使用されるStringに渡すことができます。
BYTES - byte[]アレイ(現在)。アレイを渡すことはできません。
DATE - java Date(YYYYMMDDパターンと
XSTRING - byte[]アレイ。(現在)アレイを渡すことはできません。
setResponseGetAsString(boolean abFlag) - 実行後に関数からの出力を文字列として取得するか、フィールドタイプに該当するオブジェクトとして設定するかを決めます。デフォルトでは、このフラグは、ECMAラッパでtrueです。たとえば、フラグがtrueで、フィールドタイプがDATEの場合、フィールドはモデルドキュメントの場合でも、発行getterの場合でも、JCO.Field.getString()メソッドを使用して取得されます。フラグがfalseで、フィールドタイプがDATEであり、入力がモデルドキュメントを介して取得される場合、フィールドは、JCO.Field.getObject()メソッドを使用して取得されてから、Objects toString()メソッドを使用して文字列に変換されます。フラグがfalseで、フィールドタイプがDATEであり、フィールドが発行getterメソッドを介して取得される場合、フィールドは、JCO.Field.getObject()メソッドを使用して取得されます。
BYTES - byte[]アレイ(応答モデルドキュメントに対する取得の場合、getString()が使用されます)
XSTRING - byte[]アレイ(応答モデルドキュメントに対する取得の場合、getString()が使用されます)
SAPテーブルを取得および設定する場合、テーブルに複数の行が含まれている可能性があるため、異なるロジックが必要です。
SAP応答ドキュメントの行は、<item>要素で識別されます。複数の行を処理するには、SAP関数アクションの[After Executeアクション]リストで要素の繰り返しアクションを作成します(図8の例を参照)。
SAP.getTableRowCount()、SAP.getTableField()、およびSAP.nextTableRow()をRepeat Whileアクションと併用すると、テーブルの項目を扱うことができます。
SAP関数を使用すると、ユーザは、テーブルを介して複数のレコードを入力できます。SAP要求モデルドキュメントを介して複数の行を挿入するには、[Before Executeアクション]リストで要素の繰り返しアクションを作成します。
SAP.appendTableRow()およびSAP.setTableField()を要素の繰り返しアクションと併用すると、テーブルに複数の行を挿入できます。
SAP関数の追加アクションに加えて、すべての標準の基本的なComposerアクションと高度なComposerアクションも使用できます。Composerの基本的なアクションのリストは、『Composerユーザガイド』の第7章に記載されています。第8章には、より高度なアクションのリストが記載されています。
エラー処理は拡張されました。設計時に接続エラーが発生した場合、Composerによりその接続が解放されます。このため、ユーザは、コンポーネントを終了せずに問題を解決して、回復できます。
[SAP関数]ダイアログボックスでは、[関数]リストに3つのエラーメッセージのいずれかが表示されます。
関数が見つかりません - RFC_FUNCTION_SEARCHで、条件に一致するRFCが見つかりませんでした。[検索]をクリックしたときに発生することがあります。
関数を検索中にエラーが発生しました - 通信エラーまたはその他のシステムエラー。[検索]をクリックしたときに発生することがあります。
関数のメタデータを取得中にエラーが発生しました - 通信エラーまたはその他のシステムエラー。関数の選択時に発生することがあります。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...