如何通过调用 rpgle 程序来更改 CL 中的变量

How to change a variable in CL by calling a rpgle program

提问人:As4rikru 提问时间:5/30/2021 更新时间:5/30/2021 访问量:745

问:

我需要为 AS400 中的 ROBOT 进行日期计算(内置 pgm 无法做到这一点),用于保留的命令变量。

机器人正在调用我的 cl 程序,而 cl 程序正在调用我的 rpgle-program(因为 cl 程序无法进行我想要的日期计算)。

如何将 rpgle 程序中的日期计算结果返回到 CL 变量?这样机器人就可以取到它。

我可以通过调用 rpgle 来更新 cl 程序中的变量吗?但是我该怎么做。

变量 参数传递 ibm-midrange rpgle cl

评论

1赞 PoC 5/31/2021
除了 RockBoro 的解释之外,“按地址”意味着,只是 C 意义上的编程指针。也许这有助于理解。

答:

2赞 RockBoro 5/30/2021 #1

从 to 传递的参数按地址传递。因此,程序在参数中放置的任何值都将返回给程序。CLRPGRPGCL

下面是一个调用 RPG 的 CL 程序:

             PGM                                                             
                                                                             
             dcl        &rtndate *char 10                                    
                                                                             
/* call RPG program.  RPG program sets &rtnDate parm to date of yesterday */ 
/* in *ISO format.                                                        */ 
             call       test0290r parm(&rtnDate)                             
                                                                             
             SNDPGMMSG  MSG('yesterday date:' *BCAT &RTNDATE)                
                                                                             
             ENDPGM  

和所谓的RPG程序:

** test0290r: return yesterdate as iso date.                 
h option(*srcstmt:*nodebugio)                                
                                                             
** --------------------------- test0290r --------------------
** test0290r: return yesterdate as iso date.                 
dtest0290r        pr                  extpgm('TEST0290R')    
d outDate                       10a                          
                                                             
** --------------------------- test0290r --------------------
** test0290r: call open api using ifs_openNew.               
dtest0290r        pi                                         
d outDate                       10a                          
                                                             
d ch80            s             80a   varying                
d yesterday_date  s               d                          
 /free                                                       
      yesterday_date = %date(%timestamp( )) - %days(1) ;     
      outDate     = %char(yesterday_date:*iso) ;             
                                                             
      *inlr       = '1' ;                                    
      return ;                                               
 /end-free