3

这个问题专门与JT400类有关ProgramCallDocument,用它的方法callProgram(String ProgramName)

我已经尝试在 try/catch 中调用调用 - 但它没有抛出异常,调试器进入callProgram方法,只是无限期地坐在那里。

此处提供了有关 API 的少量特定信息:

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.toolbox.doc/rzahhxpcmlusing.htm

这是我正在运行的代码:

AS400 as400System = AS400Factory.getAS400System()
ProgramCallDocument programCallDocument = new ProgramCallDocument(as400System, "com.sample.xpcml.Sample.xpcml")
programCallDocument.setStringValue("sampleProgramName.value", sampleValue)

Boolean didProgramCallDocumentRunSuccessfullyOnTheAS400 = programCallDocument.callProgram("sampleProgramName")

该片段的最后一行是刚刚坐在那里的那个。为简洁起见,我省略了 try/catch。

构造函数使用的 XPCML 文件ProgramCallDocument只是 IBM 用于指定程序调用的参数长度和类型的专有 XML 格式。如果有帮助,我可以回来添加它,但是ProgramCallDocument构造函数在 XML 上运行验证,并且没有出现任何验证错误。我不熟悉 JT400,或者它是如何进行程序调用的,所以任何帮助都会很棒。

作为进一步说明,今天对相关问题进行了更多挖掘,我还发现了这个 SO 帖子:

从 Java 监视和处理 IBM i 系列 (AS/400) 上作业的 MSGW 消息

我认为这与这个问题有关,因为它是关于在 Java/Groovy 端捕获 MSGW 状态的方法。

4

1 回答 1

3

被调用程序很可能进入 MSGW 状态(错误)。

检查WRKACTJOB JOB(QZRCSRVS)以查找程序调用作业并查看状态以及查看作业日志。


使用CommandCall类或作为JDBC存储过程 调用本机程序可能更容易。

下面是 Groovy 中CommandCall用法的示例:

sys = AS400Factory.AS400System
cmd = new CommandCall(sys)
if (!cmd.run "CALL MYLIB.MYPGM PARM('${sampleValue}')") {
    println cmd.messageList
}
于 2014-03-21T17:23:02.210 回答