JavaScript组件简介
参考:https://help.hitachivantara.com/Documentation/Pentaho/9.2/Products/Modified_Java_Script_Value
- **步骤名称:**指定画布上修改的 Java 脚本值步骤的唯一名称
- **Transform Scripts:**在此步骤中创建的脚本
- **Transform Constants:**预定义的静态常量,用于控制数据行发生的情况。您必须为 trans_Status 变量分配一个常量值。要使用这些常量,必须首先CONTINUE_TRANSFORMATION在脚本的开头设置 trans_Status 变量,以便将变量分配给正在处理的第一行。否则,将忽略对 trans_Status 变量的任何后续分配。双击常量以将其添加到 script脚本窗格
常量:
CONTINUE_TRANSFORMATION 包括输出行集中的当前行;
SKIP_TRANSFORMATION 从输出行集中排除当前行并继续处理下一行;
ERROR_TRANSFORMATION 从输出行集中排除当前行,生成错误,并且不处理任何剩余的行。
ABORT_TRANSFORMATION 从输出行集中排除当前行,不处理任何剩余的行,但不会产生错误。(此常量不会在 PDI 客户端 PDI 客户端中显示,但可以在脚本中使用) - **Transform Functions:**可以在脚本中使用的字符串、数字、日期、逻辑、特殊和文件函数。这些包含的函数是用 Java 实现的,执行速度比 JavaScript 函数快。每个函数都有一个演示其用法的示例脚本。双击该函数以将其添加到 Java 脚本窗格。右键单击并选择 Sample 以将示例添加到 script脚本窗格。
- **Input Fields:**步骤的输入字段
- **Output Fields:**步骤的输出字段
- **兼容模式?**选择兼容模式选项以使用2.5JavaScript 引擎的 版本。如果未选择此选项(默认),该步骤将使用 JavaScript 引擎的第 3 版。
在 2.5 引擎中,值对象是可以直接修改的,并且它们的类型可以改变。例如,您可以将日期变量转换为字符串。这在 3.0 引擎中不受支持,因此 JavaScript 应该运行得更快。有关不同版本的更多详细信息,请参阅将 JavaScript 从 2.5.x 迁移到 3.0.0。
PDIPDI 使用 Mozilla 的 Rhino 引擎。(9.2版本的似乎没得选择兼容模式)
优化级别选择 JavaScript 优化的级别。这些值是:
1:JavaScript 在解释模式下运行。
0:不执行优化。
1-9:执行所有优化。9 通过更快的脚本执行执行最多的优化,但编译速度较慢。默认值为 9。
使用JavaScript处理错误数据
该处以校验公民身份证号码为例:
//Script here
var idCard = INPUT_COLUMN_01;
var regIdCard = /^(^[1-9]\d{5}(19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)$/;
try{
if(regIdCard.test(idCard)){
if(idCard.length == 18){
var idCardWi = new Array( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); //将前17位加权因子保存在数组里
var idCardY = new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //这是除以11后,可能产生的11位余数、验证码,也保存成数组
var idCardWiSum = 0; //用来保存前17位各自乖以加权因子后的总和
for(var i = 0; i < 17; i ++){
idCardWiSum += idCard.substring(i,i+1) * idCardWi[i];
}
var idCardMod = idCardWiSum % 11;//计算出校验码所在数组的位置
var idCardLast = idCard.substring(17);//得到最后一位身份证号码
//如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if(idCardMod == 2){
if(idCardLast == "X" || idCardLast == "x"){
trans_Status= CONTINUE_TRANSFORMATION;
}else{
throw{
error_describe:"公民身份证号码校验码验证失败,请检查!",
error_num:1,
error_column:"INPUT_COLUMN_01",
error_code:"NOT_ALLOW_IDCARD"
}
}
}else{
//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
if(idCardLast == idCardY[idCardMod]){
trans_Status= CONTINUE_TRANSFORMATION;
}else{
throw{
error_describe:"公民身份证号码校验码验证失败,请检查!",
error_num:1,
error_column:"INPUT_COLUMN_01",
error_code:"NOT_ALLOW_IDCARD"
}
}
}
}
}else{
throw{
error_describe:"公民身份证号码校验码验证失败,请检查!",
error_num:1,
error_column:"INPUT_COLUMN_01",
error_code:"NOT_ALLOW_IDCARD"
}
}
} catch (e){
trans_Status= SKIP_TRANSFORMATION;
_step_.putError(getInputRowMeta(),row, e.error_num, e.error_describe, e.error_column, e.error_code);
}
说明:INPUT_COLUMN_01为输入字段
throw里面的四个字段为自定义字段,可以设置成你自己想要的名称,javascript步骤定义错误处理配置能够配置那些字段输出到错误处理步骤
step.putError前两个參数通常被指定为getInputRowMeta()和row,其它參数取决于你想怎么详细描写叙述所遇到的错误。即throw里面的字段
连线错误处理的hop如下:
使用JavaScript加密数据
这里的例子是计算row里面的md5Hex
PS:计算md5Hex需要将commons-codec-1.3jar放至…\data-integration\lib下面,具体版本无所谓了
感觉吧。。。只要JavaScript脚本写得出来的都可以放到里面去跑。