插件开发:如何获得以前的字段值?

时间:2014-08-19 06:51:58

标签: java pentaho kettle pentaho-cde

我尝试使用自定义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()来替换上一步中的字段,就像我想的那样。所以我现在感到困惑,因为它输出字段名称而不是输出其值。所以我认为传递给方法的参数有问题。

所以任何帮助?

1 个答案:

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

这就是全部:)