给数据结构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定义数据结构,但没有对Dsqualifed制约用法,比较随意。

针对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                                  

注释:

目前银行核心采用引入数据源的途径,同时也是OS400RPGLE的运行机制:

  1. copybook;用copybook引进数据结构。

  2. plist+*entry,或者,原型定义接口;

  3. DsVYCOM1)是copybookPFSLCOM1)中没有带qualifed键字的DsVYCOM1)结构。

 

还有一点必须注意:

V6R1下,对PR,或PI定义是引用的数据结构Ds,需要对数据结构先做引用定义,把引用定义的ds再对PRPI做引用。代码如下:

dDs_App       ds                                      likedsVYCOM1

 

dDs_App2      ds                                    qualified

dDs_App                                                 likedsDs_App

 

DMyApp      pr

D Ds_App                                                likeds(Ds_App)

 

DMyApp      pi

D Ds_App                                                likeds(Ds_App)



 

补充qualifed的用法:
      (1) 在v5r4之后,所有的记录都可以在D表中定义likerec的记录ds结构。用likerec定义的记录结构DS都是qualifed的,无需对这个数据结构DS再做qualifed定义。
      likerec定义的数据结构ds不能做处理节点间的数据传递,必须用d表中定义的普通ds进行预先传递,再用后者做处理节点间的ds数据传递。

likerec可以相同记录格式的操作代码做读写操作,比如:
dDs_rec              ds                  likerec(apprec)
/free
    reade key  apprec ds_rec;
    ....
    update key apprec ds_rec;
/end-free
而普通定义的ds不能这样使用。

(2) 假设,数据结构Ds_A有字段a、b、c;数据结构Ds_B有字段c、a、d。
用RPGLE操作码EVAL-CORR在自由格式下,可以这样操作:
/free
    ......
    eval-corr Ds_A = Ds_B ; //把Ds_B字段a和c传递给Ds_A字段a和c
    ......
/end-free
 
09-26 19:14