如何在作業job中使用JavaScript腳本
描述(Description)
使用JavaScript作業條目來計算布爾表達式。結果可用於確定下一步將要執行的步驟。您可以使用函數,過程調用,“與”,“與”號,“或”,“等式”等。Javascript作業條目會評估並返回true或false。
評估(Evaluation)
JavaScript作業條目的結果爲true或false。換句話說,它需要以布爾表達式結尾。
下面是一些可能的評估,以結束您的腳本:
lines_input > 100
或者
true
或者
parent_job.getVariable("INPUT_DIRECTORY").equals("/tmp");
以下變量可用於表達式:
注意:確保您指定了從中選擇“ lines_input”和其他數字的步驟。否則,值將保持爲0。打開轉換文件,然後在“轉換設置”對話框的“日誌”選項卡中執行此操作。
變量 | 描述 |
---|---|
errors | 上一個作業條目中的錯誤數(long) |
lines_input | 從數據庫或文件讀取的行數(long) |
lines_output | 寫入數據庫或文件的行數(long) |
lines_updated | 數據庫表中更新的行數(long) |
lines_read | 從上一個轉換步驟讀取的行數(long) |
lines_writer | 寫入下一個轉換步驟的行數(long) |
files_retrieved | 從FTP服務器檢索的文件數(long) |
exit_status | Shell腳本的退出狀態(integer) |
nr(Integer) | 前一個作業條目的作業條目號(long);在下一個工作條目中遞增 |
is_windows | 如果Pentaho Data Integration在Windows上運行,則使用(布爾值) |
parent_job | 當前作業條目的父作業(org.pentaho.di.job.Job類) |
entry | 當前作業條目(org.pentaho.di.job.entries.JobEntryEval類) |
變量(Variables)
這是評估變量字符串內容的方法:
parent_job.getVariable("NR_OF_ROWS") == 1000000
由於我們可以訪問parent_job對象,因此我們也可以通過以下方式在父作業中設置變量:
parent_job.setVariable("NR_OF_ROWS", "1000000");
請注意,setVariable調用的計算結果爲false。在其後放一個“ true”,以避免該步評估爲false並引發錯誤。
例如,您可以執行以下操作來操作此作業條目中的變量:
useDate = parent_job.getVariable("use_date").equals("1");
if (useDate == 0) { //We get to use native java classes as this is using Rhino mocks???
date = new java.util.Date();
date.setDate(date.getDate()-1); //Go back 1 full day
dateFormat = new java.text.SimpleDateFormat("yyyyMMdd");
newDateStr = dateFormat.format(date);
parent_job.setVariable("start_date", newDateStr);
}
true;
上一步驟的結果(Previous result)
作業條目完成後,執行結果將是一個Result對象,向JavaScript引擎公開爲“ previous_result”:
表達式 | 替代 | 數據類型 | 含義 |
---|---|---|---|
previous_result.getResult() | boolean | 如果先前的作業條目已成功執行,則爲true;如果存在某些錯誤,則爲false。 | |
previous_result.getExitStatus() | exit_status | int | 前一個Shell腳本作業條目的退出狀態 |
previous_result.getEntryNr() | nr | int | 每次執行作業條目時,條目號都會增加。 |
previous_result.getNrErrors() | errors | long | 錯誤數,也可以作爲變量“錯誤”使用 |
previous_result.getNrLinesInput() | lines_input | long | 從文件或數據庫讀取的行數 |
previous_result.getNrLinesOutput() | lines_output | long | 寫入文件或數據庫的行數 |
previous_result.getNrLinesRead() | lines_read | long | 從上一步讀取的行數 |
previous_result.getNrLinesUpdated() | lines_updated | long | 文件或數據庫中更新的行數 |
previous_result.getNrLinesWritten() | lines_writer | long | 寫入下一步的行數 |
previous_result.getNrLinesDeleted() | lines_deleted | long | 刪除的行數 |
previous_result.getNrLinesRejected() | lines_rejected | long | 通過錯誤處理拒絕並傳遞到另一步驟的行數 |
previous_result.getRows() | List | 結果行,另請參見下文。 | |
previous_result.isStopped() | boolean | 標記以指示上一個先前的作業條目是否停止。 | |
previous_result.getResultFilesList() | List | 上一個作業條目中使用的所有文件的列表 | |
previous_result.getNrFilesRetrieved() | files_retrieved | int | 從FTP,SFTP等檢索到的文件數。 |
previous_result.getLogText() | String | 上一個作業條目及其子執行的日誌文本。 | |
previous_result.getLogChannelId() | String | 上一個作業條目的日誌通道的ID。您可以使用它在日誌通道日誌表中查找有關執行沿襲的信息。 | |
is_windows | Boolean | 如果作業在Windows變體上運行,則爲true,否則爲false。 |
平臺(Platform)
我們還公開了一個名爲“ is_windows”的變量,以幫助您做出特定於平臺的選擇
行數(rows)
我們向JavaScript公開的“rows”變量可幫助您使用“將行復制到結果”步驟評估傳遞到下一個作業條目的結果行。
這是有關如何使用此數組的示例腳本:
var firstRow = rows[0];
firstRow.getString("name", "").equals("Foo")
該腳本將遵循綠色作業跳(green job hop),即表達式的值爲真。如果字段“name”包含字符串“ Foo”,則會發生這種情況。
原文
https://wiki.pentaho.com/pages/viewpage.action?pageId=4358187