This commit is contained in:
danrega
2023-08-30 14:06:49 +02:00
parent 9a54c7a0a7
commit bef57aa1f9
134 changed files with 32704 additions and 1 deletions

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>ABAP Cheat Sheets: Classic ABAP</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,139 @@
CLASS zcl_demo_abap_sap_luw_helper DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
TYPES log_type TYPE SORTED TABLE OF zdemo_abap_logt WITH UNIQUE KEY id.
CLASS-DATA: itab TYPE STANDARD TABLE OF zdemo_abap_luw_t,
log_entries TYPE STANDARD TABLE OF zdemo_abap_logt.
CLASS-METHODS: get_work_process_info RETURNING VALUE(id_no) TYPE string,
create_log_entries IMPORTING log TYPE log_type,
checking_transaction_state RETURNING VALUE(tx_state) TYPE string,
cc_alv_display IMPORTING container TYPE c
log TYPE abap_bool DEFAULT abap_false,
subr_delete,
subr_insert IMPORTING values TYPE zdemo_abap_luw_t,
subr_update_log IMPORTING log TYPE log_type.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA: wp_pid TYPE wppid,
wp_index TYPE wpindex.
ENDCLASS.
CLASS ZCL_DEMO_ABAP_SAP_LUW_HELPER IMPLEMENTATION.
METHOD cc_alv_display.
DATA(cont) = NEW cl_gui_custom_container( container_name = container ).
IF log = abap_false.
SELECT key_field, ch, num, time_stamp
FROM zdemo_abap_luw_t
INTO CORRESPONDING FIELDS OF TABLE @Itab
ORDER BY key_field.
TRY.
cl_salv_table=>factory( EXPORTING r_container = cont
container_name = CONV string( container )
IMPORTING r_salv_table = DATA(alv)
CHANGING t_table = itab ).
DATA(columns) = alv->get_columns( ).
DATA(col_tab) = columns->get( ).
LOOP AT col_tab ASSIGNING FIELD-SYMBOL(<column>).
DATA(column) = columns->get_column( <column>-columnname ).
column->set_medium_text( CONV scrtext_m( <column>-columnname ) ).
IF <column>-columnname = 'CLIENT'.
<column>-r_column->set_visible( abap_false ).
ELSE.
<column>-r_column->set_visible( abap_true ).
ENDIF.
ENDLOOP.
alv->display( ).
CATCH cx_salv_msg cx_salv_not_found.
MESSAGE 'ALV display not possible' TYPE 'I'
DISPLAY LIKE 'E'.
ENDTRY.
ELSE.
SELECT id, context, name, details, timestamp
FROM zdemo_abap_logt
INTO CORRESPONDING FIELDS OF TABLE @log_entries
ORDER BY id.
TRY.
cl_salv_table=>factory( EXPORTING r_container = cont
container_name = CONV string( container )
IMPORTING r_salv_table = alv
CHANGING t_table = log_entries ).
columns = alv->get_columns( ).
col_tab = columns->get( ).
LOOP AT col_tab ASSIGNING FIELD-SYMBOL(<col>).
column = columns->get_column( <col>-columnname ).
column->set_medium_text( CONV scrtext_m( <col>-columnname ) ).
IF <col>-columnname = `DETAILS`.
column->set_output_length( 70 ).
ENDIF.
IF <col>-columnname = 'CLIENT'.
<col>-r_column->set_visible( abap_false ).
ELSE.
<col>-r_column->set_visible( abap_true ).
ENDIF.
ENDLOOP.
alv->display( ).
CATCH cx_salv_msg cx_salv_not_found.
MESSAGE 'ALV display not possible' TYPE 'I'
DISPLAY LIKE 'E'.
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD checking_transaction_state.
tx_state = `Tx state: ` &&
`Update task (` && SWITCH #( cl_system_transaction_state=>get_in_update_task( ) WHEN 1 THEN `1)` ELSE `0)` ) &&
` Local update (` && SWITCH #( cl_system_transaction_state=>get_update_task_local( ) WHEN 1 THEN `1)` ELSE `0)` ) &&
` Perf. on commit (` && SWITCH #( cl_system_transaction_state=>get_on_commit( ) WHEN 1 THEN `1)` ELSE `0)` ) &&
` Perf. on rollback (` && SWITCH #( cl_system_transaction_state=>get_on_rollback( ) WHEN 1 THEN `1)` ELSE `0)` ).
ENDMETHOD.
METHOD create_log_entries.
INSERT zdemo_abap_logt FROM TABLE @log.
ENDMETHOD.
METHOD get_work_process_info.
CALL FUNCTION 'TH_GET_OWN_WP_NO'
IMPORTING
wp_pid = wp_pid
wp_index = wp_index.
id_no = |Work process ID: { wp_pid } / work process index: { wp_index }|.
ENDMETHOD.
METHOD subr_delete.
DELETE FROM zdemo_abap_luw_t.
ENDMETHOD.
METHOD subr_insert.
INSERT zdemo_abap_luw_t FROM @values.
ENDMETHOD.
METHOD subr_update_log.
INSERT zdemo_abap_logt FROM TABLE @log.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_DEMO_ABAP_SAP_LUW_HELPER</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Helper class for SAP LUW example</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>ZDEMO_ABAP_DBLUW</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<CLIDEP>X</CLIDEP>
<DDTEXT>Demo database table</DDTEXT>
<MASTERLANG>E</MASTERLANG>
<MAINFLAG>X</MAINFLAG>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZDEMO_ABAP_DBLUW</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>CLIENT</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000006</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CLNT</DATATYPE>
<LENG>000003</LENG>
<MASK> CLNT</MASK>
</DD03P>
<DD03P>
<FIELDNAME>KEY_FIELD</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>X</INTTYPE>
<INTLEN>000004</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>INT4</DATATYPE>
<LENG>000010</LENG>
<MASK> INT4</MASK>
</DD03P>
<DD03P>
<FIELDNAME>CH</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000020</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000010</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>NUM</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>X</INTTYPE>
<INTLEN>000004</INTLEN>
<DATATYPE>INT4</DATATYPE>
<LENG>000010</LENG>
<MASK> INT4</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TIME_STAMP</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>p</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>UTCL</DATATYPE>
<LENG>000027</LENG>
<MASK> UTCL</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,826 @@
*&---------------------------------------------------------------------*
*& ABAP cheat sheet: Dynpro
*&
*&-------------------------- PURPOSE ----------------------------------*
*& - Example to demonstrate dynpro-related statements
*& - Topics covered: Dynpro flow logic and related statements (MODULE,
*& FIELD, CHAIN/ENDCHAIN, LOOP/ENDLOOP, CALL SUBSCREEN), ABAP statements
*& for calling and leaving dynpros (SET SCREEN, CALL SCREEN, LEAVE
*& SCREEN), modifying static attributes (LOOP AT SCREEN, MODIFY SCREEN),
*& statements related to the GUI status and title (GET/SET PF-STATUS,
*& SET TITLEBAR), controls (table and tabstrip controls)
*&
*&----------------------- GETTING STARTED -----------------------------*
*& - Open the program with the ABAP development tools for Eclipse (ADT).
*& - Choose F8 to run the program.
*& - Select the radio buttons and/or provide input in input fields etc.
*& to check out dynpro-related syntax in action.
*&
*&----------------------------- NOTE -----------------------------------*
*& The code presented in this class is intended only to support the ABAP
*& cheat sheets. It is not intended for direct use in a production system
*& environment. The code examples in the ABAP cheat sheets are primarily
*& intended to provide a better explanation and visualization of the
*& syntax and semantics of ABAP statements, not to solve concrete
*& programming tasks. For production application programs, you should
*& always work out your own solution for each individual case. There is
*& no guarantee for the correctness or completeness of the code.
*& Furthermore, there is no legal responsibility or liability for any
*& errors or their consequences that may occur when using the the example
*& code.
*&---------------------------------------------------------------------*
REPORT zdemo_abap_dynpro.
DATA:
"OK field
ok_code LIKE sy-ucomm,
"Auxiliary variable for storing the value of the OK field
save_ok LIKE ok_code,
dyn_num LIKE sy-dynnr,
dyn_title LIKE sy-title.
"Note: This demo database table does not have any semantic information
"that may be used for input helps etc.
TABLES zdemo_abap_flsch.
"----- Related to dynpro 9850 (Home page) -----
DATA: screen_elements TYPE abap_bool,
stmts TYPE abap_bool,
stmts2 TYPE abap_bool,
controls TYPE abap_bool.
"----- Related to dynpro 9860 (Screen elements) -----
DATA: "Icons
icon TYPE icons-text,
icon_name TYPE c LENGTH 20,
icon_text TYPE c LENGTH 10,
"check boxes
ch_a TYPE abap_bool,
ch_b TYPE abap_bool,
ch_c TYPE abap_bool,
checkbox_msg TYPE c LENGTH 4,
input_field TYPE c LENGTH 20,
"radio buttons
rb_x TYPE abap_bool,
rb_y TYPE abap_bool,
rb_z TYPE abap_bool,
radiobutton_msg TYPE c LENGTH 1.
"----- Related to dynpro 9870 (Statements I) -----
DATA: call_screen TYPE abap_bool,
call_screen_starting TYPE abap_bool,
call_screen_st_end TYPE abap_bool,
set_screen TYPE abap_bool,
leave_screen_next TYPE abap_bool,
leave_screen_set TYPE abap_bool,
leave_to_screen TYPE abap_bool,
set_pfstatus TYPE abap_bool,
set_pf_excluding TYPE abap_bool,
get_pfstatus TYPE abap_bool,
get_pfstatsus_excl TYPE abap_bool,
set_titlebar TYPE abap_bool,
set_titlebar_with TYPE abap_bool,
with_title TYPE c LENGTH 15,
col1 TYPE i,
lin1 TYPE i,
col2 TYPE i,
lin2 TYPE i,
col3 TYPE i,
lin3 TYPE i,
pf TYPE c LENGTH 1,
pfkey TYPE syst_pfkey,
title TYPE c LENGTH 1.
"Data type and objects for the EXCLUDING addition of GET/SET PF-STATUS
"statements
TYPES fu_key_tab TYPE TABLE OF sy-ucomm WITH NON-UNIQUE KEY table_line.
DATA: excl_list1 TYPE fu_key_tab,
excl_list2 TYPE fu_key_tab,
excl_list3 TYPE fu_key_tab.
"----- Related to dynpro 9880 (Statements II) -----
DATA: loop_modify TYPE abap_bool,
field_stmt TYPE abap_bool,
mod_at_exit TYPE abap_bool,
selected TYPE abap_bool,
set TYPE abap_bool,
field_a TYPE c LENGTH 1,
field_b TYPE c LENGTH 1,
field_c TYPE c LENGTH 1,
field_d TYPE c LENGTH 1,
field_e TYPE c LENGTH 1,
field_f TYPE c LENGTH 1,
output_field_1 TYPE c LENGTH 100,
output_field_2 TYPE c LENGTH 100,
output_field_3 TYPE c LENGTH 100,
field_help TYPE c LENGTH 30,
input_help TYPE c LENGTH 30,
"For GET/SET CURSOR statements
fld TYPE c LENGTH 20,
off TYPE i,
val TYPE string,
len TYPE i.
"For field and input help
TYPES: BEGIN OF values,
carrid TYPE zdemo_abap_flsch-carrid,
connid TYPE zdemo_abap_flsch-connid,
END OF values.
DATA: progname TYPE sy-repid,
dynnum TYPE sy-dynnr,
dynpro_values TYPE TABLE OF dynpread,
field_value LIKE LINE OF dynpro_values,
values_tab TYPE TABLE OF values,
tab TYPE TABLE OF zdemo_abap_flsch-carrid,
carr TYPE zdemo_abap_flsch-carrid,
conn TYPE zdemo_abap_flsch-connid.
DATA itab_flsch TYPE TABLE OF zdemo_abap_flsch-carrid.
TYPES: BEGIN OF carrid_line,
carrid TYPE zdemo_abap_flsch-carrid,
END OF carrid_line.
DATA carrid_list TYPE STANDARD TABLE OF carrid_line.
"----- Related to dynpro 9890 (Exit command) -----
"For demonstration purposes, implementations for the
"related dialog modules are done in methods of a local
"class.
"----- Related to dynpro 9990 (Controls) -----
"For table controls
DATA lines TYPE i.
DATA fill TYPE i.
CONTROLS flights TYPE TABLEVIEW USING SCREEN 9900.
"Internal table to hold data that is to be displayed.
DATA itab_flights TYPE TABLE OF zdemo_abap_flsch WITH EMPTY KEY.
"Filling the internal table
SELECT *
FROM zdemo_abap_flsch
ORDER BY carrid, connid
INTO TABLE @itab_flights.
"For tabstrip controls
CONTROLS tabstr TYPE TABSTRIP.
DATA number LIKE sy-dynnr.
"For ALV Grid control
TYPES: BEGIN OF flight_struc,
carrid TYPE zdemo_abap_flsch-carrid,
connid TYPE zdemo_abap_flsch-connid,
countryfr TYPE zdemo_abap_flsch-countryfr,
cityfrom TYPE zdemo_abap_flsch-cityfrom,
airpfrom TYPE zdemo_abap_flsch-airpfrom,
countryto TYPE zdemo_abap_flsch-countryto,
cityto TYPE zdemo_abap_flsch-cityto,
airpto TYPE zdemo_abap_flsch-airpto,
fltime TYPE zdemo_abap_flsch-fltime,
END OF flight_struc.
DATA itab4alv TYPE TABLE OF flight_struc WITH EMPTY KEY.
"----- For other dialog modules -----
DATA: links TYPE TABLE OF tline,
field_tab TYPE TABLE OF dfies WITH EMPTY KEY.
"----- Local class -----
CLASS local_class DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: provide_fu_keys IMPORTING example TYPE i
RETURNING VALUE(fu_keys) TYPE fu_key_tab,
cc_alv_display IMPORTING container TYPE c,
"Implementations for dialog modules for dynpro 9890
pbo9890,
pai9890,
cancel.
"Variable declarations for dialog modules for dynpro 9890
CLASS-DATA: mandatory_field TYPE c LENGTH 20,
btn_exit_1 TYPE abap_bool,
btn_exit_2 TYPE abap_bool.
ENDCLASS.
CLASS local_class IMPLEMENTATION.
METHOD provide_fu_keys.
CASE example.
WHEN 1.
fu_keys = VALUE #( ( 'CANCEL' ) ( 'SAP' ) ).
WHEN 2.
fu_keys = VALUE #( ( 'CANCEL' ) ).
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
METHOD cc_alv_display.
DATA(cont) = NEW cl_gui_custom_container( container_name = container ).
SELECT carrid, connid, countryfr, cityfrom, airpfrom, countryto, cityto, airpto, fltime
FROM zdemo_abap_flsch
ORDER BY carrid, connid
INTO CORRESPONDING FIELDS OF TABLE @itab4alv.
TRY.
cl_salv_table=>factory( EXPORTING r_container = cont
container_name = CONV string( container )
IMPORTING r_salv_table = DATA(alv)
CHANGING t_table = itab4alv ).
alv->get_columns( )->set_optimize( abap_true ).
alv->get_display_settings( )->set_list_header( 'Flights' ).
LOOP AT alv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<col>).
DATA(column) = <col>-r_column.
column->set_long_text( |{ column->get_columnname( ) }| ).
ENDLOOP.
alv->display( ).
CATCH cx_salv_msg cx_salv_not_found.
MESSAGE `ALV display not possible` TYPE 'I'
DISPLAY LIKE 'E'.
ENDTRY.
ENDMETHOD.
METHOD pai9890.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'CLOSE1'.
MESSAGE `Processing continues. It does so only after the input field is filled.` TYPE 'I'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'CLOSE2'.
MESSAGE `Superfluouse message :)` TYPE 'I'.
WHEN OTHERS.
MESSAGE `Processing continues. It does so only after the input field is filled.` TYPE 'I'.
LEAVE PROGRAM.
ENDCASE.
ENDMETHOD.
METHOD pbo9890.
SET PF-STATUS 'STATUS9890'.
SET TITLEBAR 'TITLE9890'.
dyn_num = sy-dynnr.
ENDMETHOD.
METHOD cancel.
MESSAGE `Module "cancel" was called. The dynpro will be left without the need to fill in the mandatory input field.` TYPE 'I'.
IF ok_code = 'CLOSE2'.
CLEAR: ok_code, mandatory_field.
SET SCREEN 0.
LEAVE SCREEN.
ENDIF.
ENDMETHOD.
ENDCLASS.
END-OF-SELECTION.
"Filling demo database tables
zcl_demo_abap_flight_tables=>fill_dbtabs( ).
CALL SCREEN 9850.
**********************************************************************
***************** Dialog modules for 9850 ****************************
MODULE status_9850 OUTPUT.
SET PF-STATUS 'STATUS9850'.
SET TITLEBAR 'TITLE9850'.
CLEAR: screen_elements, stmts, stmts2.
dyn_num = sy-dynnr.
ENDMODULE.
MODULE user_command_9850 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'ENTER' OR 'GO'.
CASE abap_true.
WHEN screen_elements.
CALL SCREEN 9860.
WHEN stmts.
CALL SCREEN 9870.
WHEN stmts2.
CALL SCREEN 9880.
WHEN controls.
CALL SCREEN 9900.
ENDCASE.
WHEN OTHERS.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
***************** Dialog modules for 9860 ****************************
MODULE status_9860 OUTPUT.
SET PF-STATUS 'STATUS9860'.
SET TITLEBAR 'TITLE9860'.
"Modifying static attributes
IF loop_modify = 'X'.
LOOP AT SCREEN INTO DATA(scr).
IF scr-name = 'ICON3'.
scr-invisible = '1'.
MODIFY SCREEN FROM scr.
ENDIF.
IF scr-name = 'INPUT_FIELD'.
scr-length = 10.
scr-intensified = '1'.
"scr-required = '1'.
MODIFY SCREEN FROM scr.
ENDIF.
IF scr-name = 'RB_Z'.
scr-active = '0'.
MODIFY SCREEN FROM scr.
ENDIF.
IF scr-name = 'CH_B'.
scr-input = '0'.
MODIFY SCREEN FROM scr.
ENDIF.
ENDLOOP.
ENDIF.
dyn_num = sy-dynnr.
ENDMODULE.
MODULE user_command_9860 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
"Icons
WHEN 'ICON1'.
icon_name = 'ICON_GREEN_LIGHT'.
icon_text = `green`.
WHEN 'ICON2'.
icon_name = 'ICON_YELLOW_LIGHT'.
icon_text = `yellow`.
WHEN 'ICON3'.
icon_name = 'ICON_RED_LIGHT'.
icon_text = `red`.
"Input field
WHEN 'BTN_NO'.
MESSAGE |The text "{ input_field }" in the input field has { numofchar( input_field ) } characters. Trailing blanks are ignored.| TYPE 'I'.
"Check boxes
WHEN 'CH_BTN'.
IF ch_a = abap_true.
checkbox_msg = 'A'.
ENDIF.
IF ch_b = abap_true.
checkbox_msg = checkbox_msg && 'B'.
ENDIF.
IF ch_c = abap_true.
checkbox_msg = checkbox_msg && 'C'.
ENDIF.
IF checkbox_msg IS INITIAL.
checkbox_msg = 'None'.
ENDIF.
checkbox_msg = checkbox_msg.
MESSAGE checkbox_msg TYPE 'I'.
CLEAR checkbox_msg.
"Radio buttons
WHEN 'RB_BTN'.
CASE abap_true.
WHEN rb_x.
radiobutton_msg = 'X'.
WHEN rb_y.
radiobutton_msg = 'Y'.
WHEN rb_z.
radiobutton_msg = 'Z'.
WHEN OTHERS.
radiobutton_msg = ' '.
ENDCASE.
MESSAGE radiobutton_msg TYPE 'I'.
CLEAR radiobutton_msg.
WHEN 'HOME'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN OTHERS.
LEAVE PROGRAM.
ENDCASE.
IF save_ok = 'ICON1' OR save_ok = 'ICON2' OR save_ok = 'ICON3'.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_name
text = icon_text
info = 'Status'
add_stdinf = 'X'
IMPORTING
result = icon
EXCEPTIONS
icon_not_found = 1
outputfield_too_short = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE `Issue.` TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
ENDIF.
ENDMODULE.
***************** Dialog modules for 9870 ****************************
MODULE status_9870 OUTPUT.
"Control structures in case of calling the dynpro again
IF set_pfstatus IS NOT INITIAL AND pfkey = 'STATUS9870'.
SET PF-STATUS 'DEMOSTATUS'.
ELSEIF set_pfstatus IS NOT INITIAL AND pfkey = 'DEMOSTATUS'.
SET PF-STATUS 'STATUS9870'.
ELSEIF set_pf_excluding IS NOT INITIAL AND pfkey = 'STATUS9870'.
excl_list1 = local_class=>provide_fu_keys( 1 ).
SET PF-STATUS 'DEMOSTATUS' EXCLUDING excl_list1.
ELSEIF set_pf_excluding IS NOT INITIAL AND pfkey = 'DEMOSTATUS'.
excl_list2 = local_class=>provide_fu_keys( 2 ).
SET PF-STATUS 'STATUS9870' EXCLUDING excl_list2.
ELSE.
SET PF-STATUS 'STATUS9870'.
ENDIF.
IF set_titlebar IS NOT INITIAL.
IF dyn_title CS 'Demo title'.
SET TITLEBAR 'TITLE9870'.
ELSE.
SET TITLEBAR 'DEMOTITLE'.
ENDIF.
ELSEIF SET_TITLEBAR_with IS NOT INITIAL.
SET TITLEBAR 'DEMOTITLE' WITH '"' with_title '"'.
ELSE.
SET TITLEBAR 'TITLE9870'.
ENDIF.
"Prepopulating values
col1 = 5.
lin1 = 10.
col2 = 1.
lin2 = 1.
col3 = 80.
lin3 = 20.
dyn_num = sy-dynnr.
dyn_title = sy-title.
ENDMODULE.
MODULE user_command_9870 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'ENTER' OR 'GO'.
CASE abap_true.
WHEN set_screen.
MESSAGE |A SET SCREEN statement is about to get called. The static next dynpro of dynpro { sy-dynnr } is 0.| &&
` It is dynamically overwritten. Another dynpro will be displayed. A new dynpro sequence is not started.` TYPE 'I'.
SET SCREEN 9860.
WHEN call_screen.
MESSAGE `A CALL SCREEN statement is about to get called. You will switch to another dynpro. A new dynpro sequence is started.` TYPE 'I'.
CALL SCREEN 9860.
WHEN call_screen_starting.
IF col1 < 0 OR lin1 < 0.
MESSAGE `Only positive integers can be specified.` TYPE 'E'.
ELSE.
MESSAGE |The statement "CALL SCREEN ... STARTING AT { col1 } { lin1 }." is about to get called. | &&
`Note: In the dialog box that opens, click the icon in the popup footer to remain in the program. Clicking the X leaves the program.` TYPE 'I'.
CALL SCREEN 9860 STARTING AT col1 lin1.
ENDIF.
WHEN call_screen_st_end.
IF col2 < 0 OR lin2 < 0
OR col3 < 0 OR lin3 < 0.
MESSAGE `Only positive integers can be specified.`
TYPE 'E'.
ELSE.
MESSAGE |The statement "CALL SCREEN ... STARTING AT { col2 } { lin2 } ENDING AT { col3 } { lin3 }| &&
`." is about to get called. Note: In the dialog box that opens, click the icon in the popup footer ` &&
`to remain in the program. Clicking the X leaves the program.` TYPE 'I'.
CALL SCREEN 9860 STARTING AT col2 lin2 ENDING AT col3 lin3.
ENDIF.
WHEN leave_screen_next.
MESSAGE `A LEAVE SCREEN statement is about to get called. The current dynpro is exited, and the statically ` &&
`defined next dynpro is called, which is 0 in this case. Hence, the current dynpro sequence is terminated. ` &&
`Since the dynpro sequence is nested, you return to the home page and the parent dynpro sequence.` TYPE 'I'.
LEAVE SCREEN.
WHEN leave_screen_set.
MESSAGE `A LEAVE SCREEN statement is about to get called. In this case, a SET SCREEN statement before the LEAVE ` &&
`SCREEN statement overwrites the next dynpro (0 here). A new dynpro sequence is not started, instead the statement ` &&
`branches to another dynpro in the same sequence.` TYPE 'I'.
SET SCREEN 9900.
LEAVE SCREEN.
WHEN leave_to_screen.
MESSAGE `A LEAVE TO SCREEN statement is about to get called. A new dynpro sequence is not started, instead the ` &&
`statement branches to another dynpro in the same sequence. It has the same effect as the previous example.` TYPE 'I'.
LEAVE TO SCREEN 9900.
WHEN set_pfstatus.
pfkey = sy-pfkey.
MESSAGE |The current GUI status is { pfkey }. The current dynpro { sy-dynnr } will be set as the next dynpro.| &&
` It will have a different GUI status.` TYPE 'I'.
SET SCREEN 9870.
WHEN set_pf_excluding.
GET PF-STATUS pfkey.
MESSAGE |The current GUI status is { pfkey }. The current dynpro will be set as the next dynpro.| &&
` It will have a different GUI status (set at PBO) but excluding function codes (for example, the CANCEL button).` TYPE 'I'.
SET SCREEN 9870.
WHEN get_pfstatus.
GET PF-STATUS pfkey.
MESSAGE |The current GUI status is { pfkey }, which was retrieved using GET-PF-STATUS. Value of sy-pfkey: { sy-pfkey }.| TYPE 'I'.
SET SCREEN 9870.
WHEN get_pfstatsus_excl.
GET PF-STATUS pfkey EXCLUDING excl_list3.
MESSAGE |The current GUI status is { pfkey }. The exluded function codes are: {
COND #( WHEN excl_list3 IS INITIAL THEN `None are excluded. Try to run SET PF-STATUS ... EXCLUDING ... first before this one.`
ELSE concat_lines_of( table = excl_list3 sep = `, ` ) ) }| TYPE 'I'.
SET SCREEN 9870.
CLEAR excl_list3.
WHEN set_titlebar.
MESSAGE |The current title is "{ dyn_title }". The current dynpro is set as the next dynpro.| &&
`The text in the title bar should change.` TYPE 'I'.
SET SCREEN 9870.
WHEN set_titlebar_with.
MESSAGE |The current title is "{ dyn_title }". The current dynpro is set as the next dynpro.| &&
`The text in the title bar should change according to your input in the input field.` TYPE 'I'.
SET SCREEN 9870.
ENDCASE.
WHEN 'SAP'.
cl_gui_frontend_services=>execute( document = 'https://www.sap.com' ).
SET SCREEN 9870.
WHEN 'SAYHI'.
MESSAGE `Hallo ` && sy-uname && `.` TYPE 'I'.
SET SCREEN 9870.
WHEN 'HOME'.
LEAVE TO SCREEN 9850.
WHEN 'LEAVE' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
***************** Dialog modules for 9880 ****************************
MODULE status_9880 OUTPUT.
SET PF-STATUS 'STATUS9880'.
SET TITLEBAR 'TITLE9880'.
"Clearing variables in case the dynpro is called again
IF field_stmt IS INITIAL.
CLEAR: output_field_1, output_field_2, output_field_3,
field_a, field_b, field_c, field_d, field_e, field_f.
ENDIF.
IF field_d IS INITIAL.
CLEAR output_field_2.
ENDIF.
IF field_e IS INITIAL OR field_f IS INITIAL.
CLEAR output_field_3.
ENDIF.
"Prepopulating fields for input help
progname = sy-repid.
dynnum = sy-dynnr.
CLEAR: field_value, dynpro_values.
field_value-fieldname = 'CARR'.
APPEND field_value TO dynpro_values.
"Setting the cursor field
IF set = abap_true.
SET CURSOR FIELD 'CONN'.
CLEAR set.
ENDIF.
dyn_num = sy-dynnr.
ENDMODULE.
MODULE user_command_9880 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'ENTER' OR 'GO'.
CASE abap_true.
WHEN loop_modify.
MESSAGE `Another dynpro will be set as the next dynpro. This dynpro includes a LOOP AT SCREEN ` &&
` and MODIFY SCREEN statements in the PBO dialog module. Some screen elements have their static ` &&
`attributes changed. For example, they are made invisible or inactive, or the length is changed.` TYPE 'I'.
SET SCREEN 9860.
LEAVE SCREEN.
WHEN field_stmt.
MESSAGE `The current dynpro will be set as the next dynpro. Depending on which checkboxes you ` &&
`have selected, text is displayed in the fields below showing the effect of FIELD statements.` TYPE 'I'.
SET SCREEN 9880.
WHEN mod_at_exit.
SET SCREEN 9890.
ENDCASE.
WHEN 'SELECTED'.
CLEAR conn.
SET SCREEN 9880.
WHEN 'GET'.
GET CURSOR FIELD fld OFFSET off VALUE val LENGTH len.
MESSAGE |Current position of cursor: Field: "{ fld }", value: "{ val }", offset: "{ off }", length "{ len }"| TYPE 'I'.
SET SCREEN 9880.
WHEN 'SET'.
set = abap_true.
MESSAGE `Clicking the pushbutton triggers a SET CURSOR statement to be called at PBO. This sets the cursor on ` &&
`a specific input field (the one in the lower left corner).` TYPE 'I'.
SET SCREEN 9880.
WHEN 'HOME'.
LEAVE TO SCREEN 9850.
WHEN 'LEAVE' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
***************** Dialog modules for 9890 ****************************
"For demonstration purposes, the dialog module implementations are
"done in methods of a local class.
MODULE status_9890 OUTPUT.
local_class=>pbo9890( ).
ENDMODULE.
MODULE user_command_9890 INPUT.
local_class=>pai9890( ).
ENDMODULE.
***************** Dialog modules for 9900 ****************************
MODULE status_9900 OUTPUT.
SET PF-STATUS 'STATUS9900'.
SET TITLEBAR 'TITLE9900'.
"For vertically scrolling in the table control
"To do this, the LINES component of the scxtab_control structure is set
"to the correct line number. Each time the scroll bar is scrolled, the
"PAI event is triggered with an empty function code, and the top_line
"component of the cxtab_control structure is automatically set to the
"new top line before PBO.
flights-lines = lines( itab_flights ).
"Setting a tab to be active by default in case of calling the
"dynpro again after leaving it.
IF tabstr-activetab IS INITIAL
OR number IS INITIAL.
number = '9920'.
tabstr-activetab = 'TAB2'.
ENDIF.
local_class=>cc_alv_display( 'ALVCONT' ).
dyn_num = sy-dynnr.
ENDMODULE.
MODULE user_command_9900 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'TAB1'.
number = '9910'.
tabstr-activetab = save_ok.
WHEN 'TAB2'.
number = '9920'.
tabstr-activetab = save_ok.
WHEN 'HOME'.
"REFRESH statement: You can check out the effect, for example, by setting
"the vertical scroll bar somewhere. If you then go back and call the dynpro
"again, the control is refreshed (the scroll bar is again at the top).
REFRESH CONTROL 'FLIGHTS' FROM SCREEN sy-dynnr.
CLEAR: number, tabstr-activetab.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'CANCEL' OR 'LEAVE'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
***************** Further dialog modules to support the example ****************************
MODULE module_1 INPUT.
output_field_1 = 'Available in module_1:' && ` ` &&
COND #( WHEN field_a = abap_true THEN 'A' ELSE '' ) &&
COND #( WHEN field_b = abap_true THEN 'B' ELSE '' ) &&
COND #( WHEN field_c = abap_true THEN 'C' ELSE '' ) &&
' /'.
ENDMODULE.
MODULE module_2 INPUT.
output_field_1 = output_field_1 &&
' Available in module_2:' && ` ` &&
COND #( WHEN field_a = abap_true THEN 'A' ELSE '' ) &&
COND #( WHEN field_b = abap_true THEN 'B' ELSE '' ) &&
COND #( WHEN field_c = abap_true THEN 'C' ELSE '' ) &&
' /'.
ENDMODULE.
MODULE module_3 INPUT.
output_field_1 = output_field_1 &&
' Available in module_3:' && ` ` &&
COND #( WHEN field_a = abap_true THEN 'A' ELSE '' ) &&
COND #( WHEN field_b = abap_true THEN 'B' ELSE '' ) &&
COND #( WHEN field_c = abap_true THEN 'C' ELSE '' ).
CLEAR: field_a, field_b, field_c.
ENDMODULE.
MODULE module_4 INPUT.
output_field_2 = 'module_4 was called because field_d was selected.'.
ENDMODULE.
MODULE module_5 INPUT.
output_field_3 = 'module_5 was called because field_e and field_f were selected.'.
ENDMODULE.
MODULE module_f1 INPUT.
"In this example, a demo object from the ABAP Keyword
"Documentation examples is used.
CALL FUNCTION 'HELP_OBJECT_SHOW'
EXPORTING
dokclass = 'TX'
doklangu = sy-langu
dokname = 'DEMO_FOR_F1_HELP'
TABLES
links = links.
ENDMODULE.
MODULE module_f4 INPUT.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = progname
dynumb = dynnum
translate_to_upper = 'X'
TABLES
dynpfields = dynpro_values.
field_value = dynpro_values[ 1 ].
SELECT carrid, connid
FROM zdemo_abap_flsch
WHERE carrid = @( CONV #( field_value-fieldvalue ) )
INTO CORRESPONDING FIELDS OF TABLE @values_tab.
"Note: To save extra artifacts, this example goes without a dedicated DDIC
"structure with which input help can be created comfortably. Hence, creating
"a table manually for the field_tab parameter of the function module below.
field_tab = VALUE #(
( tabname = 'ZDEMO_ABAP_FLSCH' fieldname = 'CARRID' langu = 'E' position = '1'
offset = '0' leng = '3' intlen = '6' outputlen = '3' datatype = 'CHAR' inttype = 'C' )
( tabname = 'ZDEMO_ABAP_FLSCH' fieldname = 'CONNID' langu = 'E' position = '2'
offset = '6' leng = '4' intlen = '8' outputlen = '4' datatype = 'NUMC' inttype = 'N' ) ).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CONNID'
dynpprog = progname
dynpnr = dynnum
dynprofield = 'CONN'
value_org = 'S'
window_title = 'Selection'
TABLES
value_tab = values_tab
field_tab = field_tab.
ENDMODULE.
MODULE module_dropdown INPUT.
SELECT DISTINCT carrid
FROM zdemo_abap_flsch
INTO CORRESPONDING FIELDS OF TABLE @carrid_list.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
value_org = 'S'
TABLES
value_tab = carrid_list
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
carr = 'LH'.
ENDIF.
ENDMODULE.
MODULE module_fill_table OUTPUT.
TRY.
zdemo_abap_flsch = itab_flights[ flights-current_line ].
CATCH cx_sy_itab_line_not_found.
RETURN.
ENDTRY.
ENDMODULE.
MODULE module_read_table INPUT.
lines = sy-loopc.
MODIFY itab_flights FROM zdemo_abap_flsch INDEX flights-current_line.
ENDMODULE.
MODULE cancel INPUT.
local_class=>cancel( ).
ENDMODULE.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
FUNCTION-POOL ZDEMO_ABAP_FUGR. "MESSAGE-ID ..
* INCLUDE LZDEMO_ABAP_FUGRD... " Local class definition

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>LZDEMO_ABAP_FUGRTOP</NAME>
<DBAPL>S</DBAPL>
<DBNA>D$</DBNA>
<SUBC>I</SUBC>
<APPL>S</APPL>
<FIXPT>X</FIXPT>
<LDBNAME>D$S</LDBNAME>
<UCCHECK>X</UCCHECK>
</PROGDIR>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,15 @@
*******************************************************************
* System-defined Include-files. *
*******************************************************************
INCLUDE LZDEMO_ABAP_FUGRTOP. " Global Declarations
INCLUDE LZDEMO_ABAP_FUGRUXX. " Function Modules
*******************************************************************
* User-defined Include-files (if necessary). *
*******************************************************************
* INCLUDE LZDEMO_ABAP_FUGRF... " Subroutines
* INCLUDE LZDEMO_ABAP_FUGRO... " PBO-Modules
* INCLUDE LZDEMO_ABAP_FUGRI... " PAI-Modules
* INCLUDE LZDEMO_ABAP_FUGRE... " Events
* INCLUDE LZDEMO_ABAP_FUGRP... " Local class implement.
* INCLUDE LZDEMO_ABAP_FUGRT99. " ABAP Unit tests

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>SAPLZDEMO_ABAP_FUGR</NAME>
<DBAPL>S</DBAPL>
<DBNA>D$</DBNA>
<SUBC>F</SUBC>
<APPL>S</APPL>
<RLOAD>E</RLOAD>
<FIXPT>X</FIXPT>
<LDBNAME>D$S</LDBNAME>
<UCCHECK>X</UCCHECK>
</PROGDIR>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_FUGR" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<AREAT>Demo function group</AREAT>
<INCLUDES>
<SOBJ_NAME>LZDEMO_ABAP_FUGRTOP</SOBJ_NAME>
<SOBJ_NAME>SAPLZDEMO_ABAP_FUGR</SOBJ_NAME>
</INCLUDES>
<FUNCTIONS>
<item>
<FUNCNAME>ZDEMO_ABAP_DELETE_FU</FUNCNAME>
<UPDATE_TASK>1</UPDATE_TASK>
<SHORT_TEXT>Demo update function module</SHORT_TEXT>
</item>
<item>
<FUNCNAME>ZDEMO_ABAP_LOG_FU</FUNCNAME>
<UPDATE_TASK>1</UPDATE_TASK>
<SHORT_TEXT>Demo update function module</SHORT_TEXT>
<IMPORT>
<RSIMP>
<PARAMETER>LOG</PARAMETER>
<TYP>ZCL_DEMO_ABAP_SAP_LUW_HELPER=&gt;LOG_TYPE</TYP>
</RSIMP>
<RSIMP>
<PARAMETER>CAUSE_ERROR</PARAMETER>
<DEFAULT>ABAP_FALSE</DEFAULT>
<OPTIONAL>X</OPTIONAL>
<TYP>ABAP_BOOL</TYP>
</RSIMP>
</IMPORT>
<DOCUMENTATION>
<RSFDO>
<PARAMETER>LOG</PARAMETER>
<KIND>P</KIND>
</RSFDO>
<RSFDO>
<PARAMETER>CAUSE_ERROR</PARAMETER>
<KIND>P</KIND>
</RSFDO>
</DOCUMENTATION>
</item>
<item>
<FUNCNAME>ZDEMO_ABAP_MODIFY_FU</FUNCNAME>
<UPDATE_TASK>1</UPDATE_TASK>
<SHORT_TEXT>Demo update function module</SHORT_TEXT>
<IMPORT>
<RSIMP>
<PARAMETER>VALUES</PARAMETER>
<TYP>ZDEMO_ABAP_LUW_T</TYP>
</RSIMP>
</IMPORT>
<DOCUMENTATION>
<RSFDO>
<PARAMETER>VALUES</PARAMETER>
<KIND>P</KIND>
</RSFDO>
</DOCUMENTATION>
</item>
</FUNCTIONS>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,34 @@
FUNCTION zdemo_abap_delete_fu.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*"----------------------------------------------------------------------
DELETE FROM zdemo_abap_luw_t.
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #( ( id = 70
context = 'Function module'
name = 'zdemo_abap_delete_fu'
details = `Function module called`
timestamp = utclong_current( ) )
( id = 71
context = 'Function module'
name = 'zdemo_abap_delete_fu'
details = zcl_demo_abap_sap_luw_helper=>get_work_process_info( )
timestamp = utclong_current( ) )
( id = 72
context = 'Function module'
name = 'zdemo_abap_delete_fu'
details = `SAP LUW Key: ` && cl_system_transaction_state=>get_sap_luw_key( )
timestamp = utclong_current( ) )
( id = 73
context = 'Function module'
name = 'zdemo_abap_delete_fu'
details = zcl_demo_abap_sap_luw_helper=>checking_transaction_state( )
timestamp = utclong_current( ) ) ) ).
ENDFUNCTION.

