REPORT RSDEMO02.
* demostrates the use of table controls
* unsolved problems: attributes left_col and v_scroll do not work
*                    correctly
TABLES: SPFLI.                         "flight connections, flights
DATA: FCODE2(4), FCODE(4).             "ok-code
CONTROLS: TC_SPFLI TYPE TABLEVIEW USING SCREEN 100,      "flights
          TC_COLS TYPE TABLEVIEW USING SCREEN 100.       "column props
DATA:  COL TYPE CXTAB_COLUMN.          "column of table control
TABLES: DEMO_CPROP, DEMO_TPROP.        "structures for displaying
*                                    global and column specific props
DATA: BEGIN OF IT_SPFLI OCCURS  20,    "flight connections
        MARKED.                        "Check box
        INCLUDE STRUCTURE SPFLI.
DATA: END OF IT_SPFLI.
DATA  LINNO TYPE I.                    "line number at cursor position
DATA  FLD(20).                         "field name at cursor position
DATA  OFF TYPE I.                      "offset of cursor position

START-OF-SELECTION.
* read flight connections
  SELECT *  FROM SPFLI UP TO 100 ROWS.
    MOVE-CORRESPONDING SPFLI TO IT_SPFLI.
    APPEND IT_SPFLI.
  ENDSELECT.
  DESCRIBE TABLE IT_SPFLI LINES TC_SPFLI-LINES.
  TC_COLS-LINES = 6.
* display flights with table control
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  FCODE_100  INPUT
*&---------------------------------------------------------------------*
*       handle user command                                            *
*----------------------------------------------------------------------*
MODULE FCODE_100 INPUT.
  DATA: FLDNAME(100),FLDNAME2(100),FLDNAME3(100).
* copy global property changes made by the user
  TC_SPFLI-FIXED_COLS = DEMO_TPROP-FIXED_COLS.
  TC_SPFLI-LINES = DEMO_TPROP-LINES.
  TC_SPFLI-LINE_SEL_MODE = DEMO_TPROP-LINE_SEL_M.
  TC_SPFLI-COL_SEL_MODE = DEMO_TPROP-COL_SEL_MO.
  TC_SPFLI-LINE_SELECTOR = DEMO_TPROP-LINE_SELEC.
  TC_SPFLI-V_SCROLL = DEMO_TPROP-V_SCROLL.
  TC_SPFLI-H_GRID = DEMO_TPROP-H_GRID.
  TC_SPFLI-V_GRID = DEMO_TPROP-V_GRID.
  FCODE2 = FCODE.
  CLEAR FCODE.
* handle ok code
  CASE FCODE2.
    WHEN 'INFO'.                       "display online docu
      CALL FUNCTION 'RS_TOOL_ACCESS'
           EXPORTING
                OPERATION           = 'DOCS'
                OBJECT_NAME         = 'RSDEMO02'
                OBJECT_TYPE         = 'PROG'
*               ENCLOSING_OBJECT    =
*               position            = '1 1'
*               DEVCLASS            =
*               INCLUDE             =
*               MONITOR_ACTIVATION  = 'X'
*          IMPORTING
*               NEW_NAME            =
*          TABLES
*               OBJLIST             =
           EXCEPTIONS
                NOT_EXECUTED        = 1
                INVALID_OBJECT_TYPE = 2
                OTHERS              = 3.


    WHEN 'SORT'.
      DATA: FLD_LIST LIKE TC_SPFLI-COLS.
* search for selected columns.
      REFRESH FLD_LIST.
      LOOP AT TC_SPFLI-COLS INTO COL.
        IF COL-SELECTED = 'X'.
          APPEND COL TO FLD_LIST.
        ENDIF.
      ENDLOOP.
      SORT FLD_LIST BY INDEX.
      CLEAR:FLDNAME, FLDNAME2, FLDNAME3.
      READ TABLE FLD_LIST INDEX 1 INTO COL.
      FLDNAME = COL-SCREEN-NAME+9.
      READ TABLE FLD_LIST INDEX 2 INTO COL.
      FLDNAME2 = COL-SCREEN-NAME+9.
      READ TABLE FLD_LIST INDEX 3 INTO COL.
      FLDNAME3 = COL-SCREEN-NAME+9.
      SORT IT_SPFLI BY (FLDNAME) (FLDNAME2) (FLDNAME3).
    WHEN 'BACK'.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'DELL'.
* remove marked lines
      LOOP AT IT_SPFLI WHERE MARKED = 'X'.
        DELETE IT_SPFLI.
      ENDLOOP.
      IF SY-SUBRC <> 0.
        GET CURSOR FIELD FLD LINE LINNO OFFSET OFF.
        SET CURSOR FIELD FLD LINE LINNO OFFSET OFF.
        IF FLD CP 'IT_SPFLI*' AND SY-SUBRC = 0.
          LINNO = LINNO + TC_SPFLI-TOP_LINE - 1.
          DELETE IT_SPFLI INDEX LINNO.
          TC_SPFLI-LINES = TC_SPFLI-LINES - 1.
        ENDIF.
      ENDIF.
    WHEN 'INSL'.
* insert line above cursor position
      GET CURSOR FIELD FLD LINE LINNO OFFSET OFF.
      SET CURSOR FIELD FLD LINE LINNO OFFSET OFF.
      IF FLD CP 'IT_SPFLI*' AND SY-SUBRC = 0.
        IF LINNO >= 1.
          LINNO = LINNO + TC_SPFLI-TOP_LINE - 1.
          CLEAR IT_SPFLI.
          INSERT IT_SPFLI INDEX LINNO.
          TC_SPFLI-LINES = TC_SPFLI-LINES + 1.
        ELSE.
          CLEAR IT_SPFLI.
          APPEND IT_SPFLI.
          TC_SPFLI-LINES = TC_SPFLI-LINES + 1.
        ENDIF.
      ENDIF.
  ENDCASE.
