给大家分享一个大佬写的abap运行测速工具,下面是效果图
话不多说,上源码
*&---------------------------------------------------------------------*
*& Report ZABAP_TIME_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*REPORT ZABAP_TIME_TEST.
*创建指南 创建SCREEN 100 MAIN_CONTAINER
*流逻辑如下:
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
REPORT ZABAP_TIME_TEST MESSAGE-ID s7 NO STANDARD PAGE HEADING.
INCLUDE <icon>.
DATA : par_test ,
par_from(2) TYPE p,
par_to(2) TYPE p,
par_cnt(2) TYPE p VALUE 1,
sapclock VALUE 1,
osclock .
*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.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* 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.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* 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.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
* 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.
TRY.
READ REPORT 'RSHOWTI0' INTO r.
CATCH cx_sy_read_src_line_too_long.
MESSAGE e501.
ENDTRY.
* Read examples into table X
PERFORM read_rshowtix USING:
'RSHOWTI1',
'RSHOWTI2',
'RSHOWTI3',
'RSHOWTI4',
'RSHOWTI5',
'RSHOWTI6'.
* Measure time of GET RUNTIME statement
PERFORM set_runtime_base.
ENDFORM.
*---------------------------------------------------------------------*
* 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
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.
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.
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,sl,sr.
DATA:gt_lines TYPE STANDARD TABLE OF t_sline WITH HEADER LINE.
CLEAR:gt_lines.
CALL METHOD code_left_editor->get_text_as_r3table
IMPORTING
table = sl[]
EXCEPTIONS
error_dp = 1
error_cntl_call_method = 2
error_dp_create = 3
potential_data_loss = 4
OTHERS = 5.
CALL METHOD code_right_editor->get_text_as_r3table
IMPORTING
table = sr[]
EXCEPTIONS
error_dp = 1
error_cntl_call_method = 2
error_dp_create = 3
potential_data_loss = 4
OTHERS = 5.
* move
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.
*----------------------------------------------------------------------*
* 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.
*---------------------------------------------------------------------*
* 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.
METHOD handle_close.
CALL METHOD global_data_viewer->free.
CALL METHOD global_data_container->free.
CLEAR global_data_container.
CLEAR global_data_viewer.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& 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.
* 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'.
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 'TIME'.
PERFORM get_runtime.
WHEN 'EDIL'. PERFORM edit_left.
WHEN 'EDIR'. PERFORM edit_right.
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.
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.
*&---------------------------------------------------------------------*
*& 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.
code = VALUE #(
( '测速工具是我从标准程序改来,目的方便你我他钻研性能上的浪漫')
( '作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。')
( '程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。 ')
( '编程是一种单调的生活,因此程序员比普通人需要更多的关怀,更多的友情。')
( '有好项目机会联系我 <-tel:17673917543')
( '---------------------------------------')
( 'CREAT: 2020-10 BY ZHANGHK V1.0')
( 'CHANGED: ')
( 'CHANGED: ')
).
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 DISPLAY-MODE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EDIT_RIGHT *
*----------------------------------------------------------------------*
* Editor call for right hand coding *
*----------------------------------------------------------------------*
FORM edit_right.
e[] = sr[].
EDITOR-CALL FOR e DISPLAY-MODE.
ENDFORM.
创建完程序后还需要创建屏幕,gui状态
屏幕如下
GUI状态如下
还有一些其他细节
作者:SAP-张鸿坤
文章最后引用作者的话
程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。 共享浪漫