我尝试使用自定义step
处理plugin
。所以我试图从方法processRow()
中的上一步获得一个字段的值。
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
meta = (PluginMeta) smi;
data = (PluginData) sdi;
Object[] r=getRow(); // get row, blocks when needed!
if (r==null) // no more input to be expected...
{
setOutputDone();
return false;
}
if (first)
{
first = false;
data.outputRowMeta = (RowMetaInterface)getInputRowMeta().clone();
meta.getFields(data.outputRowMeta, getStepname(), null, null, this);
}
Object[] outputRow = RowDataUtil.addValueData(r, data.outputRowMeta.size()-1, "");
putRow(data.outputRowMeta, outputRow); // copy row to possible alternate rowset(s).
try {
// Send The Query to ActiveMQ
FileOutputStream fw = new FileOutputStream("E:\\testing.txt");
fw.write(fieldSubstitute(meta.getField(), data.outputRowMeta, outputRow).getBytes());
fw.close();
} catch (IOException ex) {
Logger.getLogger(PluginStep.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("@@@@@@@@@@@@@@@@@@@@: "+ex.getMessage());
}
if (checkFeedback(getLinesRead())) {
if (log.isBasic()) {
logBasic("Linenr " + getLinesRead());
}
}
return true;
}
所以我使用fieldSubstitute()
来替换上一步中的字段,就像我想的那样。所以我现在感到困惑,因为它输出字段名称而不是输出其值。所以我认为传递给方法的参数有问题。
所以任何帮助?
答案 0 :(得分:0)
经过多天的测试。
我在ProcessRow()
方法中写了以下内容。获取fieldname的值:
Object[] r = getRow();
// data is my dataClass
data.inputRowMeta = getInputRowMeta();
// meta.getField() is a custom method inside my MetaClass for retrieving name of field
int indexOfValue = data.inputRowMeta.indexOfValue(environmentSubstitute(meta.getField()));
// Value of field
data.inputRowMeta.getString(r, data.indexOfValueField);
这就是全部:)