View File

@@ -0,0 +1,41 @@
FUNCTION ZDEMO_ABAP_LOG_FU.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*" IMPORTING
*" VALUE(LOG) TYPE ZCL_DEMO_ABAP_SAP_LUW_HELPER=>LOG_TYPE
*" VALUE(CAUSE_ERROR) TYPE ABAP_BOOL DEFAULT ABAP_FALSE
*"----------------------------------------------------------------------
MODIFY zdemo_abap_logt FROM TABLE @log.
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #( ( id = 90
context = `Function module`
name = `zdemo_abap_log_fu`
details = `Function module called`
timestamp = utclong_current( ) )
( id = 91
context = `Function module`
name = `zdemo_abap_log_fu`
details = zcl_demo_abap_sap_luw_helper=>get_work_process_info( )
timestamp = utclong_current( ) )
( id = 92
context = `Function module`
name = `zdemo_abap_log_fu`
details = `SAP LUW Key: ` && cl_system_transaction_state=>get_sap_luw_key( )
timestamp = utclong_current( ) )
( id = 93
context = `Function module`
name = `zdemo_abap_log_fu`
details = zcl_demo_abap_sap_luw_helper=>checking_transaction_state( )
timestamp = utclong_current( ) ) ) ).
IF cause_error = abap_true.
DATA(error_not_caught) = 1 / 0.
ENDIF.
ENDFUNCTION.

