【问题标题】:Calling AS/400 RPG Programs from Java从 Java 调用 AS/400 RPG 程序
【发布时间】:2017-09-07 11:44:13
【问题描述】:

我想从 java 中调用 AS/400 RPG 程序,但遇到如下错误

com.ibm.as400.data.PcmlException:收到异常:[com.ibm.as400.access.ObjectDoesNotExistException] /QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM:对象不存在。 在 com.ibm.as400.data.ProgramCallDocument.callProgram(ProgramCallDocument.java:458) 在 CallRPG.main(CallRPG.java:34) 引起:com.ibm.as400.access.ObjectDoesNotExistException:/QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM:对象不存在。 在 com.ibm.as400.access.RemoteCommandImplRemote.runProgramOffThread(RemoteCommandImplRemote.java:595) 在 com.ibm.as400.access.RemoteCommandImplRemote.runProgram(RemoteCommandImplRemote.java:532) 在 com.ibm.as400.access.ProgramCall.run(ProgramCall.java:780) 在 com.ibm.as400.data.PcmlProgram.callProgram(PcmlProgram.java:681) 在 com.ibm.as400.data.PcmlDocument.callProgram(PcmlDocument.java:462) 在 com.ibm.as400.data.ProgramCallDocument.callProgram(ProgramCallDocument.java:445) ... 1 更多

这是我的java代码

import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400Message;
import com.ibm.as400.access.ProgramParameter;
import com.ibm.as400.data.PcmlException;
import com.ibm.as400.data.ProgramCallDocument;

public class CallRPG {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    AS400 as400 = null;

    String host = "10.2.62.7";
    String username = "USERNAME";
    String password = "PASSWORD";

    as400 = new AS400(host, username, password);

    if (as400 == null) {
        System.out.println("Connection Failed");
    } else {
        System.out.println("Connection Success");
    }
    ProgramCallDocument pcml;

    try {
        pcml = new ProgramCallDocument(as400, "getkursjav.pcml");
        pcml.setValue("GETKURSJAV.CCCKRS", "51");
        pcml.setValue("GETKURSJAV.IDXKRS", "5");

        // call the program
        boolean rc = pcml.callProgram("GETKURSJAV");
        if (rc == false) {
            System.out.println("Program failed");
        } else {

            int outputData = (int) pcml.getValue("GETKURSJAV.ZRTNKRS");
            System.out.println(outputData / 100000);            
        }
    } catch (PcmlException pe) {
        System.out.println(" Caught Exception ");
        pe.printStackTrace();
    } finally {
        System.exit(0);
    }

}

}

这是我的 pcml 文件

<pcml version="4.0">
   <program name="GETKURSJAV" path="/QSYS.LIB/%LIBL%.LIB/GETKURSJAV.PGM">
      <data name="CCCKRS" type="packed" length="2" precision="0" usage="input" />
      <data name="IDXKRS" type="packed" length="2" precision="0" usage="input" />
      <data name="ZRTNKRS" type="char" length="10" usage="output" />
   </program>
</pcml>

我的代码有什么问题? 我是否需要将 as400 CURLIB 和 PRGLIB 添加到我的 java 代码中?如果是,我该如何添加库?

【问题讨论】:

  • 旁注:if (as400 == null) 这是不可能的,因为你做了一个new
  • 这看起来像是库列表问题。您确定该程序在作业的库列表中吗?
  • 确定 %LIBL% 没问题? (不是 AS/400 人。)看起来像一个环境变量。

标签: java ibm-midrange rpg


【解决方案1】:

根据这篇文章,Calling RPG on the AS400 from Java, %LIBL%.LIB 是允许的...

但在PCML program tag的文档中没有具体显示

文档的这一部分,Integrated file system path names for server objects

我会尝试只使用
path="/QSYS.LIB/%LIBL%/GETKURSJAV.PGM"

【讨论】:

  • 嗨,感谢您的帮助。我一直将路径更改为path="/QSYS.LIB/%LIBL%/GETKURSJAV.PGM" 错误未显示,但现在结果为空白。
  • outputdata 在 java 中是一个 INT,但从 RPG 返回一个 CHAR...也许这是您的问题的一部分?
  • 我一直把输出改成CHAR,结果还是空白。
  • 它应该返回什么?你确定 RPG 程序会返回吗?可能应该在单独的问题中发布 RPG 代码。
  • 嗨,问题解决了。我已经在我的 java 代码中添加了ADDLIBLE LIB。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多