WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

cniSqlCreateModifyablePathExpression

この関数を使用して、path 引数により指定されたパスを表す SqlPathExpression オブジェクトを作成します。 ナビゲートの際、パスのエレメントがまだ存在していないとしても、これが作成されます。この関数は、PathExpression オブジェクトへのポインターを戻します。これは、パスをナビゲートする関数、すなわち cniSqlNavigatePath ファミリーへの入力として使用されます。

式の作成にはオーバーヘッドが伴うため、すべてのメッセージに同じパス式が使用される場合には、この関数を 1 回呼び出し、戻された CciSqlPathExpression* を使用して、cniSqlNavigate をそれぞれのメッセージごとに呼び出すようにします。 作成されたスレッドとは別のスレッド上にある CciSqlPathExpression を使用することができます。

構文

CciSqlPathExpression* cniSqlCreateModifiablePathExpression( 
	int* returnCode,
	CciNode* nodeObject,
	CciChar* dataSourceName,
	CciChar* path);

パラメーター

returnCode (出力)
NULL ポインターを入力すると、ユーザー定義ノードがエラーを処理しないことを示します。 この呼び出しの実行時にスローされた例外は、フロー内の次のアップストリーム・ノードに対して再度スローされます。 入力が NULL でない場合、出力は呼び出しの成功状況を示します。 実行時に例外が発生する場合、出力時に *returnCode が CCI_EXCEPTION に設定されます。 この例外の詳細を取得するには、cciGetLastExceptionData を呼び出してください。 無効な nodeObject パラメーターが渡された場合、returnCode は CCI_INV_NODE_OBJECT に設定されます。 NULL や空ストリングなどの無効な path パラメーターが渡された場合、returnCode は CCI_INV_ESQL_PATH_EXPR に設定されます。
nodeObject (入力)
ESQL パス式を所有するメッセージ・フロー処理ノードを指定します。 このポインターは、cniCreateNodeContext インプリメンテーション関数に渡されます。 このパラメーターは NULL にはできません。
dataSourceName (入力)
ステートメントが外部データベースを参照する場合に使用される ODBC データ・ソース名。 このパラメーターは NULL に設定可能です。
path (入力)
CciChar の NULL 終了ストリングへのポインター。 このパラメーターは、ESQL フィールド参照構文図の定義に従って作成されることになる ESQL パス式を指定します。ただし、ローカル ESQL 変数、ESQL 参照変数、ユーザー定義関数、ESQL ネーム・スペース定数は宣言できないため、含めることができません。 このパラメーターは NULL にはできません。

戻り値

成功した場合、SQLPathExpression オブジェクトのアドレスが戻されます。 エラーが発生した場合、CCI_NULL_ADDR が戻され、戻りコード・パラメーターがエラーの理由を示します。 SQLPathExpression が不要になったら (通常はノードが削除されるとき)、cniSqlDeletePathExpression を呼び出してそれを削除します。

以下のコードを Transform ノード・サンプルに追加することにより、1 回の関数呼び出しで、エレメントと必要な上位エレメントすべてを作成することができます。

以下のようにして、CciSQLPathExpression を _Transform_createNodeContext 関数で作成します。

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString =
                           "OutputRoot.XMLNS.Request.A.B.C.D.E";
        /* convert our path string to unicode*/
        cciMbsToUcs(NULL,
            mbPathExpressionString,
            ucsPathExpressionString,
            32,
            BIP_DEF_COMP_CCSID);
        
        p->pathExpression =
                     cniSqlCreateModifiablePathExpression(
                                 NULL,
                                 nodeObject,
                                 NULL,/* do not reference Database*/
                                 ucsPathExpressionString);
    }

その後、この CciSqlPathExpression を、以下のように後で _Transform_evaluate 関数内で使用することができます。

{
      CciElement* newElement = 
               cniSqlNavigatePath(
                     NULL,
                    ((NODE_CONTEXT_ST *)context)->pathExpression,
                     message,
                     localEnvironment,
                     exceptionList,
                     outMsg,
                     NULL,/* do not reference OutputLocalEnvironment*/
                     NULL/* do not reference OutputLExceptionList*/);
}

そこで、以下の入力メッセージ PluginSample.change.xml を渡します。

<Request
type="change">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
</Request>

次の出力メッセージが生成されます。

<Request
type="modify">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
  <A>
    <B>
      <C>
        <D/>
      </C>
    </B>
  </A>
</Request>
このアプローチは、cniCreateElementAsLastChild などの関数は使用しませんが、以下に示すような有利な点があります。
  • パスが一層動的なものになります。例えばノード・プロパティーを基に、パス・ストリングをデプロイ時に決定できるかもしれません (CciSQLPathExpression をcniSetAttribute インプリメンテーション関数に作成できるかもしれません)。
  • エレメントへのナビゲートおよび作成中、関数呼び出しは 1 回だけ行われます。 ターゲット・エレメントがツリー構造の下位にある場合に、この技法はいっそう明らかになります。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:48:06


参照トピック参照トピック | バージョン 8.0.0.5 | as08032_