0

我正在尝试step使用我的 custom处理一个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()一步的输出替换了该字段,因为我认为。所以我现在很困惑,因为它输出字段名称而不是输出它的值。所以我认为传递给该方法的参数有问题。

所以有什么帮助吗?

4

1 回答 1

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);

就这样 :)

于 2014-08-21T11:27:25.583 回答