我有许多CL程序,它们当前正在通过FTP将文件传输到生产服务器。
我们已经出于测试目的引入了新的iSeries测试服务器,并且这些程序需要从该新服务器上运行。但是,从测试服务器运行时的目标FTP地址应该不同。这些文件需要发送到相应的测试服务器。
为此添加了一个简单的程序调用,如下所示:
PGM PARM(&FTPERR)
DCL VAR(&SUCCES) TYPE(*CHAR) LEN(1)
DCL VAR(&FTPERR) TYPE(*CHAR) LEN(1)
DCL VAR(&TARGIP) TYPE(*CHAR) LEN(20) VALUE(' ')
DCL VAR(&ATTEMP) TYPE(*DEC) LEN(2 0) VALUE(0)
CALL PGM(GETFTPRPG) PARM('FTPMRCL' &TARGIP)
从上面可以看到,GETFTPRPG程序是新引入的程序调用,它根据程序名称和程序运行所在的服务器检索IP地址。
这很好,但是问题在于程序中声明的其他变量(具体来说,是程序中声明的第一个十进制变量)正在更改。在上面的示例中,&ATTEMP变量的值更改为04。有人可以建议可能的原因吗?
答案 0 :(得分:7)
CL通过引用传递变量。确保&TARGIP
及其对应的参数定义相同。看来GETFTPRPG
与CL程序定义的第二个参数不同(可能更长)。更改&TARGIP
的值(超过20个字符)后,它将覆盖内存中的&ATTEMP
的值。