如何将 PDI 作业 variables/parameters 用于整数步长参数?

How can I use PDI job variables/parameters for integer step parameters?

我已经为 PDI 编写了一个自定义步骤插件,并且想使用作业 variables/parameters(例如通过 ${divisor} 访问)作为步骤的整数输入参数。当我尝试像使用内置插件一样进行操作时,我收到错误消息 'Unable to open dialog for this step: For input string "${divisor}"'.

我已经从官方演示步骤插件中改编了我的步骤插件,并确认如果所有步骤输入参数都被赋予硬值,该步骤通常可以正常工作。

有问题的整数参数在 Meta class 中定义为 int 并且具有适当的 getters/setters 并且例如通过其 XML 表示进行初始化。

在对话框 class 中,参数表示为文本字段,当对话框被确认并将值写入元 class 实例时,其值被解析为整数。

摘录TimeMappingMeta.java

public class TimeMappingMeta extends BaseStepMeta implements StepMetaInterface {
    private int divisor;

    public void loadXML(Node stepnode, List<DatabaseMeta> databases, IMetaStore metaStore) throws KettleXMLException {
        setDivisor(Integer.parseInt(XMLHandler.getNodeValue(XMLHandler.getSubNode(stepnode, "divisor"))));
    }
}

摘录TimeMappingDialog.java

public class TimeMappingDialog extends BaseStepDialog implements StepDialogInterface {
    private Text wDivisor;

    private void populateDialog() {
        wDivisor.setText("" + meta.getDivisor());
    }

    private void ok() {
        meta.setDivisor(Integer.parseInt(wDivisor.getText()));
    }
}

现在的问题是作业 parameter/variable ${divisor} 的字符串可以输入到步骤参数 TimeMappingMeta.divisor 的字段中,但是对话框将在确认时失败,因为字符串无法解析为整数。该值只是在作业执行过程中替换为实际参数值,我们不能在步骤参数中保存作业参数字符串。

我错过了什么吗?甚至可以将 job variables/parameters 用于非字符串步骤参数吗?也许我可以将所有步骤参数切换为字符串,并且仅在行开始通过时在执行期间解析整数值。但是为什么kettle甚至支持非字符串步骤参数呢?

我得出结论,无法对非字符串步骤参数使用变量替换。变量的值,例如${divisor},即使值是逻辑整数,也只能保存为字符串。

此外,变量字符串的替换不是自动的,必须在方法 BaseStep.environmentSubstitute 中使用该值的地方显式执行。例如,在步骤的初始化中使用值如下所示:

public boolean init(StepMetaInterface smi, StepDataInterface sdi) {
    TimeMappingMeta meta = (TimeMappingMeta) smi
    divisor = Integer.parseInt(environmentSubstitute(meta.getDivisor()));
}