我为 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甚至支持非字符串步骤参数呢?
1 回答
浮云间
TA贡献1829条经验 获得超4个赞
我得出的结论是,不可能对非字符串步骤参数使用变量替换。变量的值,例如${divisor},只能保存为字符串,即使值是逻辑整数。
此外,变量字符串的替换不是自动的,必须在与方法一起使用值的地方显式执行BaseStep.environmentSubstitute。例如,在步骤的初始化中使用值如下所示:
public boolean init(StepMetaInterface smi, StepDataInterface sdi) {
TimeMappingMeta meta = (TimeMappingMeta) smi
divisor = Integer.parseInt(environmentSubstitute(meta.getDivisor()));
}
添加回答
举报
0/150
提交
取消