我为 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}输入到 step 参数的字段中TimeMappingMeta.divisor,但是由于无法将字符串解析为整数,因此对话框将在确认时失败。该值仅在作业执行期间替换为实际参数值,我们无法将作业参数字符串保存在步骤参数中。
我错过了什么吗?甚至可以将作业变量/参数用于非字符串步骤参数吗?也许我可以将所有步骤参数切换为字符串,并且仅在行开始通过时在执行期间解析整数值。但是为什么kettle甚至支持非字符串步骤参数呢?
浮云间
相关分类