本来想模拟VA01的,后来想想ME21N也很经典,所以就把一些常见的组建都放上面了。

效果图如下:

1.整体设计就是按  抬头(1) + 项目(N) + 伙伴(N) + 相关数据的tabstrip(N)

2.screen设计如下:

3.主界面设计:SCREEN 9000

主屏幕逻辑流:

PBO中针对是否折叠做逻辑控制,显示对应的屏幕:

PAI处理

下面贴全部代码:

主程序:

PROGRAM ZEXP_SCREEN_TEST.

DATA:GT_HEAD  TYPE TABLE OF CRMD_ORDERADM_H,
GW_HEAD LIKE LINE OF GT_HEAD,
GT_ITEM TYPE TABLE OF CRMD_ORDERADM_I,
GW_ITEM LIKE LINE OF GT_ITEM,
GT_PART TYPE TABLE OF CRMD_PARTNER,
GW_PART LIKE LINE OF GT_PART,
OK_CODE TYPE SY-UCOMM,
GV_FLAG1 TYPE CHAR01,
GV_DEC TYPE ZDEC,
GV_FLAG2 TYPE CHAR01,
GV_FLAG3 TYPE CHAR01. *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9001' ITSELF
CONTROLS: TC_9001 TYPE TABLEVIEW USING SCREEN 9001.
DATA:TC_9001_SUB1 TYPE SY-DYNNR.
DATA:TC_9001_SUB2 TYPE SY-DYNNR.
DATA:TC_9001_SUB3 TYPE SY-DYNNR.
DATA:TC_9001_HSUB TYPE SY-DYNNR VALUE '9004'. *&SPWIZARD: LINES OF TABLECONTROL 'TC_9001'
DATA: G_TC_9001_LINES LIKE SY-LOOPC. *&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_ITEM'
CONSTANTS: BEGIN OF C_TS_ITEM,
TAB1 LIKE SY-UCOMM VALUE 'TS_ITEM_FC1',
TAB2 LIKE SY-UCOMM VALUE 'TS_ITEM_FC2',
TAB3 LIKE SY-UCOMM VALUE 'TS_ITEM_FC3',
TAB4 LIKE SY-UCOMM VALUE 'TS_ITEM_FC4',
TAB5 LIKE SY-UCOMM VALUE 'TS_ITEM_FC5',
TAB6 LIKE SY-UCOMM VALUE 'TS_ITEM_FC6',
END OF C_TS_ITEM.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_ITEM'
CONTROLS: TS_ITEM TYPE TABSTRIP.
DATA: BEGIN OF G_TS_ITEM,
SUBSCREEN LIKE SY-DYNNR,
PROG LIKE SY-REPID VALUE 'ZEXP_SCREEN_TEST',
PRESSED_TAB LIKE SY-UCOMM VALUE C_TS_ITEM-TAB1,
END OF G_TS_ITEM. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_9001_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_ITEM LINES TC_9001-LINES.
ENDMODULE. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_9001_GET_LINES OUTPUT.
G_TC_9001_LINES = SY-LOOPC.
IF GW_ITEM-NUMBER_INT IS NOT INITIAL.
LOOP AT SCREEN.
IF SCREEN-NAME = 'GW_ITEM-ITM_TYPE'.
SCREEN-REQUIRED = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE TC_9001_MODIFY INPUT.
PERFORM FRM_9001_FIELD_MODIFY."PAI中更新某内表行数据 MODIFY GT_ITEM
FROM GW_ITEM
INDEX TC_9001-CURRENT_LINE.
IF SY-SUBRC <> 0.
APPEND GW_ITEM TO GT_ITEM.
ENDIF.
ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_9001_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'TC_9001'
'GT_ITEM'
' '
CHANGING OK_CODE.
SY-UCOMM = OK_CODE.
ENDMODULE. *----------------------------------------------------------------------*
* INCLUDE TABLECONTROL_FORMS *
*----------------------------------------------------------------------* *&---------------------------------------------------------------------*
*& Form USER_OK_TC *
*&---------------------------------------------------------------------*
FORM USER_OK_TC USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME
CHANGING P_OK LIKE SY-UCOMM. *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA: L_OK TYPE SY-UCOMM,
L_OFFSET TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------* *&SPWIZARD: Table control specific operations *
*&SPWIZARD: evaluate TC name and operations *
SEARCH P_OK FOR P_TC_NAME.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
L_OFFSET = STRLEN( P_TC_NAME ) + 1.
L_OK = P_OK+L_OFFSET.
*&SPWIZARD: execute general and TC specific operations *
CASE L_OK.
WHEN 'INSR'. "insert row
PERFORM FCODE_INSERT_ROW USING P_TC_NAME
P_TABLE_NAME.
CLEAR P_OK. WHEN 'DELE'. "delete row
PERFORM FCODE_DELETE_ROW USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
CLEAR P_OK. WHEN 'P--' OR "top of list
'P-' OR "previous page
'P+' OR "next page
'P++'. "bottom of list
PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
L_OK.
CLEAR P_OK.
* WHEN 'L--'. "total left
* PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
* WHEN 'L-'. "column left
* PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
* WHEN 'R+'. "column right
* PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
* WHEN 'R++'. "total right
* PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
WHEN 'MARK'. "mark all filled lines
PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK. WHEN 'DMRK'. "demark all filled lines
PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK. * WHEN 'SASCEND' OR
* 'SDESCEND'. "sort column
* PERFORM FCODE_SORT_TC USING P_TC_NAME
* l_ok. ENDCASE. ENDFORM. " USER_OK_TC *&---------------------------------------------------------------------*
*& Form FCODE_INSERT_ROW *
*&---------------------------------------------------------------------*
FORM FCODE_INSERT_ROW
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_LINES_NAME LIKE FELD-NAME.
DATA L_SELLINE LIKE SY-STEPL.
DATA L_LASTLINE TYPE I.
DATA L_LINE TYPE I.
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <LINES> TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
ASSIGN (L_LINES_NAME) TO <LINES>. *&SPWIZARD: get current line *
GET CURSOR LINE L_SELLINE.
IF SY-SUBRC <> 0. " append line to table
L_SELLINE = <TC>-LINES + 1.
*&SPWIZARD: set top line *
IF L_SELLINE > <LINES>.
<TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
ELSE.
<TC>-TOP_LINE = 1.
ENDIF.
ELSE. " insert line into table
L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
ENDIF.
*&SPWIZARD: set new cursor line *
L_LINE = L_SELLINE - <TC>-TOP_LINE + 1. *&SPWIZARD: insert initial line *
INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
<TC>-LINES = <TC>-LINES + 1.
*&SPWIZARD: set cursor *
SET CURSOR LINE L_LINE. ENDFORM. " FCODE_INSERT_ROW *&---------------------------------------------------------------------*
*& Form FCODE_DELETE_ROW *
*&---------------------------------------------------------------------*
FORM FCODE_DELETE_ROW
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME . *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: delete marked lines *
DESCRIBE TABLE <TABLE> LINES <TC>-LINES. LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. IF <MARK_FIELD> = 'X'.
DELETE <TABLE> INDEX SYST-TABIX.
IF SY-SUBRC = 0.
<TC>-LINES = <TC>-LINES - 1.
ENDIF.
ENDIF.
ENDLOOP. ENDFORM. " FCODE_DELETE_ROW *&---------------------------------------------------------------------*
*& Form COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
* -->P_OK ok code
*----------------------------------------------------------------------*
FORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
P_OK.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TC_NEW_TOP_LINE TYPE I.
DATA L_TC_NAME LIKE FELD-NAME.
DATA L_TC_LINES_NAME LIKE FELD-NAME.
DATA L_TC_FIELD_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <LINES> TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
ASSIGN (L_TC_LINES_NAME) TO <LINES>. *&SPWIZARD: is no line filled? *
IF <TC>-LINES = 0.
*&SPWIZARD: yes, ... *
L_TC_NEW_TOP_LINE = 1.
ELSE.
*&SPWIZARD: no, ... *
CALL FUNCTION 'SCROLLING_IN_TABLE'
EXPORTING
ENTRY_ACT = <TC>-TOP_LINE
ENTRY_FROM = 1
ENTRY_TO = <TC>-LINES
LAST_PAGE_FULL = 'X'
LOOPS = <LINES>
OK_CODE = P_OK
OVERLAPPING = 'X'
IMPORTING
ENTRY_NEW = L_TC_NEW_TOP_LINE
EXCEPTIONS
* NO_ENTRY_OR_PAGE_ACT = 01
* NO_ENTRY_TO = 02
* NO_OK_CODE_OR_PAGE_GO = 03
OTHERS = 0.
ENDIF. *&SPWIZARD: get actual tc and column *
GET CURSOR FIELD L_TC_FIELD_NAME
AREA L_TC_NAME. IF SYST-SUBRC = 0.
IF L_TC_NAME = P_TC_NAME.
*&SPWIZARD: et actual column *
SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
ENDIF.
ENDIF. *&SPWIZARD: set the new top line *
<TC>-TOP_LINE = L_TC_NEW_TOP_LINE. ENDFORM. " COMPUTE_SCROLLING_IN_TC *&---------------------------------------------------------------------*
*& Form FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
* marks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: mark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. <MARK_FIELD> = 'X'.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines *&---------------------------------------------------------------------*
*& Form FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
* demarks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME. FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------* ASSIGN (P_TC_NAME) TO <TC>. *&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline *&SPWIZARD: demark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>. *&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>. <MARK_FIELD> = SPACE.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9002' ITSELF
CONTROLS: TC_9002 TYPE TABLEVIEW USING SCREEN 9002. *&SPWIZARD: LINES OF TABLECONTROL 'TC_9002'
DATA: G_TC_9002_LINES LIKE SY-LOOPC. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_9002_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_PART LINES TC_9002-LINES.
ENDMODULE. *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_9002_GET_LINES OUTPUT.
G_TC_9002_LINES = SY-LOOPC.
ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE TC_9002_MODIFY INPUT.
MODIFY GT_PART
FROM GW_PART
INDEX TC_9002-CURRENT_LINE.
IF SY-SUBRC <> 0.
APPEND GW_PART TO GT_PART.
ENDIF.
ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TC 'TC_9002'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_9002_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'TC_9002'
'GT_PART'
' '
CHANGING OK_CODE.
SY-UCOMM = OK_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'ST9000'.
* SET TITLEBAR 'xxx'.
IF GV_FLAG1 = 'X'.
TC_9001_SUB1 = '9101'.
ELSE.
TC_9001_SUB1 = '9001'.
ENDIF.
IF GV_FLAG2 = 'X'.
TC_9001_SUB2 = '9102'.
ELSE.
TC_9001_SUB2 = '9002'.
ENDIF.
IF GV_FLAG3 = 'X'.
TC_9001_SUB3 = '9103'.
ELSE.
TC_9001_SUB3 = '9003'.
ENDIF. PERFORM FRM_HEADER_FIELD_VISIABLE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'CANL' OR 'EXIT'.
LEAVE PROGRAM.
WHEN 'FOLD2'.
IF GV_FLAG2 IS INITIAL.
GV_FLAG2 = 'X'.
ELSE.
CLEAR GV_FLAG2.
ENDIF.
WHEN 'FOLD1'.
IF GV_FLAG1 IS INITIAL.
GV_FLAG1 = 'X'.
ELSE.
CLEAR GV_FLAG1.
ENDIF.
WHEN 'FOLD3'.
IF GV_FLAG3 IS INITIAL.
GV_FLAG3 = 'X'.
ELSE.
CLEAR GV_FLAG3.
ENDIF.
WHEN 'SAVE'.
PERFORM FRM_SAVE_CHECK.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module FRM_SET_DISABLE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE FRM_SET_DISABLE OUTPUT. ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE. *&SPWIZARD: OUTPUT MODULE FOR TS 'TS_ITEM'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_ITEM_ACTIVE_TAB_SET OUTPUT. TS_ITEM-ACTIVETAB = G_TS_ITEM-PRESSED_TAB.
CASE G_TS_ITEM-PRESSED_TAB.
WHEN C_TS_ITEM-TAB1.
G_TS_ITEM-SUBSCREEN = '9031'.
WHEN C_TS_ITEM-TAB2.
G_TS_ITEM-SUBSCREEN = '9032'.
WHEN C_TS_ITEM-TAB3.
G_TS_ITEM-SUBSCREEN = '9033'.
WHEN C_TS_ITEM-TAB4.
G_TS_ITEM-SUBSCREEN = '9034'.
WHEN C_TS_ITEM-TAB5.
G_TS_ITEM-SUBSCREEN = '9035'.
WHEN C_TS_ITEM-TAB6.
G_TS_ITEM-SUBSCREEN = '9036'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE. *&SPWIZARD: INPUT MODULE FOR TS 'TS_ITEM'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_ITEM_ACTIVE_TAB_GET INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN C_TS_ITEM-TAB1.
G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB1.
WHEN C_TS_ITEM-TAB2.
G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB2.
WHEN C_TS_ITEM-TAB3.
G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB3.
WHEN C_TS_ITEM-TAB4.
G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB4.
WHEN C_TS_ITEM-TAB5.
G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB5.
WHEN C_TS_ITEM-TAB6.
G_TS_ITEM-PRESSED_TAB = C_TS_ITEM-TAB6.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module MOD_SET_TAB_VISIABLE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD_SET_TAB_VISIABLE OUTPUT.
IF SY-UNAME = 'LIYUAN'."设置隐藏的TAB页签
LOOP AT SCREEN.
IF SCREEN-NAME = 'TS_ITEM_TAB5'.
SCREEN-INVISIBLE = 'X'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_HEADER_FIELD_VISIABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_HEADER_FIELD_VISIABLE .
LOOP AT SCREEN."设置屏幕字段的隐藏
IF SCREEN-NAME = 'GW_HEAD-OBJECT_ID' OR SCREEN-NAME = 'GW_HEAD-ZZZGROUP'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_9001_FIELD_MODIFY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_9001_FIELD_MODIFY .
IF GW_ITEM-ITM_TYPE = 'ZSPA'."pai中做字段关联逻辑或,字段默认逻辑
GW_ITEM-ZZZBRAND = 'HI'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module FRM_EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE FRM_EXIT INPUT.
LEAVE PROGRAM.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_SAVE_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SAVE_CHECK . ENDFORM.

