jskettle修改字段值_Kettle与动态转换(JavaScript脚本)Kettle使⽤的是JavaScript来作为它的脚本实现,使⽤的是mozilla的rhino 1.5r5版本实现,如果你打算实现⼀些复杂的计算过程,⽐如字符串分割,数据类型转换,条件计算等等,你都应该使⽤脚本语⾔来搞定。js脚本编程入门
我们在某种应⽤环境下使⽤脚本语⾔来实现⼀些动态的功能⼤部分原因都是为了避免编程,⼀个复杂⼀点的应⽤程序,⽐如像是Kettle这种⼯具,或是报表⼯具,它们不可能提供全部功能,把什么都做成图形化,应⽤条件永远都是复杂的,如果你不想研究代码和程序的结构,甚⾄你都不知道怎样编程,脚本语⾔绝对是⼀种简单的解决⽅案,⽽JavaScript语⾔⼜是其中⼊门门槛⾮常低的⼀种,你完全可以多看⼀些例⼦,尝试模仿⼀些脚本来解决问题,也许会有⼀点难以调试和测试,但总⽐⾃⼰编程要好的多。
下⾯的这个例⼦将会使⽤JavaScript弹出⼀个对话框来接受两个参数,都是时间类型,其中的UI组件是使⽤的swt的⼀些类,Kettle使⽤的是swt作为其UI组件,如果你对swt有了解的话会更容易理解这些UI组件,当然这并不需要你有swt编程的经验或者其他GUI设计的经验。
打开Kettle下载⽬录下的samples / transformation / JavaScript dialog.ktr⽂件(使⽤Kettle File菜单⾥⾯的import from an xml file。你会看到⼀个包含3个步骤的转换。
第⼀个步骤使⽤generate rows产⽣⼀条测试数据,测试数据包含⼀个DateFromProposal时间字段和⼀个DateToProposal时间字段。
第⼆个步骤使⽤JavaScript来实现动态的参数转变,它会连续弹出两次对话框,要求输⼊⼀个起始值和结束值,然后它会调⽤⼀些JavaScript函数来对⽇期格式做⼀些处理,
第三个步骤使⽤Dummy来接受输⼊,你完全可以使⽤File output步骤来查看输出。
我们先看⼀下第⼆部中的JavaScript代码:(删掉了开头的注释)
vardisplay;
vardisplayHasToBeDisposed=false;
varshell=null;
try{
lipse.swt.Current();
ActiveShell();
} catch(e) {
// if it runs in batch mode (Pan or preview mode) no Display is available, so we have to create one
lipse.swt.widgets.Display();
displayHasToBeDisposed=true;
lipse.swt.widgets.Shell(display);
}
// if we run in Pan we need to load the properties:
if(!pentaho.PropsUI.isInitialized()) {
}
String().substr(0,10); //only the date and not the time
pentaho.dialog.EnterTextDialog(shell, "Date from", "Please enter the beginning date", dateDefaultFrom);
vardateFromAsString=dialogDateFrom.open();
if(dateFromAsString!=null&& dateFromAsString.length()>0) {
String().substr(0,10); //only the date and not the time;
pentaho.dialog.EnterTextDialog(shell, "Date to", "Please enter the ending date", dateDefaultTo);
vardateToAsString=dialogDateTo.open();
if(dateToAsString!=null&& dateToAsString.length()>0) {
// here you could check or change formats a.s.o
} else{
// stop transformation when user cancels
throw newPackages.java.lang.RuntimeException("Input canceled by the user.");
}
} else{
// stop transformation when user cancels
throw newPackages.java.lang.RuntimeException("Input canceled by the user.");
}
if(displayHasToBeDisposed) {
display.dispose();
}
Display 和 shell 都是swt ⾥⾯的对象,你只⽤知道他们是表⽰UI的就可以了.
DateFromProposal和DateToProposal都是前⾯传过来的字段,dateFromAsString和dateToAsString都是需要输出的内容,整个脚本只是简单的取了两个⽇期变量的时间部分,使⽤了字符串操作的substr()函数。
其中有三点需要注意:
1.      dialog对象的初始化⽅式:使⽤的构造函数类型为
EnterTextDialog(Shell parent, String title, String message, String text) , 另⼀种构造函数类型是加⼀个参数fixed :
EnterTextDialog(Shell parent, String title, String message, String text, boolean fixed)
fixed代表字体是否⽤固定宽度,text参数代表的是输⼊在对话框⾥⾯的值,⼀般可以默认为空或输⼊⼀段⽤户提⽰信息,例⼦中是设置成原先转换之前的值,相当于默认值。
2.      使⽤open()函数取得输⼊值
我们调⽤dialog 的open()函数取得输⼊的值。
3.      异常的处理⽅式
基本上是⼀个标准的java 语法的try catch throw .
最后运⾏⼀下并查看输出,运⾏的时候什么都不输⼊接受默认值就可以了,最后查看输出,以下是⽂本⽅式的输出,以分号分割
DateFromProposal;DateToProposal;dateFromAsString;dateToAsString
2006/01/01 00:00:00.000;2006/12/31 00:00:00.000;2006/01/01;2006/12/31
最后需要注意的是这种⽅式的实现可能将来会直接⽤⼀个新的step来实现,不⽤这样写脚本。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。