DFU, Query, SQL

75. DFUが生成するDSPFソースとは

DFUを最後に生成するときに次のようにDSPFの保管を指定すると
DSPFソースを生成してくれる。
_

                          DFU プログラム定義の終了                          
                                                                            
 選択項目を入力して,実行キーを押してください。                             
                                                                            
   プログラムの保管 . . . . . . .   Y               Y=YES, N=NO             
   プログラムの実行 . . . . . . .   Y               Y=YES, N=NO             
     選択項目 Y=YES の場合                                                  
       実行のタイプ . . . . . . .   1               1= 変更, 2= 表示       
   プログラムの変更 . . . . . . .   N               Y=YES, N=NO             
   DDS ソースの保管 . . . . . . .   Y               Y=YES, N=NO             
                                                                            
   プログラムの保管 Y=YES の場合                                            
     プログラム . . . . . . . . .   @HINSHU         名前                    
       ライブラリー . . . . . . .     QTROBJ        名前, *CURLIB, . . .   
     権限 . . . . . . . . . . . .   *CHANGE         名前, *LIBCRTAUT, . . .
     テキスト . . . . . . . . . .   @HINSHU                                 
                                                                            
   DDS ソースの保管 Y=YES の場合                                            
     ソース・ファイル . . . . . .   QDSPSRC         名前                    
       ライブラリー . . . . . . .     QTRSRC        名前, *CURLIB, . . .   
     ソース・メンバー . . . . . .   @HINSHU         名前                    
                                                                            

[解説]

DSPFソース・ファイルの名前だけでなく必ずDDS ソースの保管も併せて Yに指定しないと
DDSソースは生成されない。
生成されたDSPFソースは次のとおりです。

[DFUによって生成されたDSPFソースの例]

