最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

2.33.サブファイル実践講座(2)

[ Previous ] [ HOME ] [ Upper ] [ Next ]


サブファイルの画面構成

サブファイルを使ったさまざまな画面構成の例です。この他にも有ると思いますが、大体が以下のパターンになるでしょう。

これは、最も、典型的な構成の例です。最上段に、サブファイル制御レコード、真中のボディにサブファイルレコード、最下段に、通常のレコード(合計金額や、コマンドファンクションキーのガイド、エラーメッセージなど)が入ります。また、サブファイルレコードを、上にして、その下に、サブファイル制御レコードを出す、というレイアウトも可能です。
これは、最上部に、通常のレコード様式を入れたものです。ひとつのプログラムの画面全体のレイアウトを通じて、共通の見出し情報を、この通常レコードに出してもいいでしょう。

その下は、同じく、サブファイル制御+サブファイルレコードです。

ここでは、サブファイル制御コードを表示しないレイアウトです。単に、表示フィールドが無いというだけです。実際のDDSには、サブファイル制御用のキーワードを勿論定義します。

これをしなくてはいけないという、具体的な場合は、今、思いつかないのですが、まあ、サブファイル制御レコードは、何も必ず表示しなくてもいいのだ、という例として、挙げました。

追記 2000-9-12

マニュアル見てたら、こんな記述がありました。

AS/400 アドバンスト・シリーズ 適用業務画面プログラミング 
2.3.11.4 2つ以上のレコードが表示されているときのカーソルの位置づけとロール

注: 表示スペースを占めないレコード(フィールドを含まないレコード様式、あるいは潜在、Program-to-system、またはメッセージのフィールドしか含まないレコード様式、あるいは CLRL キーワードが指定されていて入力可能フィールドを含まないレコード様式、あるいはメッセージ・サブファイル)は、0 行目にあるとみなされます。したがって、システムはそれらのレコードは画面上の最上部にあるとみなし、最初にロールさせようとします。

上部のサブファイル制御レコードに、たくさんのフィールドを出して、その下に2,3行のサブファイルレコードを出しています。普通、サブファイルというと、サブファイルレコードをメインにした、画面を思い浮かべますが、このように、サブファイル制御レコードをメインにする、ということも、ありえます。下にこの例を挙げます。

これは、SFLLINを指定した場合の例です、本来、縦に1行のレコードの並びを、3列(1行目上から下へ、2行目上から下へ、3行目上から下へ)にしている例です。SFLLINは、各列の間のスペース数を指定します。

※このSFLLINは、その名のとおり、列指定であって、行単位に横にデータを書き出すのでは有りません。もし、それをしたければ、ひとつのサブファイルレコードに、FLD1、FLD2、FLD3と同じ属性のフィールドを設定して、3レコード読み込んでは、そのフィールドにひとつずつセットして、書き出す、を繰り返さなくてはなりません。(私個人としては、簡潔なロジックを犠牲にしてまで、そのようにする、メリットを感じませんが)

ひとつの画面上に、2個のサブファイルを同時に出している例です。この場合、厄介なのは、両方同時に、サブファイルの先頭RRNを、簡単に取り出せないことです。このため、実行キーなどの押下の後の再表示で、どのページを出すのか、の判定がややこしくなります。

対策は、

  1. すべてのサブファイルを、One-Page-at-a-Time Subfileで作成する(1ページしか表示しないので、SFLRCDNBRは、無視できる)。または、ひとつのサブファイルを、Extending Subfileや、One-Time-Load Subfileにして、残りはすべて、One-Page-at-a-Time Subfileにする(とにかくひとつのODPに、ひとつのINFODSなので、仕方が無いです。)
  2. ひとつは、INFODSから、残りは、SFLCSRRRNを使って、カーソルの置かれていたSFLのRRNを取り出して、画面表示に利用する。
  3. SFLSCROLLを各サブファイル制御レコードに設定して、必ず、それらすべての制御レコードを読み込むようにします。すると、各サブファイルレコードの最上段のRRNがSFLSCROLLを通して取り込まれます。
    例.
    WRITECTL01
    EXFMTCTL00
    READ CTL01                           90

    とすると、EXFMTやREADの後で、CTL00やCTL01に指定されたSFLSCROLLに値が取り込まれます。制御レコードの読み込みがなされないと、正しい値は入りません。※このEXFMT+READに関しての記事はこちらを見てください。

