- 论坛徽章:
- 0
|
400方面的编程,我最讨厌的就是多member的这个概念,
因为要查看某个member的内容,一定要用个ovrdbf(我习惯用strsql来查看)
ovrdbf时有个范围选项,一直不是很清楚,最近研究了一下,供大家参考,欢迎讨论
参数OVRSCOPE有3个选项,*JOB,*CALLLVL,*ACTGRPDFN
*JOB就是整个job的范围,这是一个最大的范围,所有程序都受此影响
*CALLLVL和程序调用的先后顺序有关(调用链)
这里有个call level的概念,先调用的程序的call level小,后调用的大
*ACTGRPDFN是整个group的范围
这里有个group的概念,编译程序时有个参数DFTACTGRP可指定group,
如果不指定,则会到一个叫*DFTACTGRP的组中,所有rpg3的程序都会编译到该组
建立:
*JOB,*CALLLVL比较简单,不会变化
*ACTGRPDFN最终的范围取决于运行该命令的程序
如果该程序运行在某个group中,则范围就是该group
如果该程序运行在*DFTACTGRP,则范围是该程序对应的call level
重建:
如果对一个file Ovrdbf后,又对此file做一次ovrdbf会发生什么呢
答案是后一次会替换前一次,也就是说最后一次有效,但前提是相同范围内
*JOB的范围是整个job,只要在同一个job,后建的会将前面的替换
*CALLLVL的范围是当前的call level
*ACTGRPDFN的范围是当前的group
使用:(重要)
ovrdbf起作用的时候是打开文件的时候
如果对一个file同时存在3种不同范围的ovrdbf,究竟会用哪个呢?
这要取决于打开这个文件的程序
程序的group是*DFTACTGRP的,首先会找job范围的ovrdbf,如果没有,则找call level范围的
注意,如果在不同的call level都有定义ovrdbf,则会找call level最小的那个
程序的group不是*DFTACTGRP的,首先会找job范围的ovrdbf,如果没有,则找group范围的
如果group中还没有,则会找call level范围的
生存期:
ovrdbf会在对应的范围结束时自动消失
*job会在job结束时消失,*CALLLVL会在该call level结束时消失
*ACTGRPDFN会在该group结束时消失
删除:
可在对应的范围内删除
*job的可在job内删除,*CALLLVL的可在该call level里删除
*ACTGRPDFN的可在该group内删除
注意,在同一个组中有很多程序,他们调用的先后顺序不同,call level也不同
比如程序a调用程序b,在a里建的范围为group的ovrdbf,可在程序b里删除
程序b里建的范围为group的ovrdbf不会应为程序b的终止而消失(参看生存期) |
|