在 Pentaho 中显示一个简单的消息框
Show a simple message box in Pentaho
我正从 SSIS 转移到 Pentaho,它也是 java 中的新功能。我想做的是使用 Defined Java Class 步骤(或另一个步骤)在 Pentaho 中显示一个简单的消息框。
首先我尝试使用此代码:
import javax.swing.JOptionPane;
public class MyClass
{
public static void main(String args[]){
JOptionPane.showMessageDialog(null,"Hello, this message is in a message type box." );
System.exit(0);
}
}
但是我得到了这个错误:
Non-abstract class "Processor" must implement method "boolean org.pentaho.di.trans.steps.userdefinedjavaclass.TransformClassBase.processRow
我修改了代码:
导入javax.swing.JOptionPane;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
JOptionPane.showMessageDialog(null,"Hello world!");
System.exit(0);
return true;
}
我测试了 class,我没有收到任何错误消息,但是我看不到我期望的消息框。
所以,我的问题是,为了实现我想做的事情,我还需要导入、指定或修改什么。
此致。
在 pdi 转换中,大多数步骤都需要一些输入。为每一行调用您的 processRow() 方法,由您的用户定义 Java Class 步骤接收。因此,如果您没有输入行 - 不会调用该方法。
您可能想要放置一些步骤,在之前生成一行并将输出传递给 java 步骤。您可以使用 "Detect empty stream" 步骤 - 它将只输出一行而没有任何列。但是,您的 java 代码仍需要进行一些调整(不确定在 java 中您究竟需要做什么,但看起来您需要创建一些 )。
因此,最简单的选择 是使用 "Modified Java Script Value"(它使用 Rhino java脚本,而不是 java)步骤并在里面调用 Alert("Hello world!")
函数。但是你仍然需要一个输入行。
如果你还想java方式,你可以尝试下面的代码(但我不是java开发者,所以我是不确定该代码有多好):
import javax.swing.*;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
if (first)
{
first = false;
myFrame = new MyFrame();
// myFrame.setVisible(true);
JOptionPane.showMessageDialog(myFrame, "Hello world");
myFrame.dispose();
}
return true;
}
private MyFrame myFrame;
private class MyFrame extends JFrame {
public MyFrame() {
super();
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
此外,请记住,kettle jobs/transformations 通常不应该是交互式的。它们可以在 linux 系统上执行,这些系统可能没有窗口系统。
因此显示此类消息通常仅用于调试,在生产版本中被禁用。
我正从 SSIS 转移到 Pentaho,它也是 java 中的新功能。我想做的是使用 Defined Java Class 步骤(或另一个步骤)在 Pentaho 中显示一个简单的消息框。
首先我尝试使用此代码:
import javax.swing.JOptionPane;
public class MyClass
{
public static void main(String args[]){
JOptionPane.showMessageDialog(null,"Hello, this message is in a message type box." );
System.exit(0);
}
}
但是我得到了这个错误:
Non-abstract class "Processor" must implement method "boolean org.pentaho.di.trans.steps.userdefinedjavaclass.TransformClassBase.processRow
我修改了代码:
导入javax.swing.JOptionPane;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
JOptionPane.showMessageDialog(null,"Hello world!");
System.exit(0);
return true;
}
我测试了 class,我没有收到任何错误消息,但是我看不到我期望的消息框。
所以,我的问题是,为了实现我想做的事情,我还需要导入、指定或修改什么。
此致。
在 pdi 转换中,大多数步骤都需要一些输入。为每一行调用您的 processRow() 方法,由您的用户定义 Java Class 步骤接收。因此,如果您没有输入行 - 不会调用该方法。
您可能想要放置一些步骤,在之前生成一行并将输出传递给 java 步骤。您可以使用 "Detect empty stream" 步骤 - 它将只输出一行而没有任何列。但是,您的 java 代码仍需要进行一些调整(不确定在 java 中您究竟需要做什么,但看起来您需要创建一些 )。
因此,最简单的选择 是使用 "Modified Java Script Value"(它使用 Rhino java脚本,而不是 java)步骤并在里面调用 Alert("Hello world!")
函数。但是你仍然需要一个输入行。
如果你还想java方式,你可以尝试下面的代码(但我不是java开发者,所以我是不确定该代码有多好):
import javax.swing.*;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
if (first)
{
first = false;
myFrame = new MyFrame();
// myFrame.setVisible(true);
JOptionPane.showMessageDialog(myFrame, "Hello world");
myFrame.dispose();
}
return true;
}
private MyFrame myFrame;
private class MyFrame extends JFrame {
public MyFrame() {
super();
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
此外,请记住,kettle jobs/transformations 通常不应该是交互式的。它们可以在 linux 系统上执行,这些系统可能没有窗口系统。 因此显示此类消息通常仅用于调试,在生产版本中被禁用。