View File

@@ -0,0 +1,38 @@
FUNCTION ZDEMO_ABAP_MODIFY_FU.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*" IMPORTING
*" VALUE(VALUES) TYPE ZDEMO_ABAP_LUW_T
*"----------------------------------------------------------------------
values-time_stamp = utclong_current( ).
MODIFY zdemo_abap_luw_t FROM @values.
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #( ( id = 80
context = 'Function module'
name = 'zdemo_abap_modify_fu'
details = `Function module called`
timestamp = utclong_current( ) )
( id = 81
context = 'Function module'
name = 'zdemo_abap_modify_fu'
details = zcl_demo_abap_sap_luw_helper=>get_work_process_info( )
timestamp = utclong_current( ) )
( id = 82
context = 'Function module'
name = 'zdemo_abap_modify_fu'
details = `SAP LUW Key: ` && cl_system_transaction_state=>get_sap_luw_key( )
timestamp = utclong_current( ) )
( id = 83
context = 'Function module'
name = 'zdemo_abap_modify_fu'
details = zcl_demo_abap_sap_luw_helper=>checking_transaction_state( )
timestamp = utclong_current( ) ) ) ).
ENDFUNCTION.

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>ZDEMO_ABAP_LOGT</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<CLIDEP>X</CLIDEP>
<DDTEXT>Log table</DDTEXT>
<MASTERLANG>E</MASTERLANG>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZDEMO_ABAP_LOGT</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>CLIENT</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000006</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CLNT</DATATYPE>
<LENG>000003</LENG>
<MASK> CLNT</MASK>
</DD03P>
<DD03P>
<FIELDNAME>ID</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>X</INTTYPE>
<INTLEN>000004</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>INT4</DATATYPE>
<LENG>000010</LENG>
<MASK> INT4</MASK>
</DD03P>
<DD03P>
<FIELDNAME>CONTEXT</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000030</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000015</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>NAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000040</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000020</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>DETAILS</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TIMESTAMP</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>p</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>UTCL</DATATYPE>
<LENG>000027</LENG>
<MASK> UTCL</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>ZDEMO_ABAP_LUW_T</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<CLIDEP>X</CLIDEP>
<DDTEXT>Demo database table</DDTEXT>
<MASTERLANG>E</MASTERLANG>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZDEMO_ABAP_LUW_T</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>CLIENT</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000006</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CLNT</DATATYPE>
<LENG>000003</LENG>
<MASK> CLNT</MASK>
</DD03P>
<DD03P>
<FIELDNAME>KEY_FIELD</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>X</INTTYPE>
<INTLEN>000004</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>INT4</DATATYPE>
<LENG>000010</LENG>
<MASK> INT4</MASK>
</DD03P>
<DD03P>
<FIELDNAME>CH</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000020</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000010</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>NUM</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>X</INTTYPE>
<INTLEN>000004</INTLEN>
<DATATYPE>INT4</DATATYPE>
<LENG>000010</LENG>
<MASK> INT4</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TIME_STAMP</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>p</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>UTCL</DATATYPE>
<LENG>000027</LENG>
<MASK> UTCL</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,513 @@
*&---------------------------------------------------------------------*
*& ABAP cheat sheet: SAP LUW
*&
*&-------------------------- PURPOSE ----------------------------------*
*& - Example to demonstrate ABAP syntax in the context of the SAP LUW.
*& - Topics covered: Using update function modules and subroutines as
*& bundling techniques, synchronous/asynchronous/local updates
*&
*&----------------------- GETTING STARTED -----------------------------*
*& - Open the program with the ABAP development tools for Eclipse (ADT).
*& - Choose F8 to run the program.
*& - Select the radio buttons and choose 'Go' to progress with the program.
*&
*&----------------------------- NOTE -----------------------------------*
*&* The code presented in this class is intended only to support the ABAP
*&* cheat sheets. It is not intended for direct use in a production system
*&* environment. The code examples in the ABAP cheat sheets are primarily
*&* intended to provide a better explanation and visualization of the
*&* syntax and semantics of ABAP statements, not to solve concrete
*&* programming tasks. For production application programs, you should
*&* always work out your own solution for each individual case. There is
*&* no guarantee for the correctness or completeness of the code.
*&* Furthermore, there is no legal responsibility or liability for any
*&* errors or their consequences that may occur when using the the example
*&* code.
*&---------------------------------------------------------------------*
REPORT zdemo_abap_sap_luw.
DATA: tab_struc TYPE zdemo_abap_luw_t,
ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
del_insert TYPE abap_bool,
perform TYPE abap_bool,
commit TYPE abap_bool,
commit_wait TYPE abap_bool,
local_update TYPE abap_bool,
err TYPE abap_bool,
rollback TYPE abap_bool,
terminate TYPE abap_bool,
dynnr TYPE sy-dynnr,
counter TYPE i,
log_itab TYPE zcl_demo_abap_sap_luw_helper=>log_type.
CLASS lcl DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF request4log,
log TYPE zdemo_abap_logt,
called TYPE abap_bool,
wp_info TYPE abap_bool,
luw_key TYPE abap_bool,
tx_state TYPE abap_bool,
END OF request4log.
CLASS-METHODS: prep,
create_log_entries IMPORTING req TYPE request4log.
ENDCLASS.
CLASS lcl IMPLEMENTATION.
METHOD prep.
DELETE FROM zdemo_abap_luw_t.
INSERT zdemo_abap_luw_t FROM TABLE @( VALUE #(
( key_field = 1
ch = 'DEMO DATA'
num = 11
time_stamp = utclong_current( ) )
( key_field = 2
ch = 'THAT WAS'
num = 22
time_stamp = utclong_current( ) )
( key_field = 3
ch = 'CREATED'
num = 33
time_stamp = utclong_current( ) )
( key_field = 4
ch = 'IN ADVANCE'
num = 44
time_stamp = utclong_current( ) ) ) ).
DELETE FROM zdemo_abap_logt.
ENDMETHOD.
METHOD create_log_entries.
IF req-called = abap_true.
counter += 1.
INSERT VALUE #( id = counter
context = req-log-context
name = req-log-name
details = `Called!`
timestamp = utclong_current( )
) INTO TABLE log_itab.
ENDIF.
IF req-luw_key = abap_true.
counter += 1.
INSERT VALUE #( id = counter
context = req-log-context
name = req-log-name
details = `SAP LUW key: ` &&
cl_system_transaction_state=>get_sap_luw_key( )
timestamp = utclong_current( )
) INTO TABLE log_itab.
ENDIF.
IF req-wp_info = abap_true.
counter += 1.
INSERT VALUE #( id = counter
context = req-log-context
name = req-log-name
details =
zcl_demo_abap_sap_luw_helper=>get_work_process_info( )
timestamp = utclong_current( )
) INTO TABLE log_itab.
ENDIF.
IF req-tx_state = abap_true.
counter += 1.
INSERT VALUE #(
id = counter
context = req-log-context
name = req-log-name
details =
zcl_demo_abap_sap_luw_helper=>checking_transaction_state( )
timestamp = utclong_current( )
) INTO TABLE log_itab.
ENDIF.
ENDMETHOD.
ENDCLASS.
FORM delete.
zcl_demo_abap_sap_luw_helper=>subr_delete( ).
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'Subroutine'
name = 'delete' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
ENDFORM.
FORM insert.
DATA values TYPE zdemo_abap_luw_t.
IMPORT values = values FROM MEMORY ID 'DEMO_INSERT'.
IF sy-subrc = 0.
values-time_stamp = utclong_current( ).
zcl_demo_abap_sap_luw_helper=>subr_insert( values ).
ENDIF.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'Subroutine'
name = 'insert' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
ENDFORM.
FORM update_log.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'Subroutine'
name = 'update_log' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
zcl_demo_abap_sap_luw_helper=>subr_update_log( log_itab ).
ENDFORM.
FORM call_on_rollback.
"No implementation here. Only to demonstrate that the
"subroutine is called in the event of triggering a
"rollback.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'Subroutine'
name = 'call_on_rollback' )
called = abap_true
luw_key = abap_true
tx_state = abap_true ) ).
ENDFORM.
END-OF-SELECTION.
lcl=>prep( ).
counter += 1.
INSERT VALUE #(
id = counter
context = '-'
name = '-'
details = |Program { sy-repid } has been started.| &&
`The first dynpro is about to be called.`
timestamp = utclong_current( )
) INTO TABLE log_itab.
counter += 1.
INSERT VALUE #( id = counter
context = '-'
name = '-'
details = `SAP LUW Key: ` &&
cl_system_transaction_state=>get_sap_luw_key( )
timestamp = utclong_current( )
) INTO TABLE log_itab.
CALL SCREEN 9750.
**********************************************************************
***************** Dialog modules for 9750 ****************************
MODULE status_9750 OUTPUT.
SET PF-STATUS 'STATUS9750'.
SET TITLEBAR 'TITLE9750'.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PBO'
name = 'status_9750' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
zcl_demo_abap_sap_luw_helper=>cc_alv_display( 'DBENTRIES' ).
dynnr = sy-dynnr.
ENDMODULE.
MODULE user_command_9750 INPUT.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PAI'
name = 'user_command_9750' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'GO' OR 'ENTER'.
IF del_insert = abap_true.
CALL FUNCTION 'ZDEMO_ABAP_DELETE_FU' IN UPDATE TASK.
MESSAGE `A function module has been registered ` &&
`that clears the database table.` TYPE 'I'.
ELSEIF local_update = abap_true.
SET UPDATE TASK LOCAL.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PAI'
name = 'user_command_9750' )
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
CALL FUNCTION 'ZDEMO_ABAP_DELETE_FU' IN UPDATE TASK.
MESSAGE `Local update has been activated. A function ` &&
`module has been registered that clears the database table.` &&
` No matter if you choose COMMIT WORK or COMMIT WORK AND ` &&
`WAIT in the next step, it will be a synchronous update.` TYPE 'I'.
ELSEIF perform = abap_true.
PERFORM delete ON COMMIT.
PERFORM call_on_rollback ON ROLLBACK.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PAI'
name = 'user_command_9750' )
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
MESSAGE `Subroutines have been registered for commit ` &&
`and rollback.` TYPE 'I'.
ENDIF.
WHEN OTHERS.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
***************** Dialog modules for 9760 ****************************
MODULE status_9760 OUTPUT.
SET PF-STATUS 'STATUS9760'.
SET TITLEBAR 'TITLE9760'.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PBO'
name = 'status_9760' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
dynnr = sy-dynnr.
ENDMODULE.
MODULE user_command_9760 INPUT.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PAI'
name = 'user_command_9760' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'GO' OR 'ENTER'.
IF perform = abap_true.
"Registered subroutines cannot have any parameter interface.
"Therefore, data can only be passed through external interfaces,
"for example, the ABAP memory.
EXPORT values = tab_struc TO MEMORY ID 'DEMO_INSERT'.
PERFORM insert ON COMMIT.
MESSAGE `A subroutine that inserts the entries in the ` &&
`database table has been registered. ` &&
`When you select a commit option in the next step, ` &&
`COMMIT WORK and COMMIT WORK AND WAIT have ` &&
`the same effect. The subroutines are executed in ` &&
`the current work process in this case.` TYPE 'I'.
ELSE.
CALL FUNCTION 'ZDEMO_ABAP_MODIFY_FU' IN UPDATE TASK
EXPORTING
values = tab_struc.
MESSAGE `An update function module that inserts the ` &&
`entries in the database table has ` &&
`been registered.` TYPE 'I'.
ENDIF.
WHEN OTHERS.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
***************** Dialog modules for 9770 ****************************
MODULE status_9770 OUTPUT.
SET PF-STATUS 'STATUS9770'.
SET TITLEBAR 'TITLE9770'.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PBO'
name = 'status_9770' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
dynnr = sy-dynnr.
IF perform = 'X'.
LOOP AT SCREEN INTO DATA(scr).
IF scr-name = 'EXCURSION_WP'
OR scr-name = 'WAIT'
OR scr-name = 'FAIL_LUW'
OR scr-name = 'ERR'
OR scr-name = 'TERMINATE'
OR scr-name = 'ERROR_A'.
scr-invisible = '1'.
MODIFY SCREEN FROM scr.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE.
MODULE user_command_9770 INPUT.
lcl=>create_log_entries(
VALUE #( log = VALUE #( context = 'PAI'
name = 'user_command_9770' )
called = abap_true
luw_key = abap_true
tx_state = abap_true
wp_info = abap_true ) ).
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'GO' OR 'ENTER' OR 'OK'.
CASE 'X'.
WHEN commit.
IF perform = abap_false.
CALL FUNCTION 'ZDEMO_ABAP_LOG_FU' IN UPDATE TASK
EXPORTING
log = log_itab.
MESSAGE `An update function module that inserts ` &&
`entries for the log has been registered. ` &&
`COMMIT WORK is about to be executed.` TYPE 'I'.
ELSE.
PERFORM update_log ON COMMIT.
MESSAGE `A subroutine that inserts entries for the ` &&
`log has been registered ` &&
`COMMIT WORK is about to be executed.` TYPE 'I'.
ENDIF.
COMMIT WORK.
SELECT COUNT(*) FROM zdemo_abap_luw_t INTO @DATA(entries).
MESSAGE `COMMIT WORK has been executed. Current ` &&
`number of database table entries: ` &&
entries &&
`. If it is 4 and not 1, the update will be done ` &&
`asynchronously.` TYPE 'I'.
WHEN commit_wait.
IF perform = abap_false.
CALL FUNCTION 'ZDEMO_ABAP_LOG_FU' IN UPDATE TASK
EXPORTING
log = log_itab.
MESSAGE `An update function module that inserts ` &&
`entries for the log has been registered. ` &&
`COMMIT WORK AND WAIT is about to be executed.` TYPE 'I'.
ELSE.
PERFORM update_log ON COMMIT.
MESSAGE `A subroutine that inserts entries for the ` &&
`log has been registered ` &&
`COMMIT WORK AND WAIT is about to be executed.` TYPE 'I'.
ENDIF.
COMMIT WORK AND WAIT.
SELECT COUNT(*) FROM zdemo_abap_luw_t INTO @entries.
MESSAGE `COMMIT WORK AND WAIT has been executed. Current ` &&
`number of database table entries: ` &&
entries &&
`. If it is 1, the update has been done synchronously.` TYPE 'I'.
WHEN rollback.
ROLLBACK WORK.
MESSAGE `ROLLBACK WORK has been executed. A rollback has ` &&
`been triggered. The original database table content ` &&
`should be displayed.`
TYPE 'I'.
MESSAGE `Note: As an exception, and only for this demo ` &&
`example, the sample implementation includes a ` &&
`database update to the log table after the ` &&
`table after the rollback, just to show the progress of the ` &&
`execution up to that point.` TYPE 'I' DISPLAY LIKE 'E'.
"Update log table
zcl_demo_abap_sap_luw_helper=>create_log_entries( log_itab ).
"Log information for triggering a rollback
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #( ( id = 99
context = '-'
name = '-'
details = `Rollback triggered`
timestamp = utclong_current( ) ) ) ).
WHEN err.
CALL FUNCTION 'ZDEMO_ABAP_LOG_FU' IN UPDATE TASK
EXPORTING
log = log_itab
cause_error = abap_true.
IF local_update = abap_true.
MESSAGE `A function module has been registered that ` &&
`causes an error (zero division). COMMIT WORK AND WAIT ` &&
`is about to be executed. You are directly informed ` &&
`about the error and the program is terminated. All ` &&
`changes are implicitly rolled back. You can check ` &&
`transaction ST22 for the error caused.` TYPE 'I'.
ELSE.
MESSAGE `Function module was registered that ` &&
`causes an error (zero division). COMMIT WORK AND WAIT` &&
` will be excetued. All changes are implicitly rolled back.` &&
` When you start over or leave the example in the next dynpro, ` &&
`you should be informed about the issue in the Business Workplace. ` &&
`Also check ST22.` TYPE 'I'.
ENDIF.
COMMIT WORK AND WAIT.
WHEN terminate.
MESSAGE `This is an error message of type A. ` &&
`It termiantes the program. All changes are ` &&
`implicitly rolled back. ` &&
`You may want to check the database table entries of ` &&
`the example that remain unchanged.` TYPE 'A'.
ENDCASE.
WHEN OTHERS.
LEAVE PROGRAM.
ENDCASE.
SUBMIT ('ZDEMO_ABAP_SAP_LUW_DISPL').
ENDMODULE.

