免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3783 | 回复: 8
打印 上一主题 下一主题

求助:如何实现从CMD向PGM返回参数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-09 18:05 |只看该作者 |倒序浏览
如何实现从CMD向PGM返回参数?

创建了一个cmd(记为cmd1),里面调用了clp程序(记为clp1)实现关联功能,cmd1定义结构如下:见cmd1.jpg

现在在命令行运行此cmd时,已经实现了预期功能。

但是在后台用测试程序clp程序(记为clp2)执行此cmd时,无法得到预想的返回参数(&status),
在网上查询了此方面内容,有种建议时在设定cmd1程序的参数时,需要加上RTNVAL(*YES)属性,但是加上后cmd程序无法正常compile


CMD1(ADDBCHPARM)
             CMD        PROMPT('ADD BATCH SECHEDULE PARAM')         
             PARM       KWD(STATUZ)  TYPE(*CHAR) LEN(3) RSTD(*NO) +        
                        MIN(0) PROMPT('STATUZ:')   

CLP1(CG001)
      PGM     PARM(&STATUZ)                                          
                     DCL  VAR(&STATUZ)      TYPE(*CHAR) LEN(3)      
          MONMSG     MSGID(CPF0000 CBE0000)                          
                    CHGVAR   VAR(&STATUZ) VALUE('ERR')               
  END:        ENDPGM

CLP2

      PGM                                                                 
        DCL  VAR(&STATUZ)      TYPE(*CHAR) LEN(3)                        
              ADDBCHPARM               STATUZ(&STATUZ)                    
             SNDPGMMSG  MSG('THE STATUZ IS:' *CAT &STATUZ)               
             GOTO      CMDLBL(RETURN)                                    
RETURN:     RETURN                                                      
             ENDPGM           
情况比较紧急
想问问各位兄台,是否遇到过类似情况,应该如何解决?
不胜感激...

[ 本帖最后由 starling_lee 于 2008-4-9 19:25 编辑 ]

CMD1.JPG (129.3 KB, 下载次数: 28)

cmd1

cmd1

论坛徽章:
0
2 [报告]
发表于 2008-04-09 18:53 |只看该作者
看了下代码,首先CLP1为什么开头定义那么多变量,而仅为“CHGVAR   VAR(&STATUZ) VALUE('ERR')” ?
还有,为什么要用RETURN?

论坛徽章:
0
3 [报告]
发表于 2008-04-09 18:58 |只看该作者
还有,CLP1是否就是在CLP2:ADDBCHPARM调用的程序呢。

ADDBCHPARM            BSCHEDNAM(&BSCHEDNAM)        +     
                                   BPRCEFFDAT(&BPRCEFFDAT)       +     
                                     BRUNTYPE(&BRUNTYPE)         +     
                                    BRUNOCCUR(&BRUNOCCUR)        +     
                                     PARMAREA(&PARMAREA)         +     
                                       STATUZ(&STATUZ)                 

你能否说说你想实现什么目的啊。

程序看去挺烦琐的。

论坛徽章:
0
4 [报告]
发表于 2008-04-09 19:03 |只看该作者
原帖由 qingzhou 于 2008-4-9 18:53 发表
看了下代码,首先CLP1为什么开头定义那么多变量,而仅为“CHGVAR   VAR(&STATUZ) VALUE('ERR')” ?
还有,为什么要用RETURN?


qingzhou好

是这样的,这个程序本来是要继续往下调用其他子程序的,那些参数也是用来往下传的(也正是CMD要实现的真正功能所在),
但是因为放在后台被clp调用时,发现无法返回参数,所以做了简要处理,只直接给status赋了值,定义部分暂时没有删除


另外,关于return的问题,没有太注意,不知道会不会有影响,一会儿试验一下

论坛徽章:
0
5 [报告]
发表于 2008-04-09 19:05 |只看该作者
原帖由 qingzhou 于 2008-4-9 18:58 发表
还有,CLP1是否就是在CLP2:ADDBCHPARM调用的程序呢。

ADDBCHPARM            BSCHEDNAM(&BSCHEDNAM)        +     
                                   BPRCEFFDAT(&BPRCEFFDAT)       +     
          ...


