忙于尝试Call RPG function from Java并从this获得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 库中的文件P6CASEL2 *未找到LIBL或缺少内联数据文件。 在OPEN期间出现错误消息CPF4101 无法解析对象YOBPSSR。类型和子类型X'0201'权限
FUNNAME通过名为P6CASEL2的视图在表P6CASEPF中插入一行。 P6CASEL2在一个不同的库中让我们说LIBNAME2。是否可以设置JobDescription?
答案 0 :(得分:2)
你确定FUNNAME.PGM
正在终止而不是挂着MSGW吗?检查QSYSOPR
是否有任何消息。
<小时/> Class ProgramCall:
注意:当程序在主机服务器作业中运行时,库列表将是用户配置文件中作业说明中指定的初始库列表。
答案 1 :(得分:1)
所以我看到我的问题是我的库列表没有设置,并且出于某种原因,我们正在使用的用户没有作业描述。所以为了解决这个问题,我在调用program.run()
CommandCall command = new CommandCall(system);
command.run("ADDLIBLE LIB(LIBNAME)");
command.run("ADDLIBLE LIB(LIBNAME2)");
这只是将此LIBNAME和LIBNAME2添加到用户的库列表中。
答案 2 :(得分:1)
哦,是的,问题是库列表未设置...看看Midrange.com上的这个讨论,有不同的解决方法... http://archive.midrange.com/java400-l/200909/msg00032.html
... DEPE