9000逻辑流:

PROCESS BEFORE OUTPUT.
MODULE STATUS_9000.
CALL SUBSCREEN HSUB INCLUDING SY-REPID TC_9001_HSUB."'9002'.
CALL SUBSCREEN SUB1 INCLUDING SY-REPID TC_9001_SUB1."'9001'.
CALL SUBSCREEN SUB2 INCLUDING SY-REPID TC_9001_SUB2."'9002'.
CALL SUBSCREEN SUB3 INCLUDING SY-REPID TC_9001_SUB3."'9002'. * MODULE FRM_SET_DISABLE.
*
PROCESS AFTER INPUT.
MODULE FRM_EXIT AT EXIT-COMMAND.
CALL SUBSCREEN HSUB.
CALL SUBSCREEN SUB1.
CALL SUBSCREEN SUB2.
CALL SUBSCREEN SUB3. MODULE USER_COMMAND_9000.

9001TC逻辑流

PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_9001'
MODULE TC_9001_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_9001_CHANGE_COL_ATTR.
LOOP AT GT_ITEM
INTO GW_ITEM
WITH CONTROL TC_9001
CURSOR TC_9001-CURRENT_LINE.
MODULE TC_9001_GET_LINES.
*&SPWIZARD: MODULE TC_9001_CHANGE_FIELD_ATTR
ENDLOOP. MODULE STATUS_9001.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_9001'
LOOP AT GT_ITEM.
CHAIN.
FIELD GW_ITEM-NUMBER_INT.
FIELD GW_ITEM-ITM_TYPE.
FIELD GW_ITEM-ZZZBRAND.
FIELD GW_ITEM-ZZZMODENO.
FIELD GW_ITEM-ZZZSERIALNO.
FIELD GW_ITEM-ZZPLANT.
FIELD GW_ITEM-ZZLGORT.
FIELD GW_ITEM-ZZSYMP_GROU.
FIELD GW_ITEM-ZZSYMP_CODE.
MODULE TC_9001_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
ENDLOOP.
MODULE TC_9001_USER_COMMAND.
*&SPWIZARD: MODULE TC_9001_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_9001_CHANGE_COL_ATTR. * MODULE USER_COMMAND_9001.