View File

@@ -0,0 +1,864 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZDEMO_ABAP_SAP_LUW</NAME>
<DBAPL>S</DBAPL>
<SUBC>1</SUBC>
<FIXPT>X</FIXPT>
<LDBNAME>D$S</LDBNAME>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<DYNPROS>
<item>
<HEADER>
<PROGRAM>ZDEMO_ABAP_SAP_LUW</PROGRAM>
<SCREEN>9750</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>Delete database table entries</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>9760</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>121</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
<RPY_DYCATT>
<TYPE>RADIOGROUP</TYPE>
<NAME>%A_DEL_INSERT</NAME>
<ELEMENT_OF>SCREEN</ELEMENT_OF>
<LINE>006</LINE>
<COLUMN>004</COLUMN>
<LENGTH>076</LENGTH>
<HEIGHT>003</HEIGHT>
</RPY_DYCATT>
<RPY_DYCATT>
<TYPE>CUST_CTRL</TYPE>
<NAME>DBENTRIES</NAME>
<ELEMENT_OF>SCREEN</ELEMENT_OF>
<LINE>012</LINE>
<COLUMN>005</COLUMN>
<LENGTH>068</LENGTH>
<HEIGHT>007</HEIGHT>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX1</NAME>
<TEXT>The_SAP_LUW_is_started._In_this_example,_all_the_entries_in_a_database_table_(see_below)_are_to_be_deleted.</TEXT>
<LINE>002</LINE>
<COLUMN>004</COLUMN>
<LENGTH>107</LENGTH>
<VISLENGTH>107</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX2</NAME>
<TEXT>The_ABAP_SQL_statement_is_implemented_in_an_update_function_module_and_a_subroutine._</TEXT>
<LINE>003</LINE>
<COLUMN>004</COLUMN>
<LENGTH>085</LENGTH>
<VISLENGTH>085</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX3</NAME>
<TEXT>Choose_one_of_the_following_options:</TEXT>
<LINE>004</LINE>
<COLUMN>004</COLUMN>
<LENGTH>036</LENGTH>
<VISLENGTH>036</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX4</NAME>
<TEXT>Current_database_table_entries:</TEXT>
<LINE>010</LINE>
<COLUMN>004</COLUMN>
<LENGTH>031</LENGTH>
<VISLENGTH>031</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX5</NAME>
<TEXT>Dynpro_number:</TEXT>
<LINE>021</LINE>
<COLUMN>005</COLUMN>
<LENGTH>014</LENGTH>
<VISLENGTH>014</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>DYNNR</NAME>
<TEXT>___________</TEXT>
<LINE>021</LINE>
<COLUMN>021</COLUMN>
<LENGTH>011</LENGTH>
<VISLENGTH>011</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<OUTPUT_FLD>X</OUTPUT_FLD>
<OUTPUTONLY>X</OUTPUTONLY>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<NAME>OK_CODE</NAME>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_DEL_INSERT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>DEL_INSERT</NAME>
<TEXT>Use_update_task_(CALL_FUNCTION_..._IN_UPDATE_TASK_statement)</TEXT>
<LINE>006</LINE>
<COLUMN>004</COLUMN>
<LENGTH>062</LENGTH>
<VISLENGTH>062</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_DEL_INSERT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>LOCAL_UPDATE</NAME>
<TEXT>Use_update_task_and_perform_local_update_(SET_UPDATE_TASK_LOCAL_statement)</TEXT>
<LINE>007</LINE>
<COLUMN>004</COLUMN>
<LENGTH>076</LENGTH>
<VISLENGTH>076</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_DEL_INSERT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>PERFORM</NAME>
<TEXT>Use_subroutines_(PERFORM_statement)</TEXT>
<LINE>008</LINE>
<COLUMN>004</COLUMN>
<LENGTH>037</LENGTH>
<VISLENGTH>037</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_9750.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE USER_COMMAND_9750.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
<item>
<HEADER>
<PROGRAM>ZDEMO_ABAP_SAP_LUW</PROGRAM>
<SCREEN>9760</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>Create database table entry</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>9770</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>121</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX7</NAME>
<TEXT>To_create_a_database_table_entry,_make_entries_in_the_following_input_fields:</TEXT>
<LINE>002</LINE>
<COLUMN>003</COLUMN>
<LENGTH>077</LENGTH>
<VISLENGTH>077</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX8</NAME>
<TEXT>KEY_FIELD</TEXT>
<LINE>004</LINE>
<COLUMN>003</COLUMN>
<LENGTH>009</LENGTH>
<VISLENGTH>009</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
<LABELLEFT>X</LABELLEFT>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>TAB_STRUC-KEY_FIELD</NAME>
<TEXT>_______.__</TEXT>
<LINE>004</LINE>
<COLUMN>015</COLUMN>
<LENGTH>010</LENGTH>
<VISLENGTH>010</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>INT4</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX11</NAME>
<TEXT>Type_i</TEXT>
<LINE>004</LINE>
<COLUMN>028</COLUMN>
<LENGTH>006</LENGTH>
<VISLENGTH>006</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX9</NAME>
<TEXT>CH</TEXT>
<LINE>006</LINE>
<COLUMN>003</COLUMN>
<LENGTH>002</LENGTH>
<VISLENGTH>002</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
<LABELLEFT>X</LABELLEFT>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>TAB_STRUC-CH</NAME>
<TEXT>__________</TEXT>
<LINE>006</LINE>
<COLUMN>015</COLUMN>
<LENGTH>010</LENGTH>
<VISLENGTH>010</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX12</NAME>
<TEXT>Type_c_length_10</TEXT>
<LINE>006</LINE>
<COLUMN>028</COLUMN>
<LENGTH>016</LENGTH>
<VISLENGTH>016</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX10</NAME>
<TEXT>NUM</TEXT>
<LINE>008</LINE>
<COLUMN>003</COLUMN>
<LENGTH>003</LENGTH>
<VISLENGTH>003</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
<LABELLEFT>X</LABELLEFT>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>TAB_STRUC-NUM</NAME>
<TEXT>_______.__</TEXT>
<LINE>008</LINE>
<COLUMN>015</COLUMN>
<LENGTH>010</LENGTH>
<VISLENGTH>010</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>INT4</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX13</NAME>
<TEXT>Type_i</TEXT>
<LINE>008</LINE>
<COLUMN>028</COLUMN>
<LENGTH>006</LENGTH>
<VISLENGTH>006</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX14</NAME>
<TEXT>Dynpro_number:</TEXT>
<LINE>011</LINE>
<COLUMN>003</COLUMN>
<LENGTH>014</LENGTH>
<VISLENGTH>014</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>DYNNR</NAME>
<TEXT>___________</TEXT>
<LINE>011</LINE>
<COLUMN>019</COLUMN>
<LENGTH>011</LENGTH>
<VISLENGTH>011</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<OUTPUT_FLD>X</OUTPUT_FLD>
<OUTPUTONLY>X</OUTPUTONLY>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<NAME>OK_CODE</NAME>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_9760.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE USER_COMMAND_9760.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
<item>
<HEADER>
<PROGRAM>ZDEMO_ABAP_SAP_LUW</PROGRAM>
<SCREEN>9770</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>End SAP LUW</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>0000</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>121</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
<RPY_DYCATT>
<TYPE>RADIOGROUP</TYPE>
<NAME>%A_COMMIT</NAME>
<ELEMENT_OF>SCREEN</ELEMENT_OF>
<LINE>004</LINE>
<COLUMN>003</COLUMN>
<LENGTH>048</LENGTH>
<HEIGHT>005</HEIGHT>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX6</NAME>
<TEXT>Select_one_of_the_following_options_to_proceed:</TEXT>
<LINE>002</LINE>
<COLUMN>003</COLUMN>
<LENGTH>047</LENGTH>
<VISLENGTH>047</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
<LABELLEFT>X</LABELLEFT>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>%#AUTOTEXT009</NAME>
<TEXT>Dynpro_number:</TEXT>
<LINE>012</LINE>
<COLUMN>003</COLUMN>
<LENGTH>014</LENGTH>
<VISLENGTH>014</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>DYNNR</NAME>
<TEXT>___________</TEXT>
<LINE>012</LINE>
<COLUMN>018</COLUMN>
<LENGTH>011</LENGTH>
<VISLENGTH>011</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<OUTPUT_FLD>X</OUTPUT_FLD>
<OUTPUTONLY>X</OUTPUTONLY>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<NAME>OK_CODE</NAME>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_COMMIT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>COMMIT</NAME>
<TEXT>Asynchronous_update_with_COMMIT_WORK</TEXT>
<LINE>004</LINE>
<COLUMN>003</COLUMN>
<LENGTH>038</LENGTH>
<VISLENGTH>038</VISLENGTH>
<HEIGHT>001</HEIGHT>
<GROUP1>1</GROUP1>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_COMMIT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>COMMIT_WAIT</NAME>
<TEXT>Synchronous_update_with_COMMIT_WORK_AND_WAIT</TEXT>
<LINE>005</LINE>
<COLUMN>003</COLUMN>
<LENGTH>046</LENGTH>
<VISLENGTH>046</VISLENGTH>
<HEIGHT>001</HEIGHT>
<GROUP1>1</GROUP1>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_COMMIT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>ROLLBACK</NAME>
<TEXT>Rollback_changes_using_ROLLBACK_WORK</TEXT>
<LINE>006</LINE>
<COLUMN>003</COLUMN>
<LENGTH>038</LENGTH>
<VISLENGTH>038</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_COMMIT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>ERR</NAME>
<TEXT>Cause_a_failure_in_the_current_SAP_LUW</TEXT>
<LINE>007</LINE>
<COLUMN>003</COLUMN>
<LENGTH>040</LENGTH>
<VISLENGTH>040</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>RADIOGROUP</CONT_TYPE>
<CONT_NAME>%A_COMMIT</CONT_NAME>
<TYPE>RADIO</TYPE>
<NAME>TERMINATE</NAME>
<TEXT>Terminate_program_with_error_message_of_type_A</TEXT>
<LINE>008</LINE>
<COLUMN>003</COLUMN>
<LENGTH>048</LENGTH>
<VISLENGTH>048</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
<OUTPUT_FLD>X</OUTPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_9770.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE USER_COMMAND_9770.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
</DYNPROS>
<CUA>
<ADM>
<ACTCODE>000003</ACTCODE>
<PFKCODE>000003</PFKCODE>
</ADM>
<STA>
<RSMPE_STAT>
<CODE>STATUS9750</CODE>
<MODAL>D</MODAL>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
<BUTCODE>0001</BUTCODE>
<INT_NOTE>Delete database table entries</INT_NOTE>
</RSMPE_STAT>
<RSMPE_STAT>
<CODE>STATUS9760</CODE>
<MODAL>D</MODAL>
<ACTCODE>000002</ACTCODE>
<PFKCODE>000002</PFKCODE>
<BUTCODE>0001</BUTCODE>
<INT_NOTE>Create database table entry</INT_NOTE>
</RSMPE_STAT>
<RSMPE_STAT>
<CODE>STATUS9770</CODE>
<MODAL>D</MODAL>
<ACTCODE>000003</ACTCODE>
<PFKCODE>000003</PFKCODE>
<BUTCODE>0001</BUTCODE>
<INT_NOTE>End SAP LUW</INT_NOTE>
</RSMPE_STAT>
</STA>
<FUN>
<RSMPE_FUNT>
<CODE>ENTER</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Enter</FUN_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>GO</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<TEXT_NAME>ICON_MAPPED_RELATION</TEXT_NAME>
<ICON_ID>@EY@</ICON_ID>
<FUN_TEXT>Go</FUN_TEXT>
<ICON_TEXT>Go</ICON_TEXT>
<INFO_TEXT>Go</INFO_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>LEAVE</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Exit</FUN_TEXT>
</RSMPE_FUNT>
</FUN>
<BUT>
<RSMPE_BUT>
<PFK_CODE>000001</PFK_CODE>
<CODE>0001</CODE>
<NO>01</NO>
<PFNO>08</PFNO>
</RSMPE_BUT>
<RSMPE_BUT>
<PFK_CODE>000002</PFK_CODE>
<CODE>0001</CODE>
<NO>01</NO>
<PFNO>08</PFNO>
</RSMPE_BUT>
<RSMPE_BUT>
<PFK_CODE>000003</PFK_CODE>
<CODE>0001</CODE>
<NO>01</NO>
<PFNO>08</PFNO>
</RSMPE_BUT>
</BUT>
<PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>00</PFNO>
<FUNCODE>ENTER</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>08</PFNO>
<FUNCODE>GO</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>15</PFNO>
<FUNCODE>LEAVE</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000002</CODE>
<PFNO>00</PFNO>
<FUNCODE>ENTER</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000002</CODE>
<PFNO>08</PFNO>
<FUNCODE>GO</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000002</CODE>
<PFNO>15</PFNO>
<FUNCODE>LEAVE</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000003</CODE>
<PFNO>00</PFNO>
<FUNCODE>ENTER</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000003</CODE>
<PFNO>08</PFNO>
<FUNCODE>GO</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000003</CODE>
<PFNO>15</PFNO>
<FUNCODE>LEAVE</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
</PFK>
<SET>
<RSMPE_STAF>
<STATUS>STATUS9750</STATUS>
<FUNCTION>ENTER</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9750</STATUS>
<FUNCTION>GO</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9750</STATUS>
<FUNCTION>LEAVE</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9760</STATUS>
<FUNCTION>ENTER</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9760</STATUS>
<FUNCTION>GO</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9760</STATUS>
<FUNCTION>LEAVE</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9770</STATUS>
<FUNCTION>ENTER</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9770</STATUS>
<FUNCTION>GO</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9770</STATUS>
<FUNCTION>LEAVE</FUNCTION>
</RSMPE_STAF>
</SET>
<DOC>
<RSMPE_ATRT>
<OBJ_TYPE>A</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Delete database table entries</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>P</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Delete database table entries</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>B</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<SUB_CODE>0001</SUB_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Delete database table entries</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>A</OBJ_TYPE>
<OBJ_CODE>000002</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Create database table entry</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>P</OBJ_TYPE>
<OBJ_CODE>000002</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Create database table entry</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>B</OBJ_TYPE>
<OBJ_CODE>000002</OBJ_CODE>
<SUB_CODE>0001</SUB_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Create database table entry</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>A</OBJ_TYPE>
<OBJ_CODE>000003</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>End SAP LUW</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>P</OBJ_TYPE>
<OBJ_CODE>000003</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>End SAP LUW</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>B</OBJ_TYPE>
<OBJ_CODE>000003</OBJ_CODE>
<SUB_CODE>0001</SUB_CODE>
<MODAL>D</MODAL>
<INT_NOTE>End SAP LUW</INT_NOTE>
</RSMPE_ATRT>
</DOC>
<TIT>
<RSMPE_TITT>
<CODE>TITLE9750</CODE>
<TEXT>Delete database table entries</TEXT>
</RSMPE_TITT>
<RSMPE_TITT>
<CODE>TITLE9760</CODE>
<TEXT>Create database table entry</TEXT>
</RSMPE_TITT>
<RSMPE_TITT>
<CODE>TITLE9770</CODE>
<TEXT>End SAP LUW</TEXT>
</RSMPE_TITT>
</TIT>
</CUA>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>Demonstrating SAP LUW</ENTRY>
<LENGTH>21</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>

