问:(请教-服务程序Service Program如何创建


我编写了Service Program如下:
Service Program Name:CBJSRVPGM.RPGLE---------------源码建于CBJSRC库,SRCTEST下,编译在CBJRUNSRC下
     H NOMAIN
     d/copy srcdfn,cbjsrvpgmi
     DVDS_M1           DS
     d/copy srcdfn,cmodule01i
     DVDS_M2           DS
     d/copy srcdfn,cmodule02i
      *
     P CBJSRV01Y       B                   EXPORT
     D CBJSRV01Y       PI
     D VDS_TM1                             LIKE(VDS_M1)
      *
      *
     C                   CALLB     'CMODULE01'
     C                   PARM                    VDS_TM1
     C                   RETURN
     P CBJSRV01Y       E
      *
     P CBJSRV02Y       B                   EXPORT
     D CBJSRV02Y       PI
     D VDS_TM2                             LIKE(VDS_M2)
      *
     C                   CALLB     'CMODULE02'
     C                   PARM                    VDS_TM2
     C                   RETURN
     P CBJSRV02Y       E

 CMODULE01和CMODULE02已经变异为MODULE----源码建于CBJSRC库,SRCTEST下,MODULE编译在CBJRUNSRC下

.BND文件(CBJSRVPGM.BND)-------源码在CBJSRC库,SRCTEST2下
             STRPGMEXP  SIGNATURE('CBJSRVPGM')
             EXPORT     SYMBOL(CBJSRV01Y)
             EXPORT     SYMBOL(CBJSRV02Y)
             ENDPGMEXP

请各位指教,以上是否有问题。
我先将CBJSRVPGM.RPGLE变异为MODULE,然后再使用CRTSRVPGM命令创建服务程序,
请问该命令中各项如何填写


答:

首先,你的代码中有多处错误:
1)        如果把程序CBJSRVPGM.RPGLE作为服务程序,且你的代码是采用.BND定义模式,就应该在服务程序CBJSRVPGM中module定义,EXPORT  SYMBOL(CBJSRVPGM),即自定义module;
2)        服务程序CBJSRVPGM代码中漏写了return操作码(因为你是采用nomain参数);
3)        看你的代码结构,因为module CBJSRV01Y、CBJSRV02Y都是与服务程序代码放在同一个module CBJSRVPGM代码中,无需在.BND文件再定义EXPORT  SYMBOL(CBJSRV01Y)和EXPORT  SYMBOL(CBJSRV02Y);

做好这些调整后,就可以生成服务程序CBJSRVPGM了:
Service program …CBJSRVPGM
  Library …………… CBJSRC
Module ………………CBJSRVPGM
  Library …………… CBJSRC

Export ……………….*SRCFILE
Export source file .. SRCTEST2
  Library …………… CBJSRC

注意:命令执行后要查看joblog,日志。

改进的地方:
把服务程序外部调用程序CMODULE01和CMODULE02也生成module后,也用BND文件定义:
             EXPORT     SYMBOL(CMODULE01)
             EXPORT     SYMBOL(CMODULE02)

这样做的好处:一旦module CMODULE01,或module CMODULE02,变化重新生成,只做update服务程序CBJSRVPGM,相应的module CMODULE01,或module CMODULE02更新,而无需对*pgm CMODULE01或*pgm CMODULE02重新生成。

Good Luck,

Passthru

09-13 05:20