在 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 系统上执行,这些系统可能没有窗口系统。 因此显示此类消息通常仅用于调试,在生产版本中被禁用。