View File

@@ -0,0 +1,139 @@
*&---------------------------------------------------------------------*
*& Demo program used in the context of the SAP LUW ABAP cheat sheet
*&
*&----------------------------- NOTE -----------------------------------*
*& The code presented in this class is intended only to support the ABAP
*& cheat sheets. It is not intended for direct use in a production system
*& environment. The code examples in the ABAP cheat sheets are primarily
*& intended to provide a better explanation and visualization of the
*& syntax and semantics of ABAP statements, not to solve concrete
*& programming tasks. For production application programs, you should
*& always work out your own solution for each individual case. There is
*& no guarantee for the correctness or completeness of the code.
*& Furthermore, there is no legal responsibility or liability for any
*& errors or their consequences that may occur when using the the example
*& code.
*&---------------------------------------------------------------------*
REPORT zdemo_abap_sap_luw_displ.
DATA: ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
dynnr LIKE sy-dynnr.
END-OF-SELECTION.
"Checks if program is started separately
SELECT COUNT(*)
FROM zdemo_abap_logt
INTO @DATA(entries).
SELECT SINGLE id
FROM zdemo_abap_logt
WHERE id = 100
INTO @DATA(exists).
IF sy-subrc = 0 OR entries = 0.
DELETE FROM zdemo_abap_logt.
DATA(check) = abap_true.
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #( ( id = 97
context = '-'
name = '-'
details = `Choose Start over from the menu.`
timestamp = utclong_current( ) ) ) ).
ENDIF.
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #( ( id = 100
context = '-'
name = '-'
details = |New program executed: { sy-repid }|
timestamp = utclong_current( ) ) ) ).
CALL SCREEN 9780.
**********************************************************************
***************** Dialog modules for 9780 ****************************
MODULE status_9780 OUTPUT.
SET PF-STATUS 'STATUS9780'.
SET TITLEBAR 'TITLE9780'.
"Checks for asynchronous update
IF check = abap_false.
DATA(idx) = 0.
DO 5 TIMES. "A maximum of 5 seconds of waiting time
SELECT SINGLE id, context
FROM zdemo_abap_logt
WHERE
"Entry inserted ...
id = 93 "by the final update function module
OR id = 99 "in case of ROLLBACK WORK
OR id = 96 "in case of the intended failure in SAP LUW
OR context = 'Subroutine' "if subroutines are used
INTO @DATA(wa). "#EC CI_CMPLX_WHERE
IF sy-subrc = 0.
EXIT.
ELSE.
idx = sy-index.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
IF idx = 5.
MESSAGE `The asynchronous update takes too long. ` &&
`You may want to restart the example and try again.`
TYPE 'I'.
ENDIF.
ENDIF.
zcl_demo_abap_sap_luw_helper=>create_log_entries(
VALUE #(
( id = 101
context = 'PBO'
name = 'status_9780'
details = `Module called`
timestamp = utclong_current( ) )
( id = 102
context = 'PBO'
name = 'status_9780'
details = zcl_demo_abap_sap_luw_helper=>get_work_process_info( )
timestamp = utclong_current( ) )
( id = 103
context = 'PBO'
name = 'status_9780'
details = `SAP LUW Key: ` &&
cl_system_transaction_state=>get_sap_luw_key( )
timestamp = utclong_current( ) )
( id = 104
context = 'PBO'
name = 'status_9780'
details = zcl_demo_abap_sap_luw_helper=>checking_transaction_state( )
timestamp = utclong_current( ) ) ) ).
zcl_demo_abap_sap_luw_helper=>cc_alv_display( 'CC_DB_FINAL' ).
zcl_demo_abap_sap_luw_helper=>cc_alv_display( container = 'CC_WP'
log = abap_true ).
dynnr = sy-dynnr.
ENDMODULE.
MODULE user_command_9780 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'STARTOVER'.
ROLLBACK WORK.
DELETE FROM zdemo_abap_logt.
SUBMIT ('ZDEMO_ABAP_SAP_LUW').
WHEN OTHERS.
DELETE FROM zdemo_abap_logt.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.