9002TC逻辑流:

PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_9002'
MODULE TC_9002_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_9002_CHANGE_COL_ATTR.
LOOP AT GT_PART
INTO GW_PART
WITH CONTROL TC_9002
CURSOR TC_9002-CURRENT_LINE.
MODULE TC_9002_GET_LINES.
*&SPWIZARD: MODULE TC_9002_CHANGE_FIELD_ATTR
ENDLOOP. * MODULE STATUS_9002.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_9002'
LOOP AT GT_PART.
CHAIN.
FIELD GW_PART-PARTNER_FCT.
FIELD GW_PART-PARTNER_NO.
FIELD GW_PART-DISPLAY_TYPE.
FIELD GW_PART-NO_TYPE.
FIELD GW_PART-ADDR_NP.
MODULE TC_9002_MODIFY ON CHAIN-REQUEST.
endchain.
ENDLOOP.
MODULE TC_9002_USER_COMMAND.
*&SPWIZARD: MODULE TC_9002_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_9002_CHANGE_COL_ATTR. * MODULE USER_COMMAND_9002.

TAB STRIP逻辑流:

PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_ITEM'
MODULE TS_ITEM_ACTIVE_TAB_SET.
CALL SUBSCREEN:
9031_SCA INCLUDING G_TS_ITEM-PROG '9031',
9032_SCA INCLUDING G_TS_ITEM-PROG '9032',
9033_SCA INCLUDING G_TS_ITEM-PROG '9033',
9034_SCA INCLUDING G_TS_ITEM-PROG '9034',
9035_SCA INCLUDING G_TS_ITEM-PROG '9035',
9036_SCA INCLUDING G_TS_ITEM-PROG '9036'.
MODULE MOD_SET_TAB_VISIABLE.
* MODULE STATUS_9003.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_ITEM'
CALL SUBSCREEN:
9031_SCA,
9032_SCA,
9033_SCA,
9034_SCA,
9035_SCA,
9036_SCA.
MODULE TS_ITEM_ACTIVE_TAB_GET.
* MODULE USER_COMMAND_9003.

