【无标题】ABAP 代码效率比对
代码效率比对
通过对标准程序SAT代码进行的一个包装,满足了自定义代码效率比对的功能
上传代码文档
双击Test run,可以看到代码,点击运行可以知道效率
编辑左右两边的代码,跟SE38一样,但是编辑完保存之后,需要退到初始界面再进来才行(这个地方需要注意代码长度因为太长就保存不起)
代码如下:
*&---------------------------------------------------------------------*
*& Report SAT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZSAT MESSAGE-ID ZI NO STANDARD PAGE HEADING.
INCLUDE <ICON>.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* SELECTION SCREEN
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
PARAMETERS: PAR_TEST AS CHECKBOX,
PAR_FROM(2) TYPE P,
PAR_TO(2) TYPE P,
PAR_CNT(2) TYPE P DEFAULT 1,
SAPCLOCK RADIOBUTTON GROUP PGR1,
OSCLOCK RADIOBUTTON GROUP PGR1,
LKTEST AS CHECKBOX USER-COMMAND KK,
P_FILE TYPE STRING DEFAULT '\\' MODIF ID KK.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* TYPES AND DATA
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* types
TYPES: T_SLINE TYPE EDPLINE,
BEGIN OF T_S,
LINE TYPE T_SLINE,
END OF T_S.
* controls
DATA: DOCKING_CONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER,
TREE TYPE REF TO CL_SIMPLE_TREE_MODEL,
MAIN_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
V_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
H_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
H1_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
H2_CONTAINER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER,
CODE_RIGHT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT,
CODE_LEFT_EDITOR TYPE REF TO CL_GUI_TEXTEDIT,
GLOBAL_DATA_CONTAINER TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER,
GLOBAL_DATA_VIEWER TYPE REF TO CL_GUI_TEXTEDIT,
DD TYPE REF TO CL_DD_DOCUMENT,
DD_LEFT TYPE REF TO CL_DD_DOCUMENT,
DD_RIGHT TYPE REF TO CL_DD_DOCUMENT.
* dynpro
DATA: FCODE LIKE SY-UCOMM.
DATA: RUNTIME_L TYPE I.
DATA: RUNTIME_R TYPE I.
DATA: RUNTIME_X TYPE C.
DATA: TITLE_LEFT TYPE T_SLINE.
DATA: TITLE_RIGHT TYPE T_SLINE.
DATA: XTENDED_TITLE(70).
* coding
DATA: SL TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE,
SR TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
DATA: INIT_L TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE,
INIT_R TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
DATA: INIX_L TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE,
INIX_R TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
DATA: C TYPE STANDARD TABLE OF T_SLINE WITH HEADER LINE.
* buffer
DATA: BEGIN OF R OCCURS 200, LINE TYPE T_SLINE, END OF R.
DATA: BEGIN OF E OCCURS 200, LINE TYPE T_SLINE, END OF E.
DATA: BEGIN OF X OCCURS 200, LINE TYPE T_SLINE, END OF X.
* subroutine pool
DATA: POOL_NAME LIKE SY-REPID.
DATA: SOURCE_TMP TYPE STANDARD TABLE OF T_S WITH HEADER LINE.
* other
DATA: RUNTIME_MULT TYPE I VALUE 10.
DATA: RUNTIME_BASE TYPE I.
DATA: X_TABIX LIKE SY-TABIX,
SYN_ERROR,
GEN_ERROR.
DATA: CLOCK_TYPE TYPE I,
CLOCK_TYPE_N(1) TYPE N.
DATA: BEGIN OF GDS_Y ,
LINE TYPE T_SLINE,
END OF GDS_Y.
DATA GDT_Y LIKE TABLE OF GDS_Y.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* INITIALIZATION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
INITIALIZATION.
GET PARAMETER ID 'ATRA_CLOCK_TYPE' FIELD CLOCK_TYPE_N.
CASE CLOCK_TYPE_N.
WHEN '1'. CLOCK_TYPE = 1.
WHEN '2'. CLOCK_TYPE = 2.
ENDCASE.
CASE CLOCK_TYPE.
WHEN 1. SAPCLOCK = ' '. OSCLOCK = 'X'.
WHEN 2. SAPCLOCK = 'X'. OSCLOCK = ' '.
WHEN OTHERS. SAPCLOCK = 'X'. OSCLOCK = ' '.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. "全部可以本地上传
PERFORM GET_LOCAL_FORM USING P_FILE.
AT SELECTION-SCREEN OUTPUT.
PERFORM GET_ACTIVE.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* START-OF-SELECTION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
START-OF-SELECTION.
PERFORM AUTHORITY_CHECK.
IF OSCLOCK = 'X'.
SET RUN TIME CLOCK RESOLUTION LOW.
ENDIF.
PERFORM INIT.
IF PAR_TEST IS INITIAL.
CALL SCREEN 100.
ELSE.
PERFORM TEST_EXAMPLES."最好只能在测试环境使用
ENDIF.
*---------------------------------------------------------------------*
* FORM INIT *
*---------------------------------------------------------------------*
FORM INIT.
* Read program prototype (with global data) into table R
TRY.
READ REPORT 'RSHOWTI0' INTO R. "获取RSHOWTI0中的代码给R
CATCH CX_SY_READ_SRC_LINE_TOO_LONG.
MESSAGE E501.
ENDTRY.
* Read examples into table X
IF LKTEST = 'X'.
PERFORM READ_SHOW .
ELSE.
PERFORM READ_RSHOWTIX USING:
'RSHOWTI1',
'RSHOWTI2',
'RSHOWTI3',
'RSHOWTI4',
'RSHOWTI5',
'RSHOWTI6'.
ENDIF.
* Measure time of GET RUNTIME statement
PERFORM SET_RUNTIME_BASE.
ENDFORM. "INIT
*---------------------------------------------------------------------*
* FORM READ_RSHOWTIX *
*---------------------------------------------------------------------*
FORM READ_RSHOWTIX USING RNAME LIKE SY-REPID.
DATA: BEGIN OF Y OCCURS 200, LINE TYPE T_SLINE, END OF Y.
DATA: NO_DISPLAY.
TRY.
READ REPORT RNAME INTO Y.
CATCH CX_SY_READ_SRC_LINE_TOO_LONG.
MESSAGE E501.
ENDTRY.
LOOP AT Y INTO X.
IF X-LINE(3) = '*>T'.
IF X-LINE+3(1) = '('.
NO_DISPLAY = 'X'.
ELSE.
NO_DISPLAY = SPACE.
ENDIF.
ENDIF.
IF NO_DISPLAY = SPACE.
APPEND X.
ENDIF.
ENDLOOP.
ENDFORM. "READ_RSHOWTIX
*---------------------------------------------------------------------*
* FORM SET_RUNTIME_BASE *
*---------------------------------------------------------------------*
* Time measurement for "GET RUNTIME" statement *
*---------------------------------------------------------------------*
FORM SET_RUNTIME_BASE.
DATA: I1 TYPE I, I2 TYPE I.
*
RUNTIME_BASE = 999999.
DO 10 TIMES.
GET RUN TIME FIELD I1.
GET RUN TIME FIELD I2.
I2 = I2 - I1.
IF I2 LT RUNTIME_BASE.
RUNTIME_BASE = I2.
ENDIF.
ENDDO.
ENDFORM. "SET_RUNTIME_BASE
*---------------------------------------------------------------------*
* FORM GET_RUNTIME *
*---------------------------------------------------------------------*
FORM GET_RUNTIME.
DATA: BEGIN OF SYN_MSG, L1(72), L2(72), L3(72), END OF SYN_MSG.
DATA: SYN_LIN TYPE I, SYN_WRD(30). "#EC NEEDED
DATA: MSG(218) TYPE C.
CLEAR RUNTIME_L.
CLEAR RUNTIME_R.
CLEAR RUNTIME_X.
PERFORM FILL_S.
TRY.
GENERATE SUBROUTINE POOL SOURCE_TMP NAME POOL_NAME "用这个 SOURCE_TMP 里面的代码 创建名字的程序POOL_NAME
MESSAGE SYN_MSG LINE SYN_LIN WORD SYN_WRD.
IF SY-SUBRC EQ 0.
PERFORM UPL IN PROGRAM (POOL_NAME) USING RUNTIME_L RUNTIME_MULT. "执行POOL_NAME中的 UPL form--左边的代码
SUBTRACT RUNTIME_BASE FROM RUNTIME_L.
IF RUNTIME_L < 0. RUNTIME_L = 0. ENDIF.
PERFORM UPR IN PROGRAM (POOL_NAME) USING RUNTIME_R RUNTIME_MULT. "执行POOL_NAME中的 UPR form--右边的代码
SUBTRACT RUNTIME_BASE FROM RUNTIME_R.
IF RUNTIME_R < 0. RUNTIME_R = 0. ENDIF.
RUNTIME_X = 'X'.
ELSE.
SYN_ERROR = 'X'.
CONCATENATE SYN_MSG-L1 SYN_MSG-L2 SYN_MSG-L3 INTO MSG
SEPARATED BY SPACE.
MESSAGE I666(01) WITH MSG(50) MSG+50(50) MSG+100(50) MSG+150(50).
ENDIF.
CATCH CX_SY_GENERATE_SUBPOOL_FULL.
GEN_ERROR = 'X'.
MESSAGE S012.
EXIT.
ENDTRY.
ENDFORM. "GET_RUNTIME
*---------------------------------------------------------------------*
* FORM FILL_S *
*---------------------------------------------------------------------*
FORM FILL_S.
DATA: FORMFLAG.
REFRESH SOURCE_TMP.
*-------SOURCE_TMP 这个表是最终 动态程序中的代码----------
LOOP AT R INTO SOURCE_TMP.
APPEND SOURCE_TMP.
IF SOURCE_TMP-LINE = '*>D'.
CASE OSCLOCK.
WHEN ' '. SOURCE_TMP = 'DATA OSCLOCK VALUE '' ''.'.
WHEN 'X'. SOURCE_TMP = 'DATA OSCLOCK VALUE ''X''.'.
ENDCASE.
APPEND SOURCE_TMP.
ENDIF.
IF SOURCE_TMP-LINE = '*>L'.
LOOP AT SL INTO SOURCE_TMP. "把左边的代码放在代码的这个位置
IF SOURCE_TMP-LINE(5) = 'FORM'. EXIT. ENDIF.
APPEND SOURCE_TMP.
ENDLOOP.
ELSEIF SOURCE_TMP-LINE = '*>R'. "把右边的代码放在代码的这个位置
LOOP AT SR INTO SOURCE_TMP.
IF SOURCE_TMP-LINE(5) = 'FORM'. EXIT. ENDIF.
APPEND SOURCE_TMP.
ENDLOOP.
ELSEIF SOURCE_TMP-LINE = '*>LI'.
LOOP AT INIT_L INTO SOURCE_TMP.
APPEND SOURCE_TMP.
ENDLOOP.
ELSEIF SOURCE_TMP-LINE = '*>RI'.
LOOP AT INIT_R INTO SOURCE_TMP.
APPEND SOURCE_TMP.
ENDLOOP.
ELSEIF SOURCE_TMP-LINE = '*>LX'.
LOOP AT INIX_L INTO SOURCE_TMP.
APPEND SOURCE_TMP.
ENDLOOP.
ELSEIF SOURCE_TMP-LINE = '*>RX'.
LOOP AT INIX_R INTO SOURCE_TMP.
APPEND SOURCE_TMP.
ENDLOOP.
ELSEIF SOURCE_TMP-LINE = '*>FO'.
FORMFLAG = SPACE.
LOOP AT SL INTO SOURCE_TMP.
IF SOURCE_TMP-LINE(5) = 'FORM'. FORMFLAG = 'X'.ENDIF.
IF FORMFLAG = 'X'.
APPEND SOURCE_TMP.
ENDIF.
ENDLOOP.
FORMFLAG = SPACE.
LOOP AT SR INTO SOURCE_TMP.
IF SOURCE_TMP-LINE(5) = 'FORM'. FORMFLAG = 'X'.ENDIF.
IF FORMFLAG = 'X'.
APPEND SOURCE_TMP.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. "FILL_S
*----------------------------------------------------------------------*
* FORM GET_EXAMPLE *
*----------------------------------------------------------------------*
* Transport example from table of examples X into corresponding *
* fields and tables *
*----------------------------------------------------------------------*
FORM GET_EXAMPLE.
DATA: XTYPE.
REFRESH: C, INIT_L, INIT_R, SL, SR,
INIX_L, INIX_R.
RUNTIME_MULT = 10.
READ TABLE X INDEX X_TABIX.
IF SY-SUBRC = 0 AND X-LINE(4) = '*>T'.
XTENDED_TITLE = X-LINE+4.
ELSE.
CLEAR XTENDED_TITLE.
ENDIF.
DO.
ADD 1 TO X_TABIX.
READ TABLE X INDEX X_TABIX.
IF SY-SUBRC NE 0. EXIT. ENDIF.
CASE X-LINE(4).
WHEN '*>O'. "No action
WHEN '*>U'. "No action
WHEN '*>V'. "No action
WHEN '*>T'. EXIT.
WHEN '*>X'. XTENDED_TITLE = X-LINE+4.
WHEN '*>#'.
IF X-LINE+4(4) CO ' 0123456789'.
RUNTIME_MULT = X-LINE+4(4).
ENDIF.
WHEN '*>LI'. XTYPE = 'I'.
WHEN '*>LX'. XTYPE = 'M'.
WHEN '*>L'.
XTYPE = 'L'.
TITLE_LEFT = X-LINE+3.
WHEN '*>RI'. XTYPE = 'J'.
WHEN '*>RX'. XTYPE = 'N'.
WHEN '*>R'.
XTYPE = 'R'.
TITLE_RIGHT = X-LINE+3.
WHEN '*>C'. XTYPE = 'C'.
WHEN OTHERS.
CASE XTYPE.
WHEN 'L'. APPEND X-LINE TO SL.
WHEN 'R'. APPEND X-LINE TO SR.
WHEN 'C'. APPEND X-LINE TO C.
WHEN 'I'. APPEND X-LINE TO INIT_L.
WHEN 'J'. APPEND X-LINE TO INIT_R.
WHEN 'M'. APPEND X-LINE TO INIX_L.
WHEN 'N'. APPEND X-LINE TO INIX_R.
ENDCASE.
ENDCASE.
ENDDO.
ENDFORM. "GET_EXAMPLE
*---------------------------------------------------------------------*
* FORM TEST_EXAMPLES *
*---------------------------------------------------------------------*
FORM TEST_EXAMPLES.
DATA: L_TITLE(40),
NR LIKE PAR_FROM.
*
LOOP AT X WHERE LINE(3) = '*>T'.
IF NOT PAR_FROM IS INITIAL AND NOT PAR_TO IS INITIAL.
ADD 1 TO NR.
CHECK NR >= PAR_FROM AND NR <= PAR_TO.
ENDIF.
L_TITLE = X-LINE+3(*).
X_TABIX = SY-TABIX.
PERFORM GET_EXAMPLE.
RUNTIME_MULT = PAR_CNT.
PERFORM GET_RUNTIME.
IF SYN_ERROR IS INITIAL.
IF GEN_ERROR IS INITIAL.
WRITE: /(40) L_TITLE, '|', RUNTIME_L, '|', RUNTIME_R, '|'.
ELSE.
WRITE: /(40) L_TITLE, ICON_WARNING AS ICON, TEXT-003.
ENDIF.
ELSE.
WRITE: /(40) L_TITLE, ICON_ALERT AS ICON, TEXT-002.
CLEAR SYN_ERROR.
ENDIF.
ENDLOOP.
ENDFORM. "TEST_EXAMPLES
*----------------------------------------------------------------------*
* FORM INIT_TREE *
*----------------------------------------------------------------------*
FORM INIT_TREE.
DATA: RTEXT TYPE STRING.
DATA: OTEXT TYPE STRING.
DATA: UTEXT TYPE STRING.
DATA: ETEXT TYPE STRING.
RTEXT = TEXT-001.
CALL METHOD TREE->ADD_NODE
EXPORTING
NODE_KEY = 'ROOT'
ISFOLDER = 'X'
TEXT = RTEXT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
RTEXT = 'ROOT'.
LOOP AT X WHERE LINE(2) = '*>'.
CASE X-LINE(3).
WHEN '*>O'.
OTEXT = X-LINE+4.
CALL METHOD TREE->ADD_NODE
EXPORTING
NODE_KEY = OTEXT
ISFOLDER = 'X'
TEXT = OTEXT
RELATIVE_NODE_KEY = RTEXT
RELATIONSHIP = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CLEAR UTEXT.
WHEN '*>U'.
UTEXT = X-LINE+4.
CALL METHOD TREE->ADD_NODE
EXPORTING
NODE_KEY = UTEXT
ISFOLDER = 'X'
TEXT = UTEXT
RELATIVE_NODE_KEY = OTEXT
RELATIONSHIP = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
WHEN '*>V'.
CLEAR UTEXT.
WHEN '*>T'.
IF UTEXT IS INITIAL.
ETEXT = X-LINE+4.
CALL METHOD TREE->ADD_NODE
EXPORTING
NODE_KEY = ETEXT
ISFOLDER = ' '
TEXT = ETEXT
RELATIVE_NODE_KEY = OTEXT
RELATIONSHIP = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
ELSE.
ETEXT = X-LINE+4.
CALL METHOD TREE->ADD_NODE
EXPORTING
NODE_KEY = ETEXT
ISFOLDER = ' '
TEXT = ETEXT
RELATIVE_NODE_KEY = UTEXT
RELATIONSHIP = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
CALL METHOD TREE->EXPAND_NODE
EXPORTING
NODE_KEY = RTEXT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
ENDFORM. "INIT_TREE
*---------------------------------------------------------------------*
* CLASS LCL_EH
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS LCL_EH DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
HANDLE_NODE_DOUBLE_CLICK
FOR EVENT NODE_DOUBLE_CLICK
OF CL_SIMPLE_TREE_MODEL
IMPORTING NODE_KEY.
CLASS-METHODS:
HANDLE_CLOSE
FOR EVENT CLOSE
OF CL_GUI_DIALOGBOX_CONTAINER.
ENDCLASS. "LCL_EH DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_eh IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS LCL_EH IMPLEMENTATION.
METHOD HANDLE_NODE_DOUBLE_CLICK.
DATA: ILINE TYPE T_SLINE,
CODE TYPE STANDARD TABLE OF T_SLINE,
CODELINE TYPE T_SLINE.
CONCATENATE '*>T' NODE_KEY INTO ILINE SEPARATED BY SPACE.
READ TABLE X WITH KEY LINE = ILINE TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
X_TABIX = SY-TABIX.
PERFORM GET_EXAMPLE.
CLEAR CODE[].
LOOP AT SL INTO CODELINE.
APPEND CODELINE TO CODE.
ENDLOOP.
CALL METHOD CODE_LEFT_EDITOR->SET_TEXT_AS_R3TABLE
EXPORTING
TABLE = CODE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CLEAR CODE[].
LOOP AT SR INTO CODELINE.
APPEND CODELINE TO CODE.
ENDLOOP.
CALL METHOD CODE_RIGHT_EDITOR->SET_TEXT_AS_R3TABLE
EXPORTING
TABLE = CODE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CLEAR RUNTIME_X.
SET PF-STATUS 'MAIN'.
ENDIF.
ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICK
METHOD HANDLE_CLOSE.
CALL METHOD GLOBAL_DATA_VIEWER->FREE.
CALL METHOD GLOBAL_DATA_CONTAINER->FREE.
CLEAR GLOBAL_DATA_CONTAINER.
CLEAR GLOBAL_DATA_VIEWER.
ENDMETHOD. "HANDLE_CLOSE
ENDCLASS. "LCL_EH IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
DATA: EVENT TYPE CNTL_SIMPLE_EVENT,
EVENTS TYPE CNTL_SIMPLE_EVENTS.
DATA: REUSE TYPE C.
DATA: REUSE_LEFT TYPE C.
DATA: REUSE_RIGHT TYPE C.
DATA: LINE(255) TYPE C.
SET PF-STATUS 'MAIN'.
IF XTENDED_TITLE IS INITIAL.
SET TITLEBAR '001'.
ELSE.
SET TITLEBAR '002' WITH XTENDED_TITLE.
ENDIF.
* container and textedits
IF MAIN_CONTAINER IS INITIAL.
CREATE OBJECT MAIN_CONTAINER
EXPORTING
CONTAINER_NAME = 'MAIN_CONTAINER'
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CREATE OBJECT V_CONTAINER
EXPORTING
PARENT = MAIN_CONTAINER
ORIENTATION = CL_GUI_EASY_SPLITTER_CONTAINER=>ORIENTATION_VERTICAL
SASH_POSITION = 80
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CREATE OBJECT H_CONTAINER
EXPORTING
PARENT = V_CONTAINER->TOP_LEFT_CONTAINER
ORIENTATION = CL_GUI_EASY_SPLITTER_CONTAINER=>ORIENTATION_HORIZONTAL
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CREATE OBJECT H1_CONTAINER
EXPORTING
PARENT = H_CONTAINER->TOP_LEFT_CONTAINER
ORIENTATION = CL_GUI_EASY_SPLITTER_CONTAINER=>ORIENTATION_VERTICAL
SASH_POSITION = 0
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CREATE OBJECT CODE_LEFT_EDITOR
EXPORTING
PARENT = H1_CONTAINER->BOTTOM_RIGHT_CONTAINER
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
WORDWRAP_POSITION = 72
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CALL METHOD CODE_LEFT_EDITOR->SET_READONLY_MODE
EXPORTING
READONLY_MODE = 1.
CREATE OBJECT H2_CONTAINER
EXPORTING
PARENT = H_CONTAINER->BOTTOM_RIGHT_CONTAINER
ORIENTATION = CL_GUI_EASY_SPLITTER_CONTAINER=>ORIENTATION_VERTICAL
SASH_POSITION = 0
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CREATE OBJECT CODE_RIGHT_EDITOR
EXPORTING
PARENT = H2_CONTAINER->BOTTOM_RIGHT_CONTAINER
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
WORDWRAP_POSITION = 72
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CALL METHOD CODE_RIGHT_EDITOR->SET_READONLY_MODE
EXPORTING
READONLY_MODE = 1.
ENDIF.
* left heading
IF NOT ( TITLE_LEFT IS INITIAL AND RUNTIME_X IS INITIAL ).
IF DD_LEFT IS INITIAL.
CREATE OBJECT DD_LEFT.
CLEAR REUSE_LEFT.
ELSE.
REUSE_LEFT = 'X'.
ENDIF.
CALL METHOD H1_CONTAINER->SET_SASH_POSITION
EXPORTING
SASH_POSITION = 20.
CALL METHOD DD_LEFT->INITIALIZE_DOCUMENT.
IF NOT TITLE_LEFT IS INITIAL.
LINE = TITLE_LEFT.
CALL METHOD DD_LEFT->ADD_TEXT
EXPORTING
TEXT = LINE
SAP_STYLE = 'heading'.
CALL METHOD DD_LEFT->NEW_LINE.
ENDIF.
IF NOT RUNTIME_X IS INITIAL.
DATA: RTL(11) TYPE C.
WRITE RUNTIME_L TO RTL.
CONCATENATE TEXT-004 RTL TEXT-005 INTO LINE SEPARATED BY SPACE.
CALL METHOD DD_LEFT->ADD_TEXT
EXPORTING
TEXT = LINE.
CALL METHOD DD_LEFT->NEW_LINE.
ENDIF.
CALL METHOD DD_LEFT->MERGE_DOCUMENT.
CALL METHOD DD_LEFT->DISPLAY_DOCUMENT
EXPORTING
PARENT = H1_CONTAINER->TOP_LEFT_CONTAINER
REUSE_CONTROL = REUSE_LEFT
EXCEPTIONS
HTML_DISPLAY_ERROR = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
ENDIF.
* right heading
IF NOT ( TITLE_RIGHT IS INITIAL AND RUNTIME_X IS INITIAL ).
IF DD_RIGHT IS INITIAL.
CREATE OBJECT DD_RIGHT.
CLEAR REUSE_RIGHT.
ELSE.
REUSE_RIGHT = 'X'.
ENDIF.
CALL METHOD H2_CONTAINER->SET_SASH_POSITION
EXPORTING
SASH_POSITION = 20.
CALL METHOD DD_RIGHT->INITIALIZE_DOCUMENT.
IF NOT TITLE_RIGHT IS INITIAL.
LINE = TITLE_RIGHT.
CALL METHOD DD_RIGHT->ADD_TEXT
EXPORTING
TEXT = LINE
SAP_STYLE = 'heading'.
CALL METHOD DD_RIGHT->NEW_LINE.
ENDIF.
IF NOT RUNTIME_X IS INITIAL.
DATA: RTR(11) TYPE C.
WRITE RUNTIME_R TO RTR.
CONCATENATE TEXT-004 RTR TEXT-005 INTO LINE SEPARATED BY SPACE.
CALL METHOD DD_RIGHT->ADD_TEXT
EXPORTING
TEXT = LINE.
CALL METHOD DD_RIGHT->NEW_LINE.
ENDIF.
CALL METHOD DD_RIGHT->MERGE_DOCUMENT.
CALL METHOD DD_RIGHT->DISPLAY_DOCUMENT
EXPORTING
PARENT = H2_CONTAINER->TOP_LEFT_CONTAINER
REUSE_CONTROL = REUSE_RIGHT
EXCEPTIONS
HTML_DISPLAY_ERROR = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
ENDIF.
* docking container
IF DOCKING_CONTAINER IS INITIAL.
CREATE OBJECT DOCKING_CONTAINER
EXPORTING
SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CALL METHOD DOCKING_CONTAINER->SET_WIDTH
EXPORTING
WIDTH = 300.
CREATE OBJECT TREE
EXPORTING
NODE_SELECTION_MODE = CL_SIMPLE_TREE_MODEL=>NODE_SEL_MODE_SINGLE
HIDE_SELECTION = 'X'
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CALL METHOD TREE->CREATE_TREE_CONTROL
EXPORTING
PARENT = DOCKING_CONTAINER
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
EVENT-EVENTID = CL_SIMPLE_TREE_MODEL=>EVENTID_NODE_DOUBLE_CLICK.
EVENT-APPL_EVENT = 'X'.
APPEND EVENT TO EVENTS.
CALL METHOD TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
SET HANDLER LCL_EH=>HANDLE_NODE_DOUBLE_CLICK FOR TREE.
PERFORM INIT_TREE.
ENDIF.
* comment as dynamic text
IF NOT C[] IS INITIAL.
IF DD IS INITIAL.
CREATE OBJECT DD.
CLEAR REUSE.
ELSE.
REUSE = 'X'.
ENDIF.
CALL METHOD DD->INITIALIZE_DOCUMENT.
CALL METHOD DD->ADD_TEXT
EXPORTING
TEXT = TEXT-006
SAP_STYLE = 'heading'.
CALL METHOD DD->NEW_LINE.
LOOP AT C INTO LINE.
SHIFT LINE LEFT.
CALL METHOD DD->ADD_TEXT
EXPORTING
TEXT = LINE.
CALL METHOD DD->NEW_LINE.
ENDLOOP.
CALL METHOD DD->MERGE_DOCUMENT.
CALL METHOD DD->DISPLAY_DOCUMENT
EXPORTING
PARENT = V_CONTAINER->BOTTOM_RIGHT_CONTAINER
REUSE_CONTROL = REUSE
EXCEPTIONS
HTML_DISPLAY_ERROR = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
DATA: RETURN_CODE TYPE I.
CALL METHOD CL_GUI_CFW=>DISPATCH
IMPORTING
RETURN_CODE = RETURN_CODE.
IF RETURN_CODE <> CL_GUI_CFW=>RC_NOEVENT.
CLEAR FCODE.
EXIT.
ENDIF.
CASE FCODE.
WHEN 'EXIT' OR 'CANCEL'.
CALL METHOD CODE_LEFT_EDITOR->FREE.
CALL METHOD CODE_RIGHT_EDITOR->FREE.
CALL METHOD H2_CONTAINER->FREE.
CALL METHOD H1_CONTAINER->FREE.
CALL METHOD H_CONTAINER->FREE.
CALL METHOD V_CONTAINER->FREE.
CALL METHOD MAIN_CONTAINER->FREE.
CALL METHOD DOCKING_CONTAINER->FREE.
IF NOT GLOBAL_DATA_CONTAINER IS INITIAL.
CALL METHOD GLOBAL_DATA_VIEWER->FREE.
CALL METHOD GLOBAL_DATA_CONTAINER->FREE.
ENDIF.
LEAVE PROGRAM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'TIME'.
PERFORM GET_RUNTIME.
WHEN 'EDIL'.
PERFORM EDIT_LEFT.
WHEN 'EDIR'.
PERFORM EDIT_RIGHT.
* WHEN 'SAVE'.
* PERFORM SAVE_DATA.
WHEN 'GLOB'.
PERFORM SHOW_GLOBAL.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
* FORM AUTHORITY_CHECK *
*----------------------------------------------------------------------*
* Update authority: system, client, editor
*----------------------------------------------------------------------*
FORM AUTHORITY_CHECK.
DATA: SYSTEMLOCK LIKE TADIR-EDTFLAG,
SYS_CLIINDDEP_LOCK LIKE T000-CCNOCLIIND,
CHANGEABILITY TYPE DLV_CHANGE,
UNAME LIKE SY-UNAME.
UNAME = SY-UNAME.
IF UNAME = 'SAP*'.
MESSAGE S400(S7).
EXIT.
ENDIF.
* DATA: GUID TYPE GUID_22.
* DATA: ENQKEY TYPE CHAR30.
*
* CALL FUNCTION 'GUID_CREATE'
* IMPORTING
* EV_GUID_22 = GUID.
*
* CONCATENATE SY-REPID(8) GUID INTO ENQKEY.
*
* call function 'RS_ACCESS_PERMISSION'
* exporting
* AUTHORITY_CHECK = 'X'
* MODE = 'MODIFY'
* object = ENQKEY
* object_class = 'ABAP'
* SUPPRESS_CORR_CHECK = ' '
* SUPPRESS_LANGUAGE_CHECK = 'X'
* SUPPRESS_EDITOR_LOCK_CHECK = ' '
* SUPPRESS_LANGUAGE_DIALOG = 'X'
* SUPPRESS_EXTEND_DIALOG = 'X'
* SUPPRESS_UPGRADE_CHECK = 'X'
* EXCEPTIONS
* CANCELED_IN_CORR = 1
* ENQUEUED_BY_USER = 2
* ENQUEUE_SYSTEM_FAILURE = 3
* ILLEGAL_PARAMETER_VALUES = 4
* LOCKED_BY_AUTHOR = 5
* NO_MODIFY_PERMISSION = 6
* NO_SHOW_PERMISSION = 7
* PERMISSION_FAILURE = 8
* REQUEST_LANGUAGE_DENIED = 9
* OTHERS = 10.
* if sy-subrc <> 0.
* if sy-subrc <> 8.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* endif.
* EXIT.
* endif.
CALL FUNCTION 'TR_SYS_PARAMS'
IMPORTING
SYSTEMEDIT = SYSTEMLOCK
SYS_CLIINDDEP_EDIT = SYS_CLIINDDEP_LOCK
EXCEPTIONS
NO_SYSTEMNAME = 1
NO_SYSTEMTYPE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXIT.
ENDIF.
IF SYSTEMLOCK <> 'N' AND
( SYS_CLIINDDEP_LOCK = ' ' OR SYS_CLIINDDEP_LOCK = '1' ).
* system is not locked, component locked ?
CALL FUNCTION 'TR_GET_DLVUNIT_CHANGEABILITY'
EXPORTING
IV_DLVUNIT = 'LOCAL'
IMPORTING
EV_CHANGEABILITY = CHANGEABILITY
EXCEPTIONS
INVALID_DLVUNIT = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXIT.
ENDIF.
IF CHANGEABILITY = 'N'.
MESSAGE S400(S7).
EXIT.
ENDIF.
ELSE.
* system locked
MESSAGE S840(TR).
EXIT.
ENDIF.
AUTHORITY-CHECK OBJECT 'S_DEVELOP'
ID 'OBJTYPE' FIELD 'PROG'
ID 'DEVCLASS' DUMMY
ID 'P_GROUP' DUMMY
ID 'OBJNAME' DUMMY
ID 'ACTVT' FIELD '02'.
IF SY-SUBRC <> 0.
MESSAGE S400(S7).
EXIT.
ENDIF.
ENDFORM. "AUTHORITY_CHECK
*&---------------------------------------------------------------------*
*& Form show_global
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SHOW_GLOBAL.
DATA: CODE TYPE STANDARD TABLE OF T_SLINE,
CODELINE TYPE T_SLINE.
IF GLOBAL_DATA_CONTAINER IS INITIAL.
LOOP AT R INTO CODELINE WHERE LINE+70(2) = '""'.
APPEND CODELINE TO CODE.
ENDLOOP.
CREATE OBJECT GLOBAL_DATA_CONTAINER
EXPORTING
WIDTH = 600
HEIGHT = 200
CAPTION = 'global data'
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CREATE OBJECT GLOBAL_DATA_VIEWER
EXPORTING
PARENT = GLOBAL_DATA_CONTAINER
WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
WORDWRAP_POSITION = 72
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CALL METHOD GLOBAL_DATA_VIEWER->SET_TEXT_AS_R3TABLE
EXPORTING
TABLE = CODE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0. MESSAGE A500. ENDIF.
CALL METHOD GLOBAL_DATA_VIEWER->SET_READONLY_MODE
EXPORTING
READONLY_MODE = 1.
SET HANDLER LCL_EH=>HANDLE_CLOSE FOR GLOBAL_DATA_CONTAINER.
ENDIF.
ENDFORM. " show_global
*---------------------------------------------------------------------*
* FORM EDIT_LEFT *
*----------------------------------------------------------------------*
* Editor call for left hand coding *
*----------------------------------------------------------------------*
FORM EDIT_LEFT.
E[] = SL[].
EDITOR-CALL FOR E .
SL[] = E[].
PERFORM SAVE_DATA.
ENDFORM. "EDIT_LEFT
*---------------------------------------------------------------------*
* FORM EDIT_RIGHT *
*----------------------------------------------------------------------*
* Editor call for right hand coding *
*----------------------------------------------------------------------*
FORM EDIT_RIGHT.
E[] = SR[].
EDITOR-CALL FOR E .
SR[] = E[].
PERFORM SAVE_DATA.
ENDFORM. "EDIT_RIGHT
*&---------------------------------------------------------------------*
*& Form SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_DATA .
CLEAR SOURCE_TMP.
CLEAR GDT_Y.
GDS_Y-LINE = '*>T Test run'.
APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
GDS_Y-LINE = '*>L Left'.
APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
LOOP AT SL INTO SOURCE_TMP.
GDS_Y-LINE = SOURCE_TMP-LINE .
APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
ENDLOOP.
GDS_Y-LINE = '*>R Right'.
APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
LOOP AT SR INTO SOURCE_TMP .
GDS_Y-LINE = SOURCE_TMP-LINE .
APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
ENDLOOP.
" GDS_Y-LINE = '*>End'.
" APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
IF P_FILE CS '\\TSCLIENT\'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = P_FILE
FILETYPE = 'DAT'
TABLES
DATA_TAB = GDT_Y.
IF SY-SUBRC <> 0.
WRITE:/ '上传本地文档失败!'.
ENDIF.
ELSE.
OPEN DATASET P_FILE FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF SY-SUBRC = 0 .
LOOP AT GDT_Y INTO GDS_Y.
TRANSFER GDS_Y-LINE TO P_FILE.
ENDLOOP.
CLOSE DATASET P_FILE.
ELSE.
MESSAGE S101 WITH 'Check File!' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDFORM. " SAVE_DATA
*&---------------------------------------------------------------------*
*& Form READ_SHOW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM READ_SHOW .
DATA: NO_DISPLAY.
"文档格式 *>T test select inner join
*>L 左边运行代码
* 代码
*>R 右边运行代码
* 代码
*>End ---目前未使用
*代码结束
IF P_FILE CS '\\TSCLIENT\'.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = P_FILE
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = GDT_Y.
IF SY-SUBRC <> 0.
WRITE:/ '上传本地文档失败!'.
ENDIF.
ELSE.
OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING UTF-8.
IF SY-SUBRC = 0 .
DO.
READ DATASET P_FILE INTO GDS_Y-LINE.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* IF GDS_Y-LINE IS INITIAL.
* READ TABLE GDT_Y INTO GDS_Y WITH KEY LINE = '*>End'.
* IF SY-SUBRC = 0.
* EXIT.
* ENDIF.
* ENDIF.
APPEND GDS_Y TO GDT_Y. CLEAR GDS_Y.
ENDDO.
CLOSE DATASET P_FILE.
ELSE.
MESSAGE S101 WITH 'Check File!' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
LOOP AT GDT_Y INTO GDS_Y .
MOVE GDS_Y-LINE TO X-LINE.
IF X-LINE(3) = '*>T'.
IF X-LINE+3(1) = '('.
NO_DISPLAY = 'X'.
ELSE.
NO_DISPLAY = SPACE.
ENDIF.
ENDIF.
IF NO_DISPLAY = SPACE.
APPEND X.
ENDIF.
ENDLOOP.
ENDFORM. " READ_SHOW
*&---------------------------------------------------------------------*
*& Form GET_LOCAL_FORM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_FILE text
*----------------------------------------------------------------------*
FORM GET_LOCAL_FORM USING P_FF TYPE STRING.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
DEF_PATH = P_FF
MASK = ',*.txt.'
MODE = 'O'
TITLE = 'Select file'
IMPORTING
FILENAME = P_FF
EXCEPTIONS
INV_WINSYS = 01
NO_BATCH = 02
SELECTION_CANCEL = 03
SELECTION_ERROR = 04.
ENDFORM. " GET_LOCAL_FORM
*&---------------------------------------------------------------------*
*& Form GET_ACTIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_ACTIVE .
LOOP AT SCREEN.
CASE SCREEN-GROUP1.
WHEN 'KK'.
IF LKTEST = 'X'.
SCREEN-ACTIVE = '1'.
ELSE.
SCREEN-ACTIVE = '0'.
ENDIF.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDFORM. " GET_ACTIVE
post SAP-Garson
原文链接:https://blog.csdn.net/weixin_42941551/article/details/124189611文章来自于网络,如果侵犯了您的权益,请联系站长删除!