最後のやり方が一番楽かもしれません。注意としては、たとえ表示目的だけでも、そのサブファイル制御レコードを、READをするようにすることです。

「お詫び」2000-9-9

当初、画面ファイルを2個にすればできると考えておりましたが、実際コーディングして確かめたところ、画面表示がうまく出ませんでした。複数の画面ファイルを指定するやり方は、うまくいかないようです。訂正してお詫びします。

2つのサブファイルを、横に並べることはできません。これはサブファイルに限らず、すべての画面レコード様式に共通の制約です。

この他に、サブファイルレコードに複数行(2行以上)定義する場合、その折りたたみや、展開をDDSキーワードSFLDROPやSFLFOLDで行えます。Extending Subfileの場合、ロールアップした時点で、展開されていたか、折りたたまれていたかは、SFLMODEで取り出すことができます。昔(System38のころ)は、ロールアップを押した途端、折りたたまれた状態になってしまっていましたが、このSFLMODEでそのような、かっこ悪い、事にはならなくなりました。

コラム

参考までに、下図は自分の開発の画面の共通仕様です。

                                                             PGMID:XXXXXXXXXX
 USER :XXXXXXXXXX            タ イ ト ル                    DATE:99/99/99
  JOB :XXXXXXXXXX                                             TIME:99:99:99  
                                                                             
 --------------------------------------------------------------------------- 
                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
                                 本      体                             
                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
                                                                    続く...  
 ----------------------------------------------------------------------------
                       コマンド・ファンクション・キー ガイド                  
                                 エラー等のメッセージ                         
                                                                             

[解説]

  1. 入力可能なフィールドは下線がひかれています。下線のない部分には、入力出来ません。
  2. エラーのあるフィールドは反転します。上書きで正しい値を入力しなおして下さい。
  3. 一つのフィールドで値を入力したら、必ずフィールドイグジット(改行キー)を押して下さい。
  4. エラー等のメッセージ部分には、エラーとなった理由の他に注意や警告の意味だけのメッセージも現れますので、気を付けて下さい。  又、メッセージを表示する場所は、例外的に『本体』部分に出すこともあります。
  5. 本体が、リスト形式の表示をする場合は、右下に必ず『続く...』や『終了』という文字がでます。『続く...』の時は、ロールアップキーで次画面へ進めます。又、『終了』の時は、最終頁を表示していますので、ロールアップはできません。

※本体の上下に引かれた-------------は、境界線を意味していて、本当に画面に引く意味では有りません。それから、PGMIDの位置は、最初のころ左上にしていました。途中で、右上に変更しました。

効果的なサブファイルを考える

サブファイルは、複数レコードを画面上に出すのに、とても便利です。では、どんな場合に複数レコードを出すのでしょうか?

具体例を考えてみましょう。ここでは、画面照会を中心に説明していきます。

検索目的

まずは、検索の場合を考えましょう。ユーザーは、大量のレコードの山の中から、たった一つのレコードを、ややあいまいに探したいとします。大抵、日付、時間、入力者、データの区分などをキーワードとして、絞込み、探し物をしているユーザーに、結果を表示します。このとき、正確に、「何時何分何秒」に入力完了したもの、と指定できる人は少ないはずですので、大抵は、入力者XXが、4月10日の10:00から11:00に入力した、レコードの一覧を出して、そこから選ぶことが多いと思います。そんな時に、複数レコードを表示して、その後、ユーザーが、「ああ、これだわ」と、目的の1件を見るけることになります。

この図は、たくさんのデータの中から、ユーザーはたった一つのデータを、画面や帳票を使って、取り出しているイメージ図です。「データが見たい」という心理的な要求から始まり、最終的には、具体的な数字や文字列を探しあてています。それらの数字や文字列を、いかに早く、ユーザーに示せるのか、いかに簡単にユーザーに示せるのか、を考えましょう。

例)

  • 受注入力の内容を、ユーザーが指定する条件で絞り込んで、一括表示する。

  • 売上の金額のトップ10の小売店を一覧表示したい。

  • 今月動きのあるBS勘定科目を一覧で表示したい。

