【问题标题】:Return a value from cobol to rpg从cobol返回一个值到rpg
【发布时间】:2013-11-06 11:12:13
【问题描述】:

我从 rpgle 调用了一个 cobol 程序。我想将 cobol 程序中的值返回给 rpgle。我是这些新手,不确定我是否做对了。有人可以向我解释执行此操作的程序。下面是我在 rpgle 中用来调用 cobol 的命令。

callp prog(id:name);

在cobol中我使用了

working storage section.
linkage section.
01 newid.
01 newname.
procedure division using newid, newname.

如果在cobol中编辑值,newidnewname的值会自动传递给rpg还是有其他方法?如何将 cobol 中的值传回 rpgle。

【问题讨论】:

    标签: ibm-midrange cobol rpgle


    【解决方案1】:

    你有基本的权利。只要您在两个程序中都提供匹配的字段定义,那应该没问题。在 ILE COBOL 链接部分中,您需要添加参数名称所指内容的定义。您没有 PICLIKE 子句。

    在您的 ILE RPG 程序中,您需要定义一个原型来调用您的 COBOL 代码。原型中的参数定义需要 match the format of the parameters 在 COBOL 中。如果您在一侧使用压缩、分区或二进制整数,那么您必须在另一侧使用相同的参数。

    (见http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzase%2Fsc092540419.htm

    例如,在 RPG PROG1 中,您通常可能有类似的内容:

     D   someID                       7p 0                                                         
     D   someName                    10a                                                            
    
     D addInfo         PR                  EXTPROG("PROG2")                                                    
     D                                7p 0 
     D                               10a                                                            
    
             callp addInfo (someID:someName);
    
             // or omit the optional callp opcode
    
             addInfo (someID:someName);
    

    然后在 COBOL PROG2 中你可以有类似的东西:

      working storage section.
      linkage section.
      01 newid           pic s9(7)    packed-decimal.
      01 newname         pic x(10).
    
      procedure division using newid, newname.
    

    此时您最简单的选择是将它们编译为单独的程序。但也可以使用 ILE 技术将您的 COBOL 过程组合到最终的 RPG 程序对象中。但请留到下一次。

    【讨论】:

    • 感谢您的宝贵意见。我能够在我的 rpgle 程序中传递字符和检索。但是当我尝试传递整数值时,我收到十进制数据错误说a packed or zoned value does not contain valid numeric data. A digit and/or sign is invalid.
    • 我想通了。我将两个参数都作为字符类型传递。在 rpgle 中收到它后,我使用 %DEC 将其转换为数字。成功了,非常感谢。
    • @BillWoodger 我第一次尝试在 rpgle 中使用 Zoned decimal,但没有成功。然后我试着打包。在多次失败后,我选择了这种方法。
    • @PraveenSundar 常见的最佳实践会说不要将数字转换为字符,只是为了传递它们。查看我的编辑。
    • @WarrenT 最后,我做对了。早些时候我也试过这个。但是,我没有在我的 cobol 程序中指定 packed-decimal。现在我纠正了它。它运行良好。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2014-10-21
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多