我已经为PDI编写了一个自定义步骤插件,并希望将作业变量/参数(例如,通过${divisor}
访问)用作该步骤的整数输入参数。当我尝试使用内置插件执行此操作时,出现错误消息“无法打开此步骤的对话框:对于输入字符串“ $ {divisor}””。
我已经从官方演示步骤插件中改编了步骤插件,并确认如果所有步骤输入参数都被赋予了硬值,则该步骤通常可以正常工作。
有问题的整数参数在Meta类中定义为int,并具有适当的getter / setter方法,例如通过其XML表示形式进行了初始化。
在Dialog类中,参数表示为文本字段,在确认对话框并将值写入Meta类实例时,其值将解析为整数。
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()));
}
}
现在的问题是,可以在步骤参数${divisor}
的字段中输入作业参数/变量TimeMappingMeta.divisor
的字符串,但是对话框将在确认时失败,因为该字符串不能被解析为整数。该值仅在作业执行过程中被替换为实际参数值,我们无法将作业参数字符串保存在step参数中。
我想念什么吗?甚至可以将作业变量/参数用于非字符串步骤参数吗?也许我可以将所有步骤参数切换为字符串,并且仅在行开始通过时在执行期间解析整数值。但是为什么水壶甚至支持非字符串阶跃参数?
答案 0 :(得分:0)
我得出的结论是,不可能对非String步骤参数使用变量替换。变量的值,例如${divisor}
,即使值在逻辑上是整数,也只能保存为字符串。
此外,变量字符串的替换不是自动的,必须在方法BaseStep.environmentSubstitute
与值一起使用的情况下明确执行。例如,在步骤的初始化中使用值如下:
public boolean init(StepMetaInterface smi, StepDataInterface sdi) {
TimeMappingMeta meta = (TimeMappingMeta) smi
divisor = Integer.parseInt(environmentSubstitute(meta.getDivisor()));
}