0

我是 JT400 的新手。我正在尝试通过 JT400 调用 AS400 中的测试程序。这是我的代码

public class TestRpg {

public static void main(String[] args){

    try{

        AS400 sys=new AS400("mydomain","username","password");  

        String number="asdf <= Return value from Java Input";
        String lnsts="";
        String amount="";
        String lnofcd="";

        AS400Text txt80 = new AS400Text(80);
        AS400Text txt50 = new AS400Text(50);

        ProgramParameter[] parmList = new ProgramParameter[4];

        parmList[0] = new ProgramParameter( txt80.toBytes(number),80);
        parmList[1] = new ProgramParameter( txt50.toBytes(lnsts),50);
        parmList[2] = new ProgramParameter( txt80.toBytes(amount),80);
        parmList[3] = new ProgramParameter( txt50.toBytes(lnofcd),50);


        ProgramCall pgm = new ProgramCall(sys,"/QSYS.LIB/mylib.LIB/testrpg.PGM",parmList);

        if (pgm.run()!=true) {
            System.out.println("executed");
        }else{
            System.out.println("Output Data 0: " + (String)txt80.toObject( parmList[0].getOutputData() ) );
            System.out.println("Output Data 1: " + (String)txt50.toObject( parmList[1].getOutputData() ) );
            System.out.println("Output Data 2: " + (String)txt80.toObject( parmList[2].getOutputData() ) );
            System.out.println("Output Data 3: " + (String)txt50.toObject( parmList[3].getOutputData() ) );
            sys.disconnectService(AS400.COMMAND);
        }

            AS400Message[] messageList = pgm.getMessageList();
            System.out.println(messageList.length);
            for (int i=0; i < messageList.length; i++)
            {
                System.out.print  ( messageList[i].getID() );
                System.out.print  ( ": " );
                System.out.println( messageList[i].getText() );
            } 
            sys.disconnectService(AS400.COMMAND);

        }catch(Exception e) {
            System.out.println(e.toString());
        }       
    }         

    }

我已经调试了执行后没有给出任何响应的代码 pgm.run()。它甚至没有显示任何异常。程序只是持有 pgm.run() 而没有返回任何东西。

根据我得到的评论,我想包括我正在尝试处理的场景。在 AS400 中,当我们执行 testrpg.pgm 程序时,它会显示一个屏幕,其中包含四个输入字段和一些用于执行操作的功能键。我的意图是从 JT400 调用该程序的 f2 功能键。我遵循的方法是正确的方法吗?请建议我

4

2 回答 2

4

所有程序调用都是批量发生的,因此您的程序很可能在服务器上的 MSGW 中。使用 wrkactjob 找到它并调查它正在等待的消息,并给出适当的操作。

这通常是由于参数格式不正确造成的。

于 2014-02-25T10:20:41.480 回答
1

这是一个常见的误解,因此只是为了澄清其他读者:从 Java 调用 Cobol/RPG 程序是批处理的,就像从 Cobol/RPG/CL 调用 Cobol/RPG 程序一样。

如何开始:创建一个可以从 CL 调用的程序:

... declare and fill MYFIELD1, MYFIELD2 ...
CALL PGM(MYPGM) PARM(&MYFIELD1 &MYFIELD2)
... 

如果这可行,它也可以使用 jt400 从 Java 中运行,如果您:

  • 使用正确的凭据调用正确的 AS400
  • 在正确的库中调用正确的程序
  • 使用正确数量和长度的参数

如果发生上述崩溃(永远等待),DSPMSG QSYSOPR 将显示一条打开消息,例如“MCH0801 = 参数数量错误”。D=Dump 将创建一个假脱机文件,您可以在其中查看哪些传入参数填充了哪些内容,或者您​​会看到“未定义”。

于 2014-05-23T13:25:04.003 回答