0001.00      A*%%TS  SD  20240427  102752  QTR         REL-V7R1M0  5770-WDS           
0002.00      A*%%EC                                                                   
0003.00      A                                      DSPSIZ(24 80 *DS3)                
0004.00      A                                      PRINT                             
0005.00      A                                      HELP                              
0006.00      A                                      HLPSCHIDX(*LIBL/QHPW1)            
0007.00      A                                      ALTHELP                           
0008.00      A                                      HLPTITLE(' データ入力画面 ')      
0009.00      A                                      HLPPNLGRP('DFU/DESL/GEN' QHDZDF1) 
0010.00      A          R B100000                   SFL                               
0011.00      A*%%TS  SD  20240427  102752  QTR         REL-V7R1M0  5770-WDS           
0012.00      A                                      CHANGE(01)                        
0013.00      A                                      SETOF(02)                         
0014.00      A                                      SETOF(03)                         
0015.00      A                                      SETOF(04)                         
0016.00      A                                      SETOF(05)                         
0017.00      A                                      SETOF(06)                         
0018.00      A                                      SETOF(07)                         
0019.00      A                                      SETOF(08)                         
0020.00      A                                      SETOF(09)                         
0021.00      A                                      SETOF(10)                         
0022.00      A                                      SETOF(11)                         
0023.00      A                                      SETOF(12)                         
0024.00      A                                      SETOF(13) 
0025.00      A                                      SETOF(14) 
0026.00      A                                      SETOF(15) 
0027.00      A                                      SETOF(16) 
0028.00      A                                      SETOF(17) 
0029.00      A                                      SETOF(18) 
0030.00      A                                      SETOF(19) 
0031.00      A                                      SETOF(20) 
0032.00      A                                      SETOF(21) 
0033.00      A                                      SETOF(22) 
0034.00      A                                      SETOF(23) 
0035.00      A                                      SETOF(24) 
0036.00      A                                      SETOF(25) 
0037.00      A                                      SETOF(30) 
0038.00      A                                      SETOF(31) 
0039.00      A                                      SETOF(32) 
0040.00      A                                      SETOF(33) 
0041.00      A                                      SETOF(34) 
0042.00      A                                      SETOF(35) 
0043.00      A                                      SETOF(36) 
0044.00      A                                      SETOF(37) 
0045.00      A                                      SETOF(38) 
0046.00      A                                      SETOF(39) 
0047.00      A                                      SETOF(40) 
0048.00      A                                      SETOF(41) 
0049.00      A                                      SETOF(42) 
0050.00      A                                      SETOF(43) 
0051.00      A                                      SETOF(44) 
0052.00      A                                      SETOF(45) 
0053.00      A                                      SETOF(46) 
0054.00      A                                      SETOF(47) 
0055.00      A                                      SETOF(48) 
0056.00      A                                      SETOF(49) 
0057.00      A                                      SETOF(50) 
0058.00      A                                      SETOF(51) 
0059.00      A                                      SETOF(52) 
0060.00      A                                      SETOF(53) 
0061.00      A                                      SETOF(54) 
0062.00      A                                      SETOF(55) 
0063.00      A                                      SETOF(56) 
0064.00      A                                      SETOF(57) 
0065.00      A                                      SETOF(58) 
0066.00      A                                      SETOF(59) 
0067.00      A                                      SETOF(60) 
0068.00      A                                      SETOF(61) 
0069.00      A                                      SETOF(62) 
0070.00      A                                      SETOF(63) 
0071.00      A                                      SETOF(64) 
0072.00      A                                      SETOF(65)
0073.00      A                                      SETOF(66)
0074.00      A                                      SETOF(67)
0075.00      A                                      SETOF(68)
0076.00      A                                      SETOF(69)
0077.00      A                                      SETOF(70)
0078.00      A                                      SETOF(71)
0079.00      A                                      SETOF(72)
0080.00      A                                      SETOF(73)
0081.00      A                                      SETOF(74)
0082.00      A                                      SETOF(75)
0083.00      A                                      SETOF(76)
0084.00      A                                      SETOF(77)
0085.00      A                                      SETOF(78)
0086.00      A                                      SETOF(79)
0087.00      A                                      SETOF(80)
0088.00      A                                      SETOF(81)
0089.00      A                                      SETOF(82)
0090.00      A                                      SETOF(83)
0091.00      A                                      SETOF(84)
0092.00      A                                      SETOF(85)
0093.00      A                                      SETOF(86)
0094.00      A                                      SETOF(87)
0095.00      A                                      SETOF(88)
0096.00      A                                      SETOF(89)       
0097.00      A                                      SETOF(90)       
0098.00      A                                      SETOF(91)       
0099.00      A                                      SETOF(92)       
0100.00      A                                      SETOF(93)       
0101.00      A                                      SETOF(94)       
0102.00      A                                      SETOF(95)       
0103.00      A                                      SETOF(96)       
0104.00      A                                      SETOF(97)       
0105.00      A                                      SETOF(98)       
0106.00      A                                      SETOF(99)       
0107.00      A  01                                  SFLNXTCHG       
0108.00      A                                  4  2' 商品コード :' 
0109.00      A N16                                  DSPATR(HI)      
0110.00      A N04                                  DSPATR(ND)      
0111.00      A            B100000000    10A  B  4 16CHGINPDFT       
0112.00      A                                      CHECK(FE)       
0113.00      A  08                                  DSPATR(RI)      
0114.00      A N04                                  DSPATR(ND)      
0115.00      A  22                                  DSPATR(PR)      
0116.00      A N22                                  DSPATR(UL)      
0117.00      A  26N22                               DSPATR(PC)      
0118.00      A                                      CHANGE(26)      
0119.00      A  09                                  DUP(02)         
0120.00      A  23                                  DSPATR(HI)   
0121.00      A  05 06N21                            CHECK(ER)    
0122.00      A                                  5  2' 商品名 :'  
0123.00      A  24 17                               DSPATR(HI)   
0124.00      A N17                                  DSPATR(ND)   
0125.00      A            B100000001    24O  B  5 16CHGINPDFT    
0126.00      A                                      CHECK(FE)    
0127.00      A  03                                  DSPATR(RI)   
0128.00      A N17                                  DSPATR(ND)   
0129.00      A N19                                  DSPATR(PR)   
0130.00      A  19                                  DSPATR(UL)   
0131.00      A  27 19                               DSPATR(PC)   
0132.00      A                                      CHANGE(27)   
0133.00      A  09                                  DUP(02)      
0134.00      A  23 17                               DSPATR(HI)   
0135.00      A                                  6  2' 単価 :'    
0136.00      A  24 17                               DSPATR(HI)   
0137.00      A N17                                  DSPATR(ND)   
0138.00      A            B100000002     7S 0B  6 16CHGINPDFT    
0139.00      A                                      CHECK(RB)    
0140.00      A  03                                  DSPATR(RI)   
0141.00      A N17                                  DSPATR(ND)   
0142.00      A N19                                  DSPATR(PR)   
0143.00      A  19                                  DSPATR(UL)   
0144.00      A  28 19                               DSPATR(PC)              
0145.00      A                                      CHANGE(28)              
0146.00      A  09                                  DUP(02)                 
0147.00      A  23 17                               DSPATR(HI)              
0148.00      A                                  7  2' 品種コード :'         
0149.00      A  24 17                               DSPATR(HI)              
0150.00      A N17                                  DSPATR(ND)              
0151.00      A            B100000003     4A  B  7 16CHGINPDFT               
0152.00      A                                      CHECK(FE)               
0153.00      A  03                                  DSPATR(RI)              
0154.00      A N17                                  DSPATR(ND)              
0155.00      A N19                                  DSPATR(PR)              
0156.00      A  19                                  DSPATR(UL)              
0157.00      A  29 19                               DSPATR(PC)              
0158.00      A                                      CHANGE(29)              
0159.00      A  09                                  DUP(02)                 
0160.00      A  23 17                               DSPATR(HI)              
0161.00      A  05 06 02                                                    
0162.00      AO 05 06 12                            CHECK(ER)               
0163.00      A                                      ' '                     
0164.00      A          R C100000                   SFLCTL(B100000)         
0165.00      A*%%TS  SD  20240427  102752  QTR         REL-V7R1M0  5770-WDS 
0166.00      A                                      BLINK                   
0167.00      A                                      CHANGE(27)              
0168.00      A                                      SETOF(01)
0169.00      A  02                                  CF02(02) 
0170.00      A  03                                  CA03(03) 
0171.00      A  04                                  CF04(04) 
0172.00      A  05                                  CA05(05) 
0173.00      A  06                                  CA06(06) 
0174.00      A  07                                  CF07(07) 
0175.00      A  08                                  CF08(08) 
0176.00      A  09                                  CF09(09) 
0177.00      A  10                                  CF10(10) 
0178.00      A  11                                  CF11(11) 
0179.00      A  12                                  CF12(12) 
0180.00      A  13                                  CF13(13) 
0181.00      A  14                                  CF14(14) 
0182.00      A  15                                  CF15(15) 
0183.00      A  16                                  CF16(16) 
0184.00      A  17                                  CF17(17) 
0185.00      A  18                                  CF18(18) 
0186.00      A  19                                  CF19(19) 
0187.00      A  20                                  CF20(20) 
0188.00      A  21                                  CF21(21) 
0189.00      A  22                                  CA22(22) 
0190.00      A  23                                  CF23(23) 
0191.00      A  24                                  CF24(24) 
0192.00      A  25                                  PAGEDOWN(25)                      
0193.00      A  26                                  PAGEUP(26)                        
0194.00      A  33                                  HOME(33)                          
0195.00      A                                      SETOF(29)                         
0196.00      A                                      SETOF(30)                         
0197.00      A                                      SETOF(31)                         
0198.00      A                                      SETOF(32)                         
0199.00      A                                      SETOF(34)                         
0200.00      A                                      SETOF(35)                         
0201.00      A                                      SFLSIZ(0001)                      
0202.00      A                                      SFLPAG(0001)                      
0203.00      A  30                                  SFLDSPCTL                         
0204.00      A  28                                  SFLDSP                            
0205.00      A  27                                  SFLCLR                            
0206.00      A  31                                  SFLINZ                            
0207.00      A  29                                  SFLDLT                            
0208.00      A  32                                  LOCK                              
0209.00      A          H                           HLPPNLGRP('DFU/DESL/TIMO' QHDZDF1)
0210.00      A                                      HLPARA(01 001 01 080)             
0211.00      A          H                           HLPPNLGRP('DFU/DESL/FOFI' QHDZDF1)
0212.00      A                                      HLPARA(02 001 02 080)             
0213.00      A          H                           HLPPNLGRP('DFU/DESL/FKEY' QHDZDF1)
0214.00      A                                      HLPARA(22 001 23 080)             
0215.00      A                                  1  2'@SHOHIN                          
0216.00      A                                        '                      
0217.00      A                                  1 49' モード  . . :'         
0218.00      A            C1000005      14A  O  1 66                         
0219.00      A                                  2  2' 様式  . . . . :'       
0220.00      A            C1000007      10A  B  2 21                         
0221.00      A  42                                  DSPATR(PC)               
0222.00      A  42                                  DSPATR(RI)               
0223.00      A                                      CHANGE(28)               
0224.00      A                                  2 49' ファイル  . :'         
0225.00      A            C1000012      10A  O  2 66                         
0226.00      A          R ERRMSG                    SFL                      
0227.00      A*%%TS  SD  20240427  102752  QTR         REL-V7R1M0  5770-WDS  
0228.00      A                                      SFLMSGRCD(24)            
0229.00      A            DUMMY1                    SFLMSGKEY                
0230.00      A            DUMMY2                    SFLPGMQ(10)              
0231.00      A          R ERRCTL                    SFLCTL(ERRMSG)           
0232.00      A*%%TS  SD  20240427  102752  QTR         REL-V7R1M0  5770-WDS  
0233.00      A                                      OVERLAY                  
0234.00      A                                      BLINK                    
0235.00      A                                      SETOF(01)                
0236.00      A  02                                  CF02(02)                 
0237.00      A  03                                  CA03(03)                 
0238.00      A  04                                  CF04(04)                 
0239.00      A  05                                  CA05(05)                 
0240.00      A  06                                  CA06(06)     
0241.00      A  07                                  CF07(07)     
0242.00      A  08                                  CF08(08)     
0243.00      A  09                                  CF09(09)     
0244.00      A  10                                  CF10(10)     
0245.00      A  11                                  CF11(11)     
0246.00      A  12                                  CF12(12)     
0247.00      A  13                                  CF13(13)     
0248.00      A  14                                  CF14(14)     
0249.00      A  15                                  CF15(15)     
0250.00      A  16                                  CF16(16)     
0251.00      A  17                                  CF17(17)     
0252.00      A  18                                  CF18(18)     
0253.00      A  19                                  CF19(19)     
0254.00      A  20                                  CF20(20)     
0255.00      A  21                                  CF21(21)     
0256.00      A  22                                  CA22(22)     
0257.00      A  23                                  CF23(23)     
0258.00      A  24                                  CF24(24)     
0259.00      A  25                                  PAGEDOWN(25) 
0260.00      A  26                                  PAGEUP(26)   
0261.00      A  33                                  HOME(33)     
0262.00      A                                      SETOF(27)    
0263.00      A                                      SETOF(28)    
0264.00      A                                      SETOF(29)               
0265.00      A                                      SETOF(30)               
0266.00      A                                      SETOF(31)               
0267.00      A                                      SETOF(32)               
0268.00      A                                      SETOF(34)               
0269.00      A                                      SETOF(35)               
0270.00      A                                      SFLSIZ(0020)            
0271.00      A                                      SFLPAG(0001)            
0272.00      A  30                                  SFLDSPCTL               
0273.00      A  28                                  SFLDSP                  
0274.00      A  27                                  SFLCLR                  
0275.00      A  31                                  SFLINZ                  
0276.00      A  29                                  SFLDLT                  
0277.00      A  32                                  LOCK                    
0278.00      A  34                                  SFLEND                  
0279.00      A            MSGQ                      SFLPGMQ(10)             
0280.00      A          R FKEYS                                             
0281.00      A*%%TS  SD  20240427  102752  QTR         REL-V7R1M0  5770-WDS 
0282.00      A                                      OVERLAY                 
0283.00      A                                      BLINK                   
0284.00      A                                      SETOF(01)               
0285.00      A  02                                  CF02(02)                
0286.00      A  03                                  CA03(03)                
0287.00      A  04                                  CF04(04)                
0288.00      A  05                                  CA05(05)    
0289.00      A  06                                  CA06(06)    
0290.00      A  07                                  CF07(07)    
0291.00      A  08                                  CF08(08)    
0292.00      A  09                                  CF09(09)    
0293.00      A  10                                  CF10(10)    
0294.00      A  11                                  CF11(11)    
0295.00      A  12                                  CF12(12)    
0296.00      A  13                                  CF13(13)    
0297.00      A  14                                  CF14(14)    
0298.00      A  15                                  CF15(15)    
0299.00      A  16                                  CF16(16)    
0300.00      A  17                                  CF17(17)    
0301.00      A  18                                  CF18(18)    
0302.00      A  19                                  CF19(19)    
0303.00      A  20                                  CF20(20)    
0304.00      A  21                                  CF21(21)    
0305.00      A  22                                  CA22(22)    
0306.00      A  23                                  CF23(23)    
0307.00      A  24                                  CF24(24)    
0308.00      A  25                                  PAGEDOWN(25)
0309.00      A  26                                  PAGEUP(26)  
0310.00      A  33                                  HOME(33)    
0311.00      A                                      SETOF(29)   
0312.00      A                                      SETOF(30)                              
0313.00      A                                      SETOF(31)                              
0314.00      A                                      SETOF(32)                              
0315.00      A                                      SETOF(34)                              
0316.00      A                                      SETOF(35)                              
0317.00      A  32                                  LOCK                                   
0318.00      A                                 22  2'F3= 終了                F5= 最新 +    
0319.00      A                                       表示             F6= 様式の選択   -   
0320.00      A                                                  '                          
0321.00      A                                      COLOR(BLU)                             
0322.00      A                                 23  2'F9= 挿入                F10= 入力 -   
0323.00      A                                                     F11= 変更           -   
0324.00      A                                               '                             
0325.00      A                                      COLOR(BLU)                             
0326.00      A  48                                  DSPATR(ND)                             