ENDMODULE.                             " FCODE_100  INPUT
*&---------------------------------------------------------------------*
*&      Module  INIT_100  OUTPUT
*&---------------------------------------------------------------------*
*                                        *
*----------------------------------------------------------------------*
MODULE INIT_100 OUTPUT.
  SET PF-STATUS 'S100'.
* make global props visible
  MOVE:
  TC_SPFLI-FIXED_COLS TO DEMO_TPROP-FIXED_COLS,
  TC_SPFLI-LINES TO DEMO_TPROP-LINES,
  TC_SPFLI-TOP_LINE TO DEMO_TPROP-TOP_LINE,
  TC_SPFLI-CURRENT_LINE TO DEMO_TPROP-CURRENT_LI,
  TC_SPFLI-LEFT_COL TO DEMO_TPROP-LEFT_COL,
  TC_SPFLI-LINE_SEL_MODE TO DEMO_TPROP-LINE_SEL_M,
  TC_SPFLI-COL_SEL_MODE TO DEMO_TPROP-COL_SEL_MO,
  TC_SPFLI-LINE_SELECTOR TO DEMO_TPROP-LINE_SELEC,
  TC_SPFLI-V_SCROLL TO DEMO_TPROP-V_SCROLL,
  TC_SPFLI-H_GRID TO DEMO_TPROP-H_GRID,
  TC_SPFLI-V_GRID TO DEMO_TPROP-V_GRID.
ENDMODULE.                             " INIT_100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  MODIFY_IT_SPFLI  INPUT
*&---------------------------------------------------------------------*
*       transport changes to internal table                        *
*----------------------------------------------------------------------*
MODULE MODIFY_IT_SPFLI INPUT.
  MODIFY IT_SPFLI INDEX TC_SPFLI-CURRENT_LINE.
ENDMODULE.                             " MODIFY_IT_SPFLI  INPUT
*&---------------------------------------------------------------------*
*&      Module  READ_COLS  OUTPUT
*&---------------------------------------------------------------------*
*       Read according column property and make it visible         *
*----------------------------------------------------------------------*
MODULE READ_COLS OUTPUT.
  READ TABLE TC_SPFLI-COLS INDEX TC_COLS-CURRENT_LINE INTO COL.
  IF SY-SUBRC <> 0.
    EXIT FROM STEP-LOOP.
  ENDIF.
  MOVE:
   COL-SCREEN-NAME TO DEMO_CPROP-NAME,
   COL-SCREEN-GROUP1 TO DEMO_CPROP-GROUP1,
   COL-SCREEN-GROUP2 TO DEMO_CPROP-GROUP2,
   COL-SCREEN-GROUP3 TO DEMO_CPROP-GROUP3,
   COL-SCREEN-GROUP4 TO DEMO_CPROP-GROUP4,
   COL-SCREEN-REQUIRED TO DEMO_CPROP-REQUIRED,
   COL-SCREEN-INPUT TO DEMO_CPROP-INPUT,
   COL-SCREEN-OUTPUT TO DEMO_CPROP-OUTPUT,
   COL-SCREEN-INTENSIFIED TO DEMO_CPROP-INTENS,
   COL-SCREEN-INVISIBLE TO DEMO_CPROP-INVISIBLEV,
   COL-SCREEN-LENGTH TO      DEMO_CPROP-LENGTH,
   COL-SCREEN-ACTIVE TO      DEMO_CPROP-ACTIVE,
   COL-INDEX TO      DEMO_CPROP-INDEX,
   COL-SELECTED TO     DEMO_CPROP-SELECTED,
   COL-VISLENGTH TO DEMO_CPROP-VISLENGTH,
   COL-INVISIBLE TO DEMO_CPROP-INVISIBLEC.

ENDMODULE.                             " READ_COLS  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  MODIFY_COLS  INPUT
*&---------------------------------------------------------------------*
*       text                                                           *
*----------------------------------------------------------------------*
MODULE MODIFY_COLS INPUT.
  CLEAR COL.
  READ TABLE TC_SPFLI-COLS INDEX TC_COLS-CURRENT_LINE INTO COL.
  COL-SCREEN-GROUP1      = DEMO_CPROP-GROUP1.
  COL-SCREEN-GROUP2      = DEMO_CPROP-GROUP2.
  COL-SCREEN-GROUP3      = DEMO_CPROP-GROUP3.
  COL-SCREEN-GROUP4      = DEMO_CPROP-GROUP4.
  COL-SCREEN-REQUIRED    = DEMO_CPROP-REQUIRED.
  COL-SCREEN-INPUT       = DEMO_CPROP-INPUT.
  COL-SCREEN-OUTPUT      = DEMO_CPROP-OUTPUT.
  COL-SCREEN-INTENSIFIED = DEMO_CPROP-INTENS.
  COL-SCREEN-INVISIBLE   = DEMO_CPROP-INVISIBLEV.
  COL-SCREEN-LENGTH      = DEMO_CPROP-LENGTH.
  COL-SCREEN-ACTIVE      = DEMO_CPROP-ACTIVE.
  COL-INVISIBLE          = DEMO_CPROP-INVISIBLEC.
* update column specific property changes made by the user
  MODIFY TC_SPFLI-COLS INDEX TC_COLS-CURRENT_LINE FROM COL.
ENDMODULE.                             " MODIFY_COLS  INPUT

 

posted on 2020-09-11 10:50  姬如千泷  阅读(676)  评论(0编辑  收藏  举报