タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【AS400】DDS-表示装置ファイルの機能キー(CA,CFキーワード)の比較

概要

  • 表示装置に、ファンクションキーを設置する際に、CAとCFの2種類の方法があります。詳しく説明できないので、実際にやってみることにしました。
  • 結果より、画面に入力された値を使用する場合は、CFを使うということ。「F3:終了」など値を使用する必要がない場合は、CAで十分ということでしょう。

動作結果

下記のような画面を作って試してみました。

f:id:no14141:20131009124231j:plain

機能キーCAの場合

A                                      CA09

f:id:no14141:20131009124239j:plain

f:id:no14141:20131009124253j:plain

機能キーCFの場合

A                                      CF09

f:id:no14141:20131009124258j:plain

サンプルソース

画面ファイル(SAMPLE08D)

A                                      DSPSIZ(24 80 *DS3)
A  *DS3                                MSGLOC(24)
A                                      PRINT
A** FMT10 ========================================================
A          R FMT10                     TEXT('レコード1')
A                                      KEEP LOCK BLINK OVERLAY PUTOVR
A                                      CA03
A                                      CA09
A                                      CHANGE(60 '* M.D.T *')
A                                      MDTOFF(*ALL)
A* ------------------------------------ *
A                                 01 02'画面1'
A                                      DSPATR(HI RI)
A**
A* ------------------------------------ *
A                                 03 02'フィールド:'
A                                      DSPATR(HI)
A**
A            D1FLD1        10   B    +1
A                                      TEXT('フィールド1')
A                                      OVRDTA OVRATR
A                                      DSPATR(UL)
A*
A                                 07 10'※F9打鍵で画面2を表示します。'
A                                 08 12'(1) 入力→F9'
A                                 09 12'(2) 入力→ENTER→F9'
A*
A** FMT20 ========================================================
A          R FMT20                     TEXT('レコード2')
A                                      KEEP LOCK BLINK OVERLAY PUTOVR
A                                      CA03
A                                      CHANGE(60 '* M.D.T *')
A                                      MDTOFF(*ALL)
A* ------------------------------------ *
A                                 11 02'画面2'
A                                      DSPATR(HI RI)
A* ------------------------------------ *
A                                 13 02'フィールド:'
A                                      DSPATR(HI)
A**
A            D2FLD1        10   B    +1
A                                      TEXT('フィールド2')
A                                      OVRDTA OVRATR
A                                      DSPATR(UL)

制御プログラム(SAMPLE08)

     H DATEDIT(*YMD/)
      //
     F****************************************************************
     F*ファイル定義
     F****************************************************************
     F** DISPLAY FILE **
     FSAMPLE08D CF   E             WORKSTN
     F*
     D****************************************************************
     D*変数定義
     D****************************************************************
     D*実行制御
     D W@NEXT          S              5A
     D*
     C****************************************************************
     C*MAIN-ROUTINE
     C****************************************************************
     C*
     C*INITIALIZE
     C                   EXSR      #INZ10
     C*
     C*MAIN LOOP
B001 C     W@NEXT        DOWNE     'FIN10'
     C*DSPLAY10
B002 C     W@NEXT        CASEQ     'DSP10'       #DSP10
     C*DSPLAY20
X002 C     W@NEXT        CASEQ     'DSP20'       #DSP20
     C*
E002 C                   ENDCS
     C*
E001 C                   ENDDO
     C*
     C*FINALIZE
     C                   EXSR      #FIN10
     C*
     C****************************************************************
     C* INITIALIZE
     C****************************************************************
     C*
     C     #INZ10        BEGSR
     C*
      /FREE
       // SET DEFAULT NEXT MODULE
           W@NEXT = 'FIN10' ;
 
       // SET NEXT MODULE
           W@NEXT = 'DSP10' ;
      /END-FREE
     C*
     C                   ENDSR
     C*
     C****************************************************************
     C* DSPLAY10
     C****************************************************************
     C*
     C     #DSP10        BEGSR
     C*
B001 C                   DO        *HIVAL
     C*画面入出力
     C                   EXFMT     FMT10
     C* CMD キーの判断
     C* (終了F03 ? ) *
B002 C     *INKC         IFEQ      *ON
     C                   MOVEL     'FIN10'       W@NEXT
     C                   MOVEL     *ON           *IN10
E002 C                   END
     C* (表示F09 ? ) *
B002 C     *INKI         IFEQ      *ON
     C                   MOVEL     D1FLD1        D2FLD1
     C                   MOVEL     'DSP20'       W@NEXT
     C                   MOVEL     *ON           *IN10
     C*
E002 C                   END
E001 C  N10              END
     C*
     C                   MOVEL     *OFF          *IN10
     C*
     C                   ENDSR
     C*
     C****************************************************************
     C* DSPLAY20
     C****************************************************************
     C*
     C     #DSP20        BEGSR
     C*
     C*画面の入出力
B001 C                   DO        *HIVAL
     C                   EXFMT     FMT20
     C* CMDキー判断
     C* (終了F03 ? ) *
B002 C     *INKC         IFEQ      *ON
     C                   MOVEL     'FIN10'       W@NEXT
     C                   MOVEL     *ON           *IN10
E002 C                   END
E001 C  N10              END
     C*
     C                   MOVEL     *OFF          *IN10
     C*
     C                   ENDSR
     C*
     C****************************************************************
     C* FINALIZE
     C****************************************************************
     C     #FIN10        BEGSR
     C*
     C                   MOVEL     *ON           *INLR
     C                   RETURN
     C*
     C                   ENDSR
     C*