[解説]

全体の構成は次のようになっている。
_

 

表示レコード 内容 説明
R B100000 SFLレード すべての表示画面を表示するレコード
R C100000 SFLCTL(B100000) B100000 の SFLコントロール
R ERRMSG ERRMSG SFLPGMQ のエラー・メッセージSFLレコード
R ERRCTL SFLCTL(ERRMSG) ERRMSG のSFLコントロール
R FKEYS 機能キー すべての機能キーの表示

特徴としてすべての表示を同じSFLレコード(B100000)で初期画面も明細画面も
共通してこのSFLレコードだけで行っている。
初期画面も実はこのSFLレコードであり明細画面も同じSFLレコードである。
それぞれの場面で DSPATR(ND) によって制御している。

初期画面では標識17がOFFであるので明細のフィールドは表示されない。
しかし明細画面では標識17を ON にして残りのフィールドすべてを表示する。
ただし誤りがひとつあってSFLCTL C100000 には OVERLAYキー・ワードが
抜けている。恐らくDFUの実行時には内部処理として 強制的に OVERLAYを
行っているのであろうが RPG ではこのままでは正しく表示されない。

また特徴的であるのはエラー・メッセージの出力に ERRMSG や SFLMSGキー・ワードではなく
PGMMSGQ というSFLメッセージを採用していることである。
PGMMSGQ は複数のメッセージを同時に表示してメッセージをスクロールして
表示することができるのだが使い方が難しくてあまり普及していない。
このサイトでは PGMMSGQ の使い方の紹介を予定しているがほとんどの紹介サイトは
誤りでそれらを参考にしても PGMMSGQ は動作しない。
それは紹介している本人が実際は実現できていないのにマニュアルだけを読んで
こうすれば動作するはずだとして公開しているのがほとんどだからである。

DFUでPGMMSGQを使っているのはIBM製品として最も高度な機能を盛り込みたかったのだろうと
推測している。
しかし感心できないのは

0201.00      A                                      SFLSIZ(0001)                      
0202.00      A                                      SFLPAG(0001)  

の部分である。せっかくSFLを使っているのにSFLSIZとSFLPAGを同じ数値に定義して
しまっているのでSFLの自動拡張機能が使えていない。
つまり ROLLUPの機能だけでなく ROLLDWNの機能も記述しなければならず
無駄な記述とパフォーマンスの低下を招いてしまう。

もうひとつ SFLRCDNBR が定義されていないことである。
例えば

       A            DSPREC         4S 0H      SFLRCDNBR(CURSOR)

のように表示したい SFLレコードを特定して表示するには SFLRCDNBR が
必要となる。
DFUを作った開発者はSFLのことを周知していなかったと思われる。

DFUが生成したDSPFソースはどのようなものかを理解して頂けたと思う。