不管是主屏幕还是子屏幕,逻辑流处理顺序都是自上而下,从左到右。所以在一些关联控制的时候,需要做好屏幕和处理逻辑的顺序。

ABAP基础三——DIALOG整体的更多相关文章

  1. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  2. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  3. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  4. Bootstrap <基础三十>Well

    Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...

  5. Bootstrap<基础三> 排版

    Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans-serif 作为其默认的字体栈. 使用 Bootstrap 的排版特性,您可以创建标题.段落. ...

  6. jdbc基础 (三) 大文本、二进制数据处理

    LOB (Large Objects)   分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有B ...

  7. Ruby语法基础(三)

    Ruby语法基础(三) ​ 在前面快速入之后,这次加深对基本概念的理解. 字符串 ​ Ruby字符串可以分为单引号字符串和双引号字符串,单引号字符串效率更高,但双引号的支持转义和运行 puts '单引 ...

  8. C#_02.13_基础三_.NET类基础

    C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...

  9. 04 mysql 基础三 (进阶)

    mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; ​ select * from student; ​ select * from ...

  10. Python 基础 三 反射

    Python 基础 三 反射 今天我们先介绍一下反射这个概念,啥是反射?反射就是自己检测自己.在我们Python的面向对象中的反射是啥意思呢?就是通过字符串的形式操作对象相关的属性.python中的一 ...

