给数据结构Ds带一个qualifed的帽子
写在前面的话:
目前,全国几乎以AS400平台为基础的银行核心都是基于AS400 V5R4之前的数据结构,而这些数据结构都没有qualifed键字制约。在AS400系统不断升级推动下,在AS400 操作系统V6R1下,RPGLE编译器和编辑器对一些rpgle编程有一定范围的严格规定,针对这些变化,本文用rpgle代码做解释性的说明,以便在银行核心升级维护工作时,可以有一个参照的文献,减少摸索探路的时间。
在V5R5下,数据结构可以这样使用:
DDs_AppDs Ds like(AppDs)
或者,
DDs_AppDs Ds like(AppDs)
D qualified
如果,数据结构App_Ds用键字qualifed制约,在V6R1下,
DDs_AppDs Ds likeDs(AppDs)
必须使用LlkeDS,不能直接使用Like键字,否则编辑器提示反白。
由于数据结构App_Ds使用了qualifed键字制约,在V6R1下,不能直接用这样的定义:
DDs_AppDs Ds likeDs(AppDs)
D qualified
定义结果肯定编辑器会提示反白,报错。
在V6R1下,RPGLE的编辑器对RPGLE语言的检查有着与V5R4许多不同的地方,如上所示。
由于应用系统的延续性,在V5R4之前的应用系统,很少使用类似LIKEDS的编程用法,在V5R4下,虽然已经大量使用了Ds定义数据结构,但没有对Ds的qualifed制约用法,比较随意。
针对V6R1下引用早期数据结构没有使用qualifed键字制约,而又试图在V6R1版本之上编程模式下,把早期的没有qualifed的数据结构用qualifed引进使用,转换代码例如:
/COPY PFSLCOM1
*
dDs_in ds likeds(VYCOM1)
*
dDs_in2 ds qualified
dDs_in likeds(Ds_in)
*
dC_VYCMICDE s like(VYCMICDE)
*
*plist 或者 prototype接口定义
/free
C_VYCMICDE= Ds_in.VYCMICDE ;
Return ;
/end-free
注释:
目前银行核心采用引入数据源的途径,同时也是OS400对RPGLE的运行机制:
copybook;用copybook引进数据结构。
plist+*entry,或者,原型定义接口;
Ds(VYCOM1)是copybook(PFSLCOM1)中没有带qualifed键字的Ds(VYCOM1)结构。
还有一点必须注意:
在V6R1下,对PR,或PI定义是引用的数据结构Ds,需要对数据结构先做引用定义,把引用定义的ds再对PR或PI做引用。代码如下:
dDs_App ds likeds(VYCOM1)
dDs_App2 ds qualified)
dDs_App likeds(Ds_App)
DMyApp pr
D Ds_App likeds(Ds_App)
DMyApp pi
D Ds_App likeds(Ds_App)
likerec可以相同记录格式的操作代码做读写操作,比如:
dDs_rec ds likerec(apprec)
/free
reade key apprec ds_rec;
....
update key apprec ds_rec;
/end-free
而普通定义的ds不能这样使用。