このように、大量データを絞り込んで、一件もしくは、画面で把握しうる件数以内で表示して、終わる、もしくは、表示してから、ユーザーが、その一件一件を何かしら、処理していく形式が、多いと思います。もちろん、抽出条件無しで、全件表示する場合もあるかもしれませんが、AS/400はPCでは、持ちこたえられないほどの大量データを、当然のように処理します。年間200万件の売上トランを3年分、20万件の顧客とぶつけて、分析する、とか。すると、当然、どのように、ユーザーに大量データを示すのがベストなのか、いつでも考えなくてはなりません。

つまり、

  • 「いかに早く」

  • 「いかに正確に」

  • 「最終目的レコードをユーザーが取り出せるのか」

これを考えることが重要なのです。そのときに、サブファイルは、かなり有効な手段として、使えます。

「抽出条件の指定」

このような大量データを扱う場合に、絞込み条件を、開始〜終了で指定できるようにして、その条件にあった内容を、サブファイルで書き出してあげるのが、効果的です。たとえば3桁ならば、000〜999で全レコード表示で、010から010で、010のみのレコード表示、010から020で、010から020のレコードを表示、という柔軟なことが可能です。したがって、基本的な画面の流れは、「条件選択」から「検索結果」へと進む方式を基本と考えます。この、2つのフィールドを1つの画面にしてもいいし、2つの画面に分けてもいいと思います。

欠点

この仕様を達成するためのプログラム類が、やや多くなるか、もしくは、やや複雑になる傾向があります。つまり、いかに、「抽出するのか」ということが、問題です。

  1. サブファイルプログラム内部で条件判定して表示

  2. 「抽出中間ファイル」+サブファイル表示

のどちらかになるでしょう。さらに、「中間ファイル作成」は、RPGによりファイル作成か、OPNQRYFまたはSQLで、抽出する、のどちらかですね。

また、RPGの中間ファイル作成の形式だと、データが増えたり減ったりした時でも、依然として、作成されたときの情報を表示しますので、ダイナミックな検索になりません。ただ、抽出結果の表示であるので、これは仕方ないものと考えます。

「表示開始位置の指定」

レコードがソートされた物である場合、抽出ではなく、その表示開始位置を指定して、最終レコードに到達できるようにします。「抽出条件の指定」に似ていますが、プログラムの難易度は、ぐっと容易になります。そのかわり、あらかじめ、データがソートされていなくてはなりません。これを画面で使うのですから、論理ファイルのメンテナンスは、*IMMEDもしくは*DELAYになるでしょう。(つまり、*REBLDでは、画面の使用に耐えません。※)このあたりは、ひとつの論理ファイルがいかに効果的で、どれくらいの数のプログラムが必要とするかで、論理ファイルの有効性が決まっていくでしょう。その論理ファイルが使えるなら、表示開始位置の指定でもいいと思います。

※2000-9-10追記 老婆心ながら、これはあくまで、論理ファイルメンテナンスの問題ですので、参照するデータが月に一度、とかの、頻度でしか変動しないのなら、*REBLDでも問題ないでしょう。

サンプル

[画面1]

この例では、次のサブファイルの画面の表示開始レコードをここで指定しています。

   PGMID : GLI070                                                  DATE :  5/19/90      
    USER : UUUUUUUU             GENERAL LEDGER INQUIRY             TIME : 10:09:39      
     JOB : DDDDD                                                                        
                                 CURRENT FISCAL YEAR                                    
                                       1989/01                                          
                                                                                        
                       COMPANY  ACCOUNT  SECTION  PATICULAR                             
                          D                000                                          
                        D:OFFICEA                                                       
                        L:OFFICEB                                                       
                                                                                        
                           FISCAL YEAR . . . :  1 / 1989                                
                                                                                        
                                                                                        
                                                                                        
    実行キーを押すと、該当する勘定科目のみの一年分を表示する。F4を押すと、入力        
                                                                                        
    した年月のみを対象とした、勘定科目の一覧表を表示する。                   
                                                                                        
                                                                                        
                                                                                        
   F3=EXIT  F4=LIST OF ACCOUNTS  

                                   ↓ 実行キー

[画面2]

