2

Oracle データベースからデータを収集する dataconfig.xml ファイルがあります。Datasource 要素では、${dataimporter.request.dbname} などの変数を使用します。これらの変数は、dataimport URL 経由で渡したカスタム値を正常に返します。

現在、この同じ dataconfig ファイルに javascript トランスフォーマーを作成して、データベース名を含む複数値フィールドに値を追加しています。javascript トランスフォーマー内から変数 ${dataimporter.request.dbname} を参照することは可能ですか? もしそうなら、正しい構文は何ですか?

これは私が試したものですが、dbname は入力されません:

function relatedItems(row) {
    var relatedItemsArray = new java.util.ArrayList();
    var dbname=${dataimporter.request.db_name};
    relatedItemsArray.add('type=DOCUMENT;datasource:PB||' + dbname);
    row.put('relation', relatedItemsArray);
    return row;
  }

どんな助けでも大歓迎です!

前もって感謝します。

4

2 に答える 2

1

私は自分でその問題を抱えていました...質問は古いですが、念のため、これはデータインポートハンドラーのスクリプトにコンテキスト変数を渡す方法です:

<entity name="fileline" processor="LineEntityProcessor" url="${filelist.fileAbsolutePath}" format="text" transformer="TemplateTransformer,script:relatedItems">
<field column="dbname" template="${dataimporter.request.db_name}"/>
</entity>

TemplateTransformer は、拡張された行をスクリプトに渡す前に、新しいフィールドにパラメーターを追加します。次に、スクリプトで:

    function relatedItems(row) {
        var dbname= row.get("dbname");
        var rawLine = row.get("rawLine");
        ....
    }

この方法で追加の変数にアクセスできます。やや複雑に思えますが、それが私が見つけた最高のものです (うまくいきます!)。

于 2014-10-13T09:11:40.410 に答える