3

忙于从 Java 调用 RPG 函数,并从JamesA获得了这个示例。但是现在我遇到了麻烦,这是我的代码:

AS400 system = new AS400("MachineName");
ProgramCall program = new ProgramCall(system);    
    try
    {
        // Initialise the name of the program to run.
        String programName = "/QSYS.LIB/LIBNAME.LIB/FUNNAME.PGM";
        // Set up the 3 parameters.
        ProgramParameter[] parameterList = new ProgramParameter[2];
        // First parameter is to input a name.
        AS400Text OperationsItemId = new AS400Text(20);
        parameterList[0] = new ProgramParameter(OperationsItemId.toBytes("TestID"));
        AS400Text CaseMarkingValue = new AS400Text(20);
        parameterList[1] = new ProgramParameter(CaseMarkingValue.toBytes("TestData"));

        // Set the program name and parameter list.         
        program.setProgram(programName, parameterList);
        // Run the program.
        if (program.run() != true)
        {
            // Report failure.
            System.out.println("Program failed!");
            // Show the messages.
            AS400Message[] messagelist = program.getMessageList();
            for (int i = 0; i < messagelist.length; ++i)
            {
                // Show each message.
                System.out.println(messagelist[i]);
            }
        }
        // Else no error, get output data.
        else
        {
            AS400Text text = new AS400Text(50);
            System.out.println(text.toObject(parameterList[1].getOutputData()));
            System.out.println(text.toObject(parameterList[2].getOutputData()));
        }
    }
    catch (Exception e)
    {
        //System.out.println("Program " + program.getProgram() + " issued an exception!");
        e.printStackTrace();
    }
    // Done with the system.
    system.disconnectAllServices();

应用程序在此行挂起if (program.run() != true),我等待大约 10 分钟,然后终止应用程序。

知道我做错了什么吗?

编辑
这是作业日志上的消息:

客户请求 - 运行程序 QSYS/QWCRTVCA。
客户端请求 - 运行程序 LIBNAME/FUNNAME。
未找到库 *LIBL 中的文件 P6CASEL2 或缺少内联数据文件。OPEN 期间出现错误消息 CPF4101。
无法解决反对 YOBPSSR。类型和子类型 X'0201' 授权

FUNNAME 通过名为 P6CASEL2 的视图向表 P6CASEPF 中插入一行。P6CASEL2 在不同的库中,比如说 LIBNAME2。是否可以设置 JobDescription?

4

3 回答 3

2

您确定FUNNAME.PGM要终止而不是挂起 MSGW 吗?检查QSYSOPR任何消息。


类 ProgramCall

注意:当程序在主机服务器作业中运行时,库列表将是用户配置文件中作业描述中指定的初始库列表。

于 2013-05-23T07:56:17.263 回答
1

所以我看到我的问题是我的库列表没有设置,并且由于某种原因,我们正在使用的用户没有职位描述。所以为了解决这个问题,我在调用之前添加了以下代码program.run()

CommandCall command = new CommandCall(system);
command.run("ADDLIBLE LIB(LIBNAME)");
command.run("ADDLIBLE LIB(LIBNAME2)");

这只需将此 LIBNAME 和 LIBNAME2 添加到用户的库列表中。

于 2013-05-23T10:12:48.520 回答
1

哦,是的,问题是未设置库列表......看看 Midrange.com 上的这个讨论,有不同的解决方法...... http://archive.midrange.com/java400-l/200909/msg00032 .html

... 德佩

于 2013-05-25T19:02:20.010 回答