我有一个dataconfig.xml文件,用于从Oracle数据库收集数据。在Datasource元素中,我使用$ {dataimporter.request.dbname}之类的变量成功返回通过dataimport url传递的自定义值。
我现在正在同一个dataconfig文件中编写一个javascript转换器,以在mutivalued字段中添加值,并包含数据库名称。是否可以从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;
}
非常感谢任何帮助!
提前致谢。
答案 0 :(得分: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");
....
}
您可以通过这种方式访问额外的变量。这似乎有点令人费解,但这是我能找到的最好的(有效!)。
答案 1 :(得分:0)
您可以从请求上下文的dataimport调用中访问请求参数,该脚本可与'row'一样使用该脚本。
function myScript(row, context) {
var dbName = context.getRequestParameters().get('db_name');
...
}