随机推荐

  1. 小程序和APP抓包的问题

    小程序和APP抓包的问题 很多同学都会遇到小程序和APP抓不到包的问题,抓不到https请求包,这边给大家提供一些解决方案. Yakit工具 首先需要的就是一个抓包神器yakit,这个工具非常好用强大 ...

  2. 如何在linux中查看cpu信息、机器硬件型号

    # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz (看到有8 ...

  3. 正则表达式--java进阶day06

    1.正则表达式 2.正则表达式的规则.使用 3.字符类讲解 如图,单独一个a满足正则表达式的规则,所以返回true 当删去[]后,正则表达式中的规则就会变为必须是abc,否则不满足条件,即使有一个a ...

  4. 【Docker】简介

    Docker 简介 某个应用,如果可以提供服务,那么就可以打包成docker供给他人使用 是什么 我们具体来看看Docker. 大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器 ...

  5. C# Socket 使用教程

    我在学习Socket时,总是感觉文章看不懂,视频又好长,所以留下这篇学习笔记,权当做同学间学习参考,与个人回顾吧. 简介 Socket(译做:管道/套接字)是一个便捷的类 用于封装通信时所涉及到复杂底 ...

  6. 【Linux】U-Boot 加载并启动 Linux 系统程序

    U-Boot 加载并启动 Linux 系统程序 零.介绍 最近在玩一些嵌入式的开发板,在引导操作系统时需要用到U-Boot,故此研究一下. U-Boot(Universal Bootloader)是一 ...

  7. 【Ubuntu】在Ubuntu上配置Java环境

    [Ubuntu]在Ubuntu上配置Java环境 壹.前言 Java是运用得非常广泛的编程语言,在使用Linux时难免会碰到需要用到JDK的情况,故本文介绍如何在Ubuntu上配置Java21环境. ...

  8. 比较LLM的function calling,Agent 和MCP

    比较 对比维度 ​MCP(Model Context Protocol)​ ​Function Calling ​Agent(智能体)​ ​定义 由 Anthropic 推出的开放协议,标准化 LLM ...

  9. HTTP 分段下载

    GET /user_crc.bin HTTP/1.1 Host: mnif.cn Range: bytes=0-1000

  10. Avalnoia跨平台实战记录(一),Avalonia初始化

    前言: 记录一下小菜鸟程序员从WPF一知半解转向Avalonia跨平台桌面端开发的一点记录和感想,我个人是比较喜欢用.NET来开发的,当然,这也和我的技术栈有很大关系,本人只是从大专出来的,在学校里学 ...