View File

@@ -0,0 +1,240 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZDEMO_ABAP_SAP_LUW_DISPL</NAME>
<DBAPL>S</DBAPL>
<SUBC>1</SUBC>
<FIXPT>X</FIXPT>
<LDBNAME>D$S</LDBNAME>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<DYNPROS>
<item>
<HEADER>
<PROGRAM>ZDEMO_ABAP_SAP_LUW_DISPL</PROGRAM>
<SCREEN>9780</SCREEN>
<LANGUAGE>E</LANGUAGE>
<DESCRIPT>Display database table and log</DESCRIPT>
<TYPE>N</TYPE>
<NEXTSCREEN>9780</NEXTSCREEN>
<LINES>027</LINES>
<COLUMNS>186</COLUMNS>
</HEADER>
<CONTAINERS>
<RPY_DYCATT>
<TYPE>SCREEN</TYPE>
<NAME>SCREEN</NAME>
</RPY_DYCATT>
<RPY_DYCATT>
<TYPE>CUST_CTRL</TYPE>
<NAME>CC_DB_FINAL</NAME>
<ELEMENT_OF>SCREEN</ELEMENT_OF>
<LINE>003</LINE>
<COLUMN>002</COLUMN>
<LENGTH>074</LENGTH>
<HEIGHT>007</HEIGHT>
</RPY_DYCATT>
<RPY_DYCATT>
<TYPE>CUST_CTRL</TYPE>
<NAME>CC_WP</NAME>
<ELEMENT_OF>SCREEN</ELEMENT_OF>
<LINE>013</LINE>
<COLUMN>002</COLUMN>
<LENGTH>156</LENGTH>
<HEIGHT>014</HEIGHT>
</RPY_DYCATT>
</CONTAINERS>
<FIELDS>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX15</NAME>
<TEXT>Database_table_entries:</TEXT>
<LINE>001</LINE>
<COLUMN>002</COLUMN>
<LENGTH>023</LENGTH>
<VISLENGTH>023</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>%#AUTOTEXT003</NAME>
<TEXT>Dynpro_number:</TEXT>
<LINE>001</LINE>
<COLUMN>130</COLUMN>
<LENGTH>014</LENGTH>
<VISLENGTH>014</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEMPLATE</TYPE>
<NAME>DYNNR</NAME>
<TEXT>___________</TEXT>
<LINE>001</LINE>
<COLUMN>146</COLUMN>
<LENGTH>011</LENGTH>
<VISLENGTH>011</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<OUTPUT_FLD>X</OUTPUT_FLD>
<OUTPUTONLY>X</OUTPUTONLY>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>TEXT</TYPE>
<NAME>TX16</NAME>
<TEXT>Log_database_table_entries:</TEXT>
<LINE>011</LINE>
<COLUMN>002</COLUMN>
<LENGTH>027</LENGTH>
<VISLENGTH>027</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<REQU_ENTRY>N</REQU_ENTRY>
</RPY_DYFATC>
<RPY_DYFATC>
<CONT_TYPE>SCREEN</CONT_TYPE>
<CONT_NAME>SCREEN</CONT_NAME>
<TYPE>OKCODE</TYPE>
<NAME>OK_CODE</NAME>
<TEXT>____________________</TEXT>
<LENGTH>020</LENGTH>
<VISLENGTH>020</VISLENGTH>
<HEIGHT>001</HEIGHT>
<FORMAT>CHAR</FORMAT>
<INPUT_FLD>X</INPUT_FLD>
</RPY_DYFATC>
</FIELDS>
<FLOW_LOGIC>
<RPY_DYFLOW>
<LINE>PROCESS BEFORE OUTPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE STATUS_9780.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW/>
<RPY_DYFLOW>
<LINE>PROCESS AFTER INPUT.</LINE>
</RPY_DYFLOW>
<RPY_DYFLOW>
<LINE> MODULE USER_COMMAND_9780.</LINE>
</RPY_DYFLOW>
</FLOW_LOGIC>
</item>
</DYNPROS>
<CUA>
<ADM>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
</ADM>
<STA>
<RSMPE_STAT>
<CODE>STATUS9780</CODE>
<MODAL>D</MODAL>
<ACTCODE>000001</ACTCODE>
<PFKCODE>000001</PFKCODE>
<BUTCODE>0001</BUTCODE>
<INT_NOTE>Display database table and log</INT_NOTE>
</RSMPE_STAT>
</STA>
<FUN>
<RSMPE_FUNT>
<CODE>LEAVE</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<FUN_TEXT>Exit</FUN_TEXT>
</RSMPE_FUNT>
<RSMPE_FUNT>
<CODE>STARTOVER</CODE>
<TEXTNO>001</TEXTNO>
<TEXT_TYPE>S</TEXT_TYPE>
<TEXT_NAME>ICON_SYSTEM_UNDO</TEXT_NAME>
<ICON_ID>@2W@</ICON_ID>
<FUN_TEXT>STARTOVER</FUN_TEXT>
<ICON_TEXT>Start over</ICON_TEXT>
<INFO_TEXT>Start over</INFO_TEXT>
</RSMPE_FUNT>
</FUN>
<BUT>
<RSMPE_BUT>
<PFK_CODE>000001</PFK_CODE>
<CODE>0001</CODE>
<NO>01</NO>
<PFNO>08</PFNO>
</RSMPE_BUT>
</BUT>
<PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>08</PFNO>
<FUNCODE>STARTOVER</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
<RSMPE_PFK>
<CODE>000001</CODE>
<PFNO>15</PFNO>
<FUNCODE>LEAVE</FUNCODE>
<FUNNO>001</FUNNO>
</RSMPE_PFK>
</PFK>
<SET>
<RSMPE_STAF>
<STATUS>STATUS9780</STATUS>
<FUNCTION>LEAVE</FUNCTION>
</RSMPE_STAF>
<RSMPE_STAF>
<STATUS>STATUS9780</STATUS>
<FUNCTION>STARTOVER</FUNCTION>
</RSMPE_STAF>
</SET>
<DOC>
<RSMPE_ATRT>
<OBJ_TYPE>A</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Display database table and log</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>P</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Display database table and log</INT_NOTE>
</RSMPE_ATRT>
<RSMPE_ATRT>
<OBJ_TYPE>B</OBJ_TYPE>
<OBJ_CODE>000001</OBJ_CODE>
<SUB_CODE>0001</SUB_CODE>
<MODAL>D</MODAL>
<INT_NOTE>Display database table and log</INT_NOTE>
</RSMPE_ATRT>
</DOC>
<TIT>
<RSMPE_TITT>
<CODE>TITLE9780</CODE>
<TEXT>Display database table and log</TEXT>
</RSMPE_TITT>
</TIT>
</CUA>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>Demonstrating SAP LUW - Display</ENTRY>
<LENGTH>31</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>