是的,CLP1就是CMD定义中的“ CG001  ”,也就是CMD调用的程序,而CLP2是用来测试CMD用的测试程序

这个CMD实现的功能不是在AS/400上直接用的,而是应用于另外一个AS/400的框架上,但原理是和AS/400相通的,后来的调用比较繁琐,这里省略了

谢谢QINGZHOU的答复

[ 本帖最后由 starling_lee 于 2008-4-9 19:26 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-04-09 19:09 |只看该作者
写一个CLP程序,

1。首先,先考虑思路。
想实现什么目的,通过哪些核心语句实现。

2。其次,考虑需要用到哪些变量。

3。写好初稿后,调式程序,跟踪后台joblog,看看程序运行过程是否按照自己的构思来实现。

4。程序调式完毕,再综合考虑特殊情况,然后再次修正和测试程序,尤其有注意程序判断逻辑。

5。程序都实现后,最后再考虑将来的拓展性,可在这个基础上更加完善和加强程序的功能。一个个加进去,这样程序会更加强大和实用。


你想实现什么目的呢,我仔细看了你的代码还是晕晕的,没看明白目的。
你说说看。。。

论坛徽章:
0
7 [报告]
发表于 2008-04-09 19:19 |只看该作者

回复 #6 qingzhou 的帖子

不好意思,应为比较着急,所以代码保留了原来的一部分内容,有加了此次的测试点,所以看得会比较晕

我把代码重新修改后贴一下(刚刚运行过,还是没有传过来参数)

CMD1(ADDBCHPARM)
             CMD        PROMPT('ADD BATCH SECHEDULE PARAM')         
             PARM       KWD(STATUZ)  TYPE(*CHAR) LEN(3) RSTD(*NO) +        
                        MIN(0) PROMPT('STATUZ:')         


CLP1(CG001)
      PGM     PARM(&STATUZ)                                          
                     DCL  VAR(&STATUZ)      TYPE(*CHAR) LEN(3)      
          MONMSG     MSGID(CPF0000 CBE0000)                          
                    CHGVAR   VAR(&STATUZ) VALUE('ERR')               
  END:        ENDPGM                                                


CLP2

      PGM                                                                 
        DCL  VAR(&STATUZ)      TYPE(*CHAR) LEN(3)                        
              ADDBCHPARM               STATUZ(&STATUZ)                    
             SNDPGMMSG  MSG('THE STATUZ IS:' *CAT &STATUZ)               
             GOTO      CMDLBL(RETURN)                                    
RETURN:     RETURN                                                      
             ENDPGM                                                      

谢谢QINGZHOU的回复

[ 本帖最后由 starling_lee 于 2008-4-9 19:23 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-04-09 19:30 |只看该作者
原帖由 qingzhou 于 2008-4-9 19:09 发表
写一个CLP程序,

1。首先,先考虑思路。
想实现什么目的,通过哪些核心语句实现。

2。其次,考虑需要用到哪些变量。

3。写好初稿后,调式程序,跟踪后台joblog,看看程序运行过程是否按照自己的构思来 ...


谢谢qingzhou的建议

这次发贴的主要目的是问
为什么在clp2程序中的&status值("ERR"),不能通过cmd1的参数返回到clp1中呢?

正常来说pgm之间的传参应该是相互的,而cmd和pgm之间只能是单向呢?
或者应该通过什么方法来解决呢?

论坛徽章:
0
9 [报告]
发表于 2008-04-09 19:42 |只看该作者
原帖由 starling_lee 于 2008-4-9 19:30 发表


谢谢qingzhou的建议

这次发贴的主要目的是问
为什么在clp2程序中的&status值("ERR"),不能通过cmd1的参数返回到clp1中呢?

正常来说pgm之间的传参应该是相互的,而cmd和pgm之间只能是单向呢?
或 ...


PGM之间传参是完全可以的,比如:CLP与CLP之间,CLP和RPG之间。

CMD向CLP传参,没测试过,但我建议你的CMD程序至少要设定Default value值,不然你在CLP里面调用CMD时,CLP程序都无法知道你传了什么参数给它。

改该CMD,PARM语句加入 DFT('ERR')试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP