我已将一个服务程序绑定到程序对象。最初都具有相同的签名ID。后来,我在服务程序中当前存在的模块列表中添加了一个新模块。此时程序和服务程序都有不同的签名ID。
计划签名ID:
Service
Opt Program Library Activation Signature
SRVPGM1 AKSHAYM *IMMED 00000000000000000000FE56D41B36D1
服务程序签名ID:
Shared activation group . . . . . . . . . . . . : *NO
Current export signature . . . . . . . . . . . . : 0000000000D5D6C72E980395
EE694617
User profile . . . . . . . . . . . . . . . . . . : *USER
More...
现在,当我向该程序发出STRDBG和CALL时。我没有收到签名违规错误。
我在这里遗漏了什么。有人可以帮我这个吗?
答案 0 :(得分:3)
在DSPSRVPGM
命令输出上点击输入几次,直到您转到签名屏幕或只使用DSPSRVPGM SRVPGM(...) DETAIL(*SIGNATURE)
听起来先前的签名仍然有效。
通过在用于创建* SRVPGM对象的binder源中使用STRPGMEXP PGMLVL(*PRV)
块来启用此功能。我们的想法是,您可以在不强制重新编译现有呼叫者的情况下向* SRVPGM添加新导出。
然而,使用PGMLVL(*PRV)
并没有真正增加任何价值。只是增加了活页夹源的复杂性。
ILE的最佳做法是
STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MYSRV v1')
OPTION(*NOPASS)
遵循上述规则,您的服务程序可以得到增强,而无需重新制作或以其他方式影响调用其中程序的任何现有程序。即使使用PGMLVL(*PRV)
块,您也必须遵循上面的最后3条规则。因此:使用硬编码签名更简单,更容易。
如果在某些时候你必须强制重新编译呼叫者,那么只需更改* SRVPGM签名即可
STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MYSRV v2')
参考文献:ILE Concepts for RPG presentation by IBM's Barbara Morris
我建议在开头添加一条关于在最后添加新导出的注释,以及在每个导出的注释中添加数字,以强化订单不得更改的想法。
您可以使用STRPGMEXP命令的SIGNATURE参数设置签名
理想情况下,签名永远不会改变。