我為 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
提交
取消