下図において、色の変わっている部分が、サブファイルです。ここでは、1行を書き出すのにやや時間がかかるため、Extending Subfileを使っています。これで、初期表示の「遅さ」を緩和しています。

   PGMID : GLI075                OFFICE A JOURNAL INQUIRY          DATE :  5/19/90      
    USER : UUUUUUUU               AS OF JANUARY IN 1989            TIME : 10:15:52      
     JOB : DDDDD                                              CURRENT FISCAL YEAR       
    TYPE OPTIONS , PRESS ENTER   OPTION 5=DISPLAY JOURNALS            1989/01           
                                                     START ACCOUNT . . .:               
                                                                                        
   OPT ACCOUNT CODE AND NAME                              DEBIT            CREDIT       
                     ( 281832 YYYYYYYYYYYYYYY                 0                 0       
          3 TOTAL OF RRRRRR (2)  . . . . . .                  0                 0       
            37 FFFFFFFFFFF  . . . . . . . . .                 0                 0       
                     ( 370 RRRRRRRRRRRRRRRRRR                 0                 0       
                     ( 380 IIIIIIIIIIIIIIIII)                 0                 0       
            39 OOOOOOOOOOOOOOOOO  . . . . . .                 0                 0       
                     ( 397 PPPPPPPPPPPPPPPP.                  0                 0       
                     ( 399 QQQQQQQQQQQQQQQQQQ                 0                 0       
          4 KKKKKKKKKKK(1)  . . . . . . . . .     1,047,008,235     1,352,419,683       
            40 RRRRRRRRRRRRRRR  . . . . . . .       386,526,099       297,176,130       
→   5             49110 SSSSSSSSSSSSSSSSSSSSS       277,181,416        70,338,238      
                       ( 49110 0049110 TTTS I                 0                 0       
                       ( 49110 0040111 TTTTT          6,603,309         5,583,806       
                                                                         続く ...       
                                                                                        
   F3=EXIT  F7=PREVIOUS MONTH  F8=NEXT MONTH  F22=SINGLE(POSTING)/HIERARCHY             

                                   ↓ 実行キー
 [画面3]

ここでは、[画面2]で選択したレコードの、明細を、Extendinf Subfileを使って表示しています。

さらに、この画面では、カーソルをある行に持っていき、そこでF6を押下すると、そのSFLのRRNを判定して、さらに、その仕訳を伝票形式で表示します。ここでF6にしたのは、画面に入力フィールドの余地が無かったため、オプション欄を入れられなかったためです。

   PGMID : GLI076                OFFICE A JOURNAL INQUIRY          DATE :  5/19/90      
    USER : UUUUUUUU           49110 TTTTTTTTTTTTTTTTTTTTTT         TIME : 10:16:04      
     JOB : DDDDD                     AS OF 1989/01           CURRENT FISCAL YEAR        
                                                                   1989/01              
                                                     ACCOUNT CODE . .: 49110            
           BROUGHT.F . . .                                                              
             CURRENT . . .        277,181,416        70,338,238                         
   JN VOUC'R LIN ACC'T  SEC             DEBIT            CRDEIT DESCRIPTION(1)-17       
   24    108   1 49110                  9,866                   XXXXXXXXXXXX            
   24    109   1 49110                172,948                   XXXXXXXXXXX             
   24    152   1 49110                    930                   YYYYYYYYYYYYYYERS       
   24    153   1 49110                  4,974                   NIOOOOOOOOOOOOOUS       
   24    154   1 49110                 84,336                   UUUUUUUUUUUUU KK        
   24    155   1 49110                108,098                   KKKKKKKKKKKKKKKK        
   24    156   1 49110                161,246                   LLLLLLLLLLLLLLKK        
   24    157   1 49110                128,660                   UUUUUUUUUUG             
   24    158   1 49110                303,493                   UUUUUUUUUUU             
   24    177   4 49110                  2,451                   WWWWWWWWWWWWWWWWH       
                                                                         続く ...       
            BALACNCE . . .        206,843,178                                           
                                                                                        
   F3=EXIT   F21=BASIC INFORMATION      ROLL UP/DOWN  F12=CANCEL  F6=JOURNAL            

                                  ↓ 仕訳伝票を照会したい行でF6
 [画面4]

これは、上記の仕訳(勘定科目で抽出されている仕訳行)のデータを元に、その仕訳データが含まれている仕分け伝票を、逆に検索したものです。おかしな仕訳を見つけたときに、その仕訳の伝票(相手方の勘定科目の確認など)をできるようにしたものです。多角的にデータ照会をしたい、と工夫をしたものです。

ここでのサブファイルは、One-Time-Load Subfileにしました。仕訳が1000行以上になるとは思えなかったからです。会計年度の繰越で、損益振替の仕訳自動的に作りますが、これは損益勘定の科目が仕訳の1行になるので、この自動的に作るプログラムは、999行単位に仕訳伝票を変えています。

このサブファイルは、1レコードが2行にまたがっています。摘要の表示を2行目にしました。

    B           28812           OFFICE A VOUCHER INQUIRY       PGMID : GLI073           
    USER : UUUUUUUU          CURRENT FISCAL YEAR .. 1989/02     DATE :  5/24/90         
     JOB : DDDDD                                                TIME : 18:08:29         
                                                                                        
   JOURNAL VOUCHER  DATE(D-M-Y)      TOTAL AMOUNT  JOURNAL DESCRIPTION                  
     24         29  10-01-1989            105,060  IIIIIIIIIIIIIIIIIII                  
    LINE  A/C     SEC  PARTICL  CC  ANALYT               DEBIT             CREDIT       
       1  49110        4911028  60                     105,060                          
                  YYYYYYYYYYYYYYYYYYYYYY                                                
       2  51242                                                           105,060       
                  EEEEEEEEEEEEEEEEEEEEEE                                                
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
   TOTAL COUNT=   2       TOTAL BALANCE ...            105,060            105,060       
                                                                                        
  F3=EXIT  F12=CANCEL   F21=ACT CODE/ACT NAME 
 

画面1(GLI070)、画面2(GLI075)、画面3(GLI076)、画面4(GLI073)は、すべて、異なるプログラムです。つまり、GLI070が一覧表示、GLI075が総勘定元帳残高表示、GLI076が仕訳一覧表示、さらに、GLI073が仕訳伝票照会です。プログラムが分かれているため、開発がし易く、また、各々の照会キーはパラメータで手渡すのですが、このパラメータを画面で指定して、この部品となるプログラムをCALLすれば、単体での起動も可能です。

見方を変えると、1個のプログラムのパラメータを指定し易くするために、GLI070などの一覧表示プログラムが機能していると考えてもいいと思います。


追記 2000-9-9

レコード選択のサブファイルプログラムから、CALLをする場合、以下のようなパラメータ形式にしています。下記は、別のプログラムですが、例として、掲げます。

0045.00      I              'ERR0011'             C         #STEN               
0046.00      I              'ERR0020'             C         #YEAR               
0047.00      I              'ERR0023'             C         #TRDTA              
0048.00      I              'INF0010'             C         #F10                
0049.00      I              'INF0012'             C         #CONFM              
0050.00      I              'PMS0100'             C         #SBMJB              
0051.00      I              'PMS0112'             C         #SBMOS              
0052.00      I              'PMS0101'             C         #CHGED              
0053.00      I              'PMS0102'             C         #ADDED              
0054.00      I              'PMS0103'             C         #DLTED              
0055.00      I              'PMS0104'             C         #CPIED              
0056.00      I              'PMS0105'             C         #DLTSL              
0057.00      I              'PMS0106'             C         #CHGOT              
0058.00      I              'PMS0107'             C         #CHGDP              
0059.00      I              'PMS0108'             C         #CHGDM              
0060.00      I              'PMS0109'             C         #CHGBC              
0061.00      I              'PMS0110'             C         #DPTIN              
0062.00      I              'PMS0111'             C         #CHGTX              
0063.00      I              ' 売上累積 '          C         #SLDTA              
0064.00      I              ' 売上の集計作業 '     C         #SLSMG              
0065.00      I              ' 売上の削除作業 '     C         #SLDMG              
                                                                                
0402.00      C*----------------------------------------------------*            
0403.00      C           @READC    BEGSR                           :            
0404.00      C*----------------------------------------------------*            
0405.00 B001 C           *IN95     DOUEQ*ON                        :            
0406.00  001 C                     READCSFL01                    95:            
0407.00 B002 C           *IN95     IFEQ *ON                        :            
0408.00  002 C                     LEAVE                           :            
0409.00 +002 C                     ELSE                            :            
0410.00 B003 C           S1OPT     IFNE *BLANK                     :            
0411.00  003 C                     MOVE S1OPT     W1OPT            :            
0412.00  003 C                     MOVE *BLANK    S1OPT            :            
0413.00  003 C           H1STS     COMP *BLANK               3030  :            
0414.00  003 C                     UPDATSFL01                      :            
0415.00  003 C                     EXSR @OPT                       :            
0416.00 B004 C           PICNL     IFEQ *ON                        :            
0417.00  004 C                     LEAVE                           :            
0418.00 E004 C                     ENDIF                           :            
0419.00 E003 C                     ENDIF                           :            
0420.00 E002 C                     ENDIF                           :            
0421.00 E001 C                     ENDDO                           :            
0422.00      C*                                                    :            
0423.00      C                     ENDSR                           :            
0424.00      C*----------------------------------------------------*            
0425.00      C           @OPT      BEGSR                           : 
0426.00      C*----------------------------------------------------*            
0427.00      C                     Z-ADDRRN01     H1SRCD           :            
0428.00      C                     MOVE *OFF      W1SLS            :            
0429.00      C                     MOVE S1PM#1    POPM#1           :            
0430.00      C                     MOVE S1PM#2    POPM#2           :            
0431.00      C                     MOVE *OFF      PICHG            :            
0432.00      C                     MOVE *OFF      PICNL            :            
0433.00      C*                                                    :            
0434.00      C                     EXSR @CKOPT                     :            
0435.00 B001 C           V1MSG#    IFNE *BLANK                     :            
0436.00  001 C                     MOVE *ON       PICNL            :            
0437.00  001 C                     GOTO \OPTEN                     :            
0438.00 E001 C                     ENDIF                           :            
0439.00      C*                                                    :            
0440.00 B001 C  N84      W1OPT     CASEQ'2 '      @CHG             : 変更       
0441.00 +001 C  N84      W1OPT     CASEQ' 2'      @CHG             : 変更       
0442.00 +001 C  N84      W1OPT     CASEQ'02'      @CHG             : 変更       
0443.00 +001 C  N84      W1OPT     CASEQ'3 '      @DPT             : デパート   
0444.00 +001 C  N84      W1OPT     CASEQ' 3'      @DPT             : デパート   
0445.00 +001 C  N84      W1OPT     CASEQ'03'      @DPT             : デパート   
0446.00 +001 C  N84      W1OPT     CASEQ'4 '      @DLT             : 削除       
0447.00 +001 C  N84      W1OPT     CASEQ' 4'      @DLT             : 削除       
0448.00 +001 C  N84      W1OPT     CASEQ'04'      @DLT             : 削除       
0449.00 +001 C           W1OPT     CASEQ'5 '      @DSP             : 表示       
0450.00 +001 C           W1OPT     CASEQ' 5'      @DSP             : 表示       
0451.00 +001 C           W1OPT     CASEQ'05'      @DSP             : 表示       
0452.00 +001 C  N84      W1OPT     CASEQ'6 '      @CPY             : 複写       
0453.00 +001 C  N84      W1OPT     CASEQ' 6'      @CPY             : 複写       
...略...
0475.00 +001 C  N84      W1OPT     CASEQ'80'      @DWNOS           :            
0476.00 +001 C  N84      W1OPT     CASEQ'99'      @DLTSL           :            
0477.00 E001 C                     ENDCS                           :            
0478.00      C*                                                    :            
0479.00      C           \OPTEN    ENDSR                           :            
0526.00      C*----------------------------------------------------*     
0527.00      C           @CHG      BEGSR                           :     
0528.00      C*----------------------------------------------------*
0529.00      C* 変更                                               :            
0530.00      C*                                                    :            
0531.00      C                     EXSR @PRCHK                     :            
0532.00 B001 C           W1SLS     IFEQ *ON                        :            
0533.00 B002 C           V1MSG#    IFEQ *BLANK                     :            
0534.00  002 C                     MOVEL#TRDTA    V1MSG#           :            
0535.00 E002 C                     ENDIF                           :            
0536.00 +001 C                     ELSE                            :            
0537.00  001 C                     CALL 'PMM010'                   :            
0538.00  001 C                     PARM 'CHG'     POMODE           :            
0539.00  001 C                     PARM           POPM#1           :            
0540.00  001 C                     PARM           POPM#2           :            
0541.00  001 C                     PARM           PICHG            :            
0542.00  001 C                     PARM           PICNL            :            
0543.00 E001 C                     ENDIF                           :            
0544.00      C*                                                    :            
0545.00 B001 C           PICHG     IFEQ *ON                        :            
0546.00  001 C                     MOVE *BLANK    PSMDTA           :            
0547.00  001 C                     MOVELPOPM#1    PSMDTA           :            
0548.00  001 C                     CAT  '-':0     PSMDTA           :            
0550.00 B002 C           V1MSG#    IFEQ *BLANK                     :            
0551.00  002 C                     MOVEL#CHGED    V1MSG#           :            
0552.00 E002 C                     ENDIF                           :            
0553.00 E001 C                     ENDIF                           :            
0554.00      C*                                                    :            
0555.00      C                     ENDSR                           :            
                                                                                
PMM010の*ENTRY部分
0094.00      C******************************************************            
0095.00      C*     DEFINITION  MODULE  ( PLIST   FIELD   KLIST )  *            
0096.00      C******************************************************            
0097.00      C*                                                    :            
0098.00      C*  DEFINE ENTRY                                      :            
0099.00      C*                                                    :            
0100.00      C           *ENTRY    PLIST                           :            
0101.00      C                     PARM           PIMODE  3        :            
0102.00      C                     PARM           PIPM#1  4        :            
0103.00      C                     PARM           PIPM#2  3        :            
0104.00      C                     PARM           POCHG   1        :            
0105.00      C                     PARM           POCNL   1        :            
0106.00      C*                                                    :
...
0191.00      C*                                                    :       
0192.00 B001 C           F3        IFEQ PUSHED                     :       
0193.00 *001 C           F12       OREQ PUSHED                     :       
0194.00  001 C                     MOVE *ON       POCNL            :       
0195.00  001 C                     LEAVE                           :       
0196.00 E001 C                     END                             :                   
                                                                    

ここで気をつけて欲しいのは、CALLのパラメータに、キー情報以外に、PICHG、PICNLというパラメータがあることです。Pはパラメータを表し、iはInput(入力)で受け取りを意味します。つまり、CHGとCNLの2個を受け取ることになります。これは、CHGは、呼び出したプログラムがデータを作成したり、変更したりした場合に*ONが入り、CNLには、プログラムをF3やF12で終了した場合に入ります(プログラムは通常、データを書き出したら、そのまま自然に終了しますが、途中で止めた場合は、CNLが*ONになるわけです)。

PICHGが*ONの場合、「PIPM#1+PIPM#2(変更ファイルのキー値)は変更された」、とメッセージを出しています。

PICNLが*ONの場合、READCのループから抜けます。


レコードの選択画面の例

私の場合、選択目的の、サブファイルのレコード数は、多くて、10から12行くらいです。無理やりぎりぎりまで、多くの行を設定すると、見づらいと思うのです。楽に画面を見るためには、せいぜい10行くらいで、それ以上だと、オペレータは、眼球を上下に動かし、認識するようになります。私が言いたいのは、自然に視野に入り込む範囲を考えて、行数を決めたほうがいいのではないか、ということです。下の例では、10行です。ぱっと、見て、全体が大体把握できれば、オペレーションが楽です。このような小さなことが、ユーザーフレンドリーな画面につながると思います。

pra002.gif (20116 バイト)

実際に、上記のDDSで、データを表示している例

2つのサブファイルを利用して、サブファイルのレコードの拡張を擬似的に見せる例。

切り替えて、各商品の報告の部分が、縮小したり(↑)、拡大したり(↓)する。機能キーを押すたびに、2つのサブファイルを、交互に表示している。

これを交互に見ると、画面下の各商品の報告が、キーを押す毎に、広がったり、縮んだり、見えます。

以上

2000-9-8


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送