Add sel.scren/list example
This commit is contained in:
@@ -0,0 +1,403 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
* Example: Event blocks
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* - Example that demonstrates event blocks
|
||||
* - The main purpose of the example to visualize the calling of the
|
||||
* events. Internal tables are filled during the events to log the
|
||||
* event name and the time stamp when it is called. The tables
|
||||
* are then output. It is implemented in such a way that it consists
|
||||
* only of a basic list and a details list. Note the selection screen
|
||||
* comments displayed.
|
||||
* Includes:
|
||||
* - Program constructor: LOAD-OF-PROGRAM
|
||||
* - Reporting events: INITIALIZATION, START-OF-SELECTION
|
||||
* - Selection screen events: AT SELECTION-SCREEN ...
|
||||
* - List events: AT LINE-SELECTION, AT USER-COMMAND, TOP-OF-PAGE,
|
||||
* END-OF-PAGE
|
||||
*
|
||||
* Notes:
|
||||
* A selection of additions is used. For more additions and details,
|
||||
* see the ABAP Keyword Documentation.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
"LINE-COUNT: Specifies the page length for the basic list
|
||||
"Number in parentheses: Lines that are reserved for the page footer,
|
||||
"which can be specified in the END-OF-PAGE event block.
|
||||
PROGRAM LINE-COUNT 20(3).
|
||||
|
||||
TYPES: BEGIN OF st,
|
||||
id TYPE c LENGTH 3,
|
||||
event_block TYPE c LENGTH 50,
|
||||
time TYPE utclong,
|
||||
END OF st.
|
||||
DATA: counter_line TYPE i,
|
||||
reporting_and_selscr_log TYPE TABLE OF st WITH EMPTY KEY,
|
||||
list_log TYPE TABLE OF st WITH EMPTY KEY,
|
||||
counter TYPE i,
|
||||
tstmp TYPE utclong.
|
||||
|
||||
SELECTION-SCREEN COMMENT /1(70) intro.
|
||||
SELECTION-SCREEN SKIP.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF BLOCK blk.
|
||||
PARAMETERS: number1 TYPE string DEFAULT `1` VISIBLE LENGTH 5 .
|
||||
PARAMETERS: number2 TYPE string DEFAULT `2` VISIBLE LENGTH 5 .
|
||||
SELECTION-SCREEN END OF BLOCK blk.
|
||||
|
||||
PARAMETERS: plus RADIOBUTTON GROUP grp DEFAULT 'X',
|
||||
minus RADIOBUTTON GROUP grp,
|
||||
multiply RADIOBUTTON GROUP grp,
|
||||
divide RADIOBUTTON GROUP grp.
|
||||
|
||||
SELECTION-SCREEN SKIP 2.
|
||||
SELECTION-SCREEN COMMENT /1(70) note.
|
||||
|
||||
"Local class with methods used in the example in various places
|
||||
CLASS demo DEFINITION.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
sel_screen_evt IMPORTING evt TYPE string,
|
||||
write_line IMPORTING evt TYPE string
|
||||
utc TYPE utclong,
|
||||
counter,
|
||||
list_evt IMPORTING evt TYPE string,
|
||||
write_rep_sel_log,
|
||||
write_list_log.
|
||||
CLASS-DATA: li_wa LIKE LINE OF list_log,
|
||||
sel_wa LIKE LINE OF reporting_and_selscr_log.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS demo IMPLEMENTATION.
|
||||
METHOD counter.
|
||||
IF counter = 0.
|
||||
counter = 1.
|
||||
ELSE.
|
||||
counter += 1.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sel_screen_evt.
|
||||
counter( ).
|
||||
APPEND VALUE #( id = counter event_block = evt time = utclong_current( ) ) TO reporting_and_selscr_log.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD list_evt.
|
||||
counter( ).
|
||||
APPEND VALUE #( id = counter event_block = evt time = utclong_current( ) ) TO list_log.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD write_line.
|
||||
counter( ).
|
||||
WRITE: /3(*) counter,
|
||||
15 evt,
|
||||
60 utc.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD write_rep_sel_log.
|
||||
SKIP.
|
||||
WRITE / '********** Log entries for reporting and selection screen events **********' COLOR 2.
|
||||
|
||||
FORMAT COLOR 2.
|
||||
WRITE: /3 'ID', 15 'Event Block', 60 'Time' .
|
||||
FORMAT COLOR OFF.
|
||||
LOOP AT reporting_and_selscr_log INTO sel_wa.
|
||||
WRITE: / sel_wa-id UNDER 'ID',
|
||||
sel_wa-event_block UNDER 'Event Block',
|
||||
sel_wa-time UNDER 'Time'.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD write_list_log.
|
||||
WRITE / '********** Log entries for list events **********' COLOR 2.
|
||||
|
||||
FORMAT COLOR 2.
|
||||
WRITE: /3 'ID', 15 'Event Block', 60 'Time' .
|
||||
FORMAT COLOR OFF.
|
||||
LOOP AT list_log INTO li_wa.
|
||||
WRITE: / li_wa-id UNDER 'ID',
|
||||
li_wa-event_block UNDER 'Event Block',
|
||||
li_wa-time UNDER 'Time'.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
LOAD-OF-PROGRAM.
|
||||
|
||||
"Called when a program is loaded into the internal session
|
||||
"When you call an executable programs with SUBMIT, it is recommended that
|
||||
"you use the INITIALIZATION event for initializing data objects, since the
|
||||
"initial values for parameters and selection criteria are set after LOAD-OF-PROGRAM.
|
||||
|
||||
demo=>sel_screen_evt( `LOAD-OF-PROGRAM` ).
|
||||
|
||||
**********************************************************************
|
||||
|
||||
INITIALIZATION.
|
||||
|
||||
"Called immediately after LOAD-OF-PROGRAM and before the selection
|
||||
"screen processing of an existing standard selection screen.
|
||||
"You can initialize the input fields of the selection screen here.
|
||||
|
||||
demo=>sel_screen_evt( `INITIALIZATION` ).
|
||||
intro = 'Enter two integers and select a radio button for a calculation.'.
|
||||
note = 'The Back/Exit/Cancel buttons raise the ON EXIT-COMMAND event.'.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN OUTPUT.
|
||||
"Called by the dynpro event PBO of a selection screen
|
||||
"Can be used for screen modifications.
|
||||
|
||||
demo=>sel_screen_evt( `AT SELECTION-SCREEN OUTPUT` ).
|
||||
|
||||
LOOP AT SCREEN INTO DATA(wa).
|
||||
IF wa-name = 'INTRO'.
|
||||
wa-intensified = '1'.
|
||||
MODIFY SCREEN FROM wa.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN ON RADIOBUTTON GROUP grp.
|
||||
|
||||
"Called when the values for a radio button group was passed
|
||||
|
||||
demo=>sel_screen_evt( `AT SELECTION-SCREEN ON RADIOBUTTON GROUP` ).
|
||||
|
||||
CASE 'X'.
|
||||
WHEN plus.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON RADIOBUTTON GROUP is called. The operator will be +' TYPE 'I'.
|
||||
WHEN minus.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON RADIOBUTTON GROUP is called. The operator will be -' TYPE 'I'.
|
||||
WHEN multiply.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON RADIOBUTTON GROUP is called. The operator will be *' TYPE 'I'.
|
||||
WHEN divide.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON RADIOBUTTON GROUP is called. The operator will be /' TYPE 'I'.
|
||||
ENDCASE.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN ON BLOCK blk.
|
||||
|
||||
"Called when all input for a block is passed to the program
|
||||
|
||||
demo=>sel_screen_evt( `AT SELECTION-SCREEN ON BLOCK blk` ).
|
||||
|
||||
CONDENSE number1 NO-GAPS.
|
||||
CONDENSE number2 NO-GAPS.
|
||||
FIND PCRE `\D` IN number1.
|
||||
DATA(subrc) = sy-subrc.
|
||||
FIND PCRE `\D` IN number2.
|
||||
IF subrc = 0
|
||||
OR sy-subrc = 0.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON BLOCK is called. Provide correct integer values.' TYPE 'E'.
|
||||
ENDIF.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN ON number1.
|
||||
|
||||
"Called when values for a parameter (which is the case here) or selection criteria were passed to the program
|
||||
|
||||
demo=>sel_screen_evt( `AT SELECTION-SCREEN ON number1.` ).
|
||||
|
||||
IF number1 IS INITIAL.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON is called. Please make an entry for number1' TYPE 'E'.
|
||||
ENDIF.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN ON number2.
|
||||
|
||||
"Called when values for a parameter (which is the case here) or selection criteria were passed to the program
|
||||
|
||||
demo=>sel_screen_evt( `AT SELECTION-SCREEN ON number2.` ).
|
||||
|
||||
IF number2 IS INITIAL.
|
||||
MESSAGE 'Please make an entry for number2' TYPE 'E'.
|
||||
ENDIF.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN ON EXIT-COMMAND.
|
||||
|
||||
"Called in case of Back, Exit, or Cancel
|
||||
|
||||
MESSAGE 'Event AT SELECTION-SCREEN ON EXIT-COMMAND is called. See you.' TYPE 'I'.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN.
|
||||
|
||||
"Called as last event in the selection screen processing when all
|
||||
"input values are passed to the program
|
||||
|
||||
demo=>sel_screen_evt( `AT SELECTION-SCREEN` ).
|
||||
|
||||
IF number2 = 0 AND
|
||||
divide = 'X'.
|
||||
MESSAGE 'Event AT SELECTION-SCREEN is called. Zero division is not possible.' TYPE 'E'.
|
||||
ENDIF.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
"Called during the processing of an executable program after selection
|
||||
"screen processing
|
||||
|
||||
"SET USER-COMMAND: The following statement is included for demonstration
|
||||
"purposes. It programmatically raises a list event with a specified function
|
||||
"code.
|
||||
"Such a statement can be used when creating a list. After the list has been
|
||||
"created, but before the current list is displayed, the runtime
|
||||
"framework responds as if a user action had been performed in the
|
||||
"displayed list with the specified function code.
|
||||
SET USER-COMMAND 'START'.
|
||||
|
||||
demo=>sel_screen_evt( `START-OF-SELECTION` ).
|
||||
|
||||
WRITE / 'This is the basic list showing the content of a log table (mostly reporting and selection screen events). Double-click a line in this list to display more events in a details list.' COLOR 4.
|
||||
SKIP.
|
||||
WRITE / '************************** Calculation result **************************' COLOR 2.
|
||||
|
||||
IF plus = 'X'.
|
||||
WRITE / |{ number1 } + { number2 } = { number1 + number2 }|.
|
||||
ENDIF.
|
||||
|
||||
IF minus = 'X'.
|
||||
WRITE / |{ number1 } - { number2 } = { number1 - number2 }|.
|
||||
ENDIF.
|
||||
|
||||
IF multiply = 'X'.
|
||||
TRY.
|
||||
WRITE / |{ number1 } * { number2 } = { number1 * number2 }|.
|
||||
CATCH cx_sy_arithmetic_error INTO DATA(error).
|
||||
WRITE / |{ number1 } * { number2 } = ??? Error in multiplication: { error->get_text( ) }| COLOR COL_NEGATIVE.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
IF divide = 'X'.
|
||||
TRY.
|
||||
WRITE / |{ number1 } / { number2 } = { CONV decfloat34( number1 / number2 ) DECIMALS = 3 }|.
|
||||
IF number1 = 0 AND number2 = 0.
|
||||
WRITE / `No zero division error? Note that ABAP "allows" zero division if the first number is also 0 :)` COLOR COL_NEGATIVE.
|
||||
ENDIF.
|
||||
CATCH cx_sy_zerodivide INTO error.
|
||||
WRITE / |{ number1 } / { number2 } = ??? Error in division: { error->get_text( ) }| COLOR COL_NEGATIVE.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
IF reporting_and_selscr_log IS NOT INITIAL.
|
||||
demo=>write_rep_sel_log( ).
|
||||
ENDIF.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT LINE-SELECTION.
|
||||
|
||||
"Called when
|
||||
"- a screen list is displayed and
|
||||
"- the screen cursor is on a list line and
|
||||
"- a function is selected using the function code PICK
|
||||
|
||||
demo=>list_evt( evt = `AT LINE-SELECTION` ).
|
||||
|
||||
"SET USER-COMMAND: The following statement is included for demonstration
|
||||
"purposes. It programmatically raises a list event with a specified function
|
||||
"code.
|
||||
SET USER-COMMAND 'LINE'.
|
||||
|
||||
IF sy-lsind <= 1.
|
||||
WRITE / 'This is a details list. It shows the content of another log table (mostly list events). Clicking in this list does nothing meaningful.' COLOR 4.
|
||||
WRITE / 'You may want to go back to the basic list, double-click a line there to come back here, and see more log entries added for list events.' COLOR 4.
|
||||
WRITE / 'When the counter reaches 40, the program is restarted :)' COLOR 4.
|
||||
SKIP.
|
||||
WRITE / `************** Some sy Components **************` COLOR 2.
|
||||
WRITE / |Content of clicked line (sy-lisel): "{ sy-lisel }"|.
|
||||
WRITE / |Number of clicked line (sy-lilli): "{ sy-lilli }"|.
|
||||
WRITE / |List level of the current list (sy-lsind): "{ sy-lsind }"|.
|
||||
SKIP.
|
||||
IF list_log IS NOT INITIAL.
|
||||
demo=>write_list_log( ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT USER-COMMAND.
|
||||
|
||||
"Called when a function with a user-defined function code is selected when a screen list is displayed
|
||||
"Note: PICK does not raised the AT USER-COMMAND event. Instead, it raises the AT LINE-SELECTION event.
|
||||
|
||||
CASE sy-ucomm.
|
||||
WHEN 'START'.
|
||||
demo=>list_evt( `AT USER-COMMAND (Function code: START)` ).
|
||||
MESSAGE |AT USER-COMMAND event raised (Function code: START). Counter value: { counter }.| TYPE 'I'.
|
||||
WHEN 'LINE'.
|
||||
demo=>list_evt( `AT USER-COMMAND (Function code: LINE)` ).
|
||||
MESSAGE |AT USER-COMMAND event raised (Function code: LINE). Counter value: { counter }.| TYPE 'I'.
|
||||
IF counter >= 40.
|
||||
MESSAGE |The counter has reached the threshold. The program will be started again using a SUBMIT statement.| TYPE 'I'.
|
||||
SUBMIT (sy-repid) VIA SELECTION-SCREEN.
|
||||
ENDIF.
|
||||
ENDCASE.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
TOP-OF-PAGE.
|
||||
|
||||
"Called when a basic list is created and when a new page begins
|
||||
|
||||
tstmp = utclong_current( ).
|
||||
demo=>counter( ).
|
||||
APPEND VALUE #( id = counter event_block = |TOP-OF-PAGE| time = tstmp ) TO list_log.
|
||||
WRITE: / |********************* Title inserted at TOP-OF-PAGE event ({ counter }) *********************|.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
TOP-OF-PAGE DURING LINE-SELECTION.
|
||||
|
||||
"Called when details lists are created
|
||||
|
||||
tstmp = utclong_current( ).
|
||||
demo=>counter( ).
|
||||
APPEND VALUE #( id = counter event_block = |TOP-OF-PAGE DURING LINE-SELECTION| time = tstmp ) TO list_log.
|
||||
WRITE: / |********************* Title inserted at TOP-OF-PAGE DURING LINE-SELECTION event ({ counter }) *********************|.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
END-OF-PAGE.
|
||||
|
||||
"Called when the end of a page is reached, for example, if the specified number of lines in the
|
||||
"LINE-COUNT addition has been reached
|
||||
|
||||
tstmp = utclong_current( ).
|
||||
demo=>counter( ).
|
||||
APPEND VALUE #( id = counter event_block = |END-OF-PAGE| time = tstmp ) TO list_log.
|
||||
WRITE: / |********************* Footer inserted at END-OF-PAGE event ({ counter }) *********************|.
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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_EVENT_BLOCKS</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>Event blocks (ABAP cheat sheet: Selection Screens/Classic Lists)</ENTRY>
|
||||
<LENGTH>64</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
515
src/test_abap_cheat_sheets_classic/zdemo_abap_lists.prog.abap
Normal file
515
src/test_abap_cheat_sheets_classic/zdemo_abap_lists.prog.abap
Normal file
@@ -0,0 +1,515 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
* Example: Classic lists
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* Example that demonstrates various ABAP statements in the context of
|
||||
* classic lists
|
||||
* Includes:
|
||||
* - Creating lists: WRITE, FORMAT, ULINE, SET BLANK LINES, SKIP,
|
||||
* NEW-LINE, HIDE, HOTSPOT, RESERVE/BACK
|
||||
* - Reading and modifying in lists: READ LINE, MODIFY LINE
|
||||
*
|
||||
* Notes:
|
||||
* - A selection of additions is used. For more additions and details,
|
||||
* see the ABAP Keyword Documentation.
|
||||
* - See the ABAP cheat sheet for other statements used here, for example,
|
||||
* the ones related to event blocks such as START-OF-SELECTION.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
PROGRAM.
|
||||
|
||||
TYPES: BEGIN OF str,
|
||||
statement TYPE string,
|
||||
line_content TYPE string,
|
||||
END OF str.
|
||||
|
||||
DATA: count TYPE i,
|
||||
line LIKE sy-linno,
|
||||
linno1 LIKE sy-linno,
|
||||
linno2 LIKE sy-linno,
|
||||
linno_int LIKE sy-linno,
|
||||
linno_copy LIKE sy-linno,
|
||||
linno_mod1 LIKE sy-linno,
|
||||
linno_mod2 LIKE sy-linno,
|
||||
linno_input LIKE sy-linno,
|
||||
lisel_copy LIKE sy-lisel,
|
||||
square TYPE i,
|
||||
cube TYPE i,
|
||||
int_for_back LIKE sy-colno,
|
||||
itab TYPE string_table,
|
||||
str_tab TYPE string_table,
|
||||
lisel_tab TYPE string_table,
|
||||
str TYPE string,
|
||||
input_int TYPE c LENGTH 3 VALUE 3,
|
||||
read_line TYPE c LENGTH 1,
|
||||
num TYPE i,
|
||||
char TYPE c LENGTH 10,
|
||||
tab TYPE TABLE OF str WITH EMPTY KEY,
|
||||
var LIKE input_int,
|
||||
int TYPE i,
|
||||
li LIKE LINE OF tab,
|
||||
chck1 TYPE c LENGTH 1 VALUE 'X',
|
||||
chck2 TYPE c LENGTH 1 VALUE ' ',
|
||||
input TYPE c LENGTH 20 VALUE 'Make an entry here',
|
||||
dc34 TYPE decfloat34 VALUE ' 1.2345 ',
|
||||
txt TYPE string VALUE `abap`,
|
||||
some_text TYPE string VALUE `Hi, `,
|
||||
abc TYPE c LENGTH 5 VALUE 'abcde',
|
||||
dc TYPE decfloat34 VALUE '1.2345'.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
INITIALIZATION.
|
||||
|
||||
itab = VALUE #( ( `a` ) ( `b` ) ( `` ) ( `` ) ( `c` ) ).
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
"WRITE using an unnamed data object
|
||||
WRITE 'Hello ABAP.'.
|
||||
"Named data objects
|
||||
"Note: The text is written right after the previous text in one line.
|
||||
WRITE some_text && sy-uname.
|
||||
|
||||
WRITE / '****************** WRITE: Positioning output ******************'.
|
||||
"/: Writes to a new line
|
||||
WRITE / 'new line'.
|
||||
"Specifying the output position (and output in new line)
|
||||
WRITE /5 'positioned'.
|
||||
"Specifying the length, no position specified means the output is
|
||||
"written from the first column on
|
||||
WRITE /(3) 'not displayed completely'.
|
||||
"Specifying both length and position
|
||||
WRITE /5(30) 'this is displayed completely'.
|
||||
"Position/length only specified as numeric literals as above, then the
|
||||
"addition AT can be omitted
|
||||
WRITE AT /3(12) 'lorem ipsum'.
|
||||
"Length specifications with * or **. In that case, the output length
|
||||
"depends on the data type of the data object. There are special rules.
|
||||
"See the ABAP Kwyword Documentation for the details.
|
||||
WRITE /(*) dc34.
|
||||
WRITE /1(**) dc34.
|
||||
|
||||
WRITE / '****************** WRITE: Further specification options ******************'.
|
||||
"There are many further specification options, among them function calls, string
|
||||
"expressions, method calls to be specified after WRITE.
|
||||
|
||||
"String template
|
||||
WRITE / |{ txt WIDTH = 20 ALIGN = RIGHT CASE = UPPER }|.
|
||||
"The following statement uses a chained statement with colon.
|
||||
WRITE: / |{ 1 + 2 }|, "String template includes an arithmetic calculation
|
||||
/ to_upper( txt ). "Function call
|
||||
"Concatenation using &&
|
||||
WRITE / `conc` && `atenated`.
|
||||
"Method call (returns a random integer between 1 and 10)
|
||||
"Note the * specification. The returned value is of type i. Specifying *
|
||||
"for the length means the length required to output the current value
|
||||
"is used. You may want to try the following code snippet by removing (*).
|
||||
WRITE /(*) cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( )
|
||||
min = 1
|
||||
max = 10 )->get_next( ).
|
||||
|
||||
WRITE / '****************** WRITE: UNDER addition ******************'.
|
||||
"UNDER: Puts the output in the position of previous output
|
||||
"Note: If the output is written in the same line in which the previous output
|
||||
"is displayed, this output is overwritten.
|
||||
|
||||
WRITE /5(5) abc.
|
||||
WRITE / 'fghij' UNDER abc.
|
||||
|
||||
WRITE / '****************** WRITE: NO-GAP addition ******************'.
|
||||
WRITE / 'g'.
|
||||
WRITE 'ap1'. "Output: g ap1
|
||||
WRITE: / 'g' NO-GAP, 'ap2'. "Output: gap2
|
||||
|
||||
WRITE / '****************** WRITE: QUICKINFO addition ******************'.
|
||||
"QUICKINFO: Creates a tooltip for the output
|
||||
WRITE / 'Hover over the following output and check the tooltip:'.
|
||||
WRITE: (*) sy-uname QUICKINFO 'User name',
|
||||
'/',
|
||||
(*) sy-datum QUICKINFO 'Current date',
|
||||
'/',
|
||||
(*) sy-uzeit QUICKINFO 'Current time'.
|
||||
|
||||
WRITE / '****************** WRITE: Special list elements ******************'.
|
||||
"INPUT
|
||||
WRITE / input INPUT.
|
||||
linno_input = sy-linno.
|
||||
|
||||
"AS CHECKBOX
|
||||
"The value (blank, X) is stored in the list buffer and can be evaluated during
|
||||
"a list event.
|
||||
WRITE: / chck1 AS CHECKBOX, 'Checkbox 1',
|
||||
/ chck2 AS CHECKBOX, 'Checkbox 2'.
|
||||
|
||||
"AS ICON: Outputting icons
|
||||
"Check the type pool ICON for names of predefined icons.
|
||||
WRITE / icon_green_light AS ICON.
|
||||
WRITE / icon_red_light AS ICON.
|
||||
WRITE / icon_yellow_light AS ICON.
|
||||
WRITE / icon_activate AS ICON.
|
||||
|
||||
"AS SYMBOL: Outputting symbols
|
||||
"Check the type pool SYM for names of predefined icons.
|
||||
WRITE / sym_left_hand AS SYMBOL.
|
||||
WRITE / sym_caution AS SYMBOL.
|
||||
|
||||
"AS LINE: Outputting corners, crosses, lines, and T sections
|
||||
"Check the type pool LINE for names of predefined icons.
|
||||
WRITE: /10 line_horizontal_line AS LINE NO-GAP,
|
||||
line_space AS LINE NO-GAP,
|
||||
line_vertical_line AS LINE NO-GAP.
|
||||
|
||||
WRITE / '****************** WRITE: Formatting options ******************'.
|
||||
"The following examples show a selection. Various other additions are
|
||||
"available that deal with currency, unit, date and time-related formatting,
|
||||
"among others. See the ABAP Keyword Documentation.
|
||||
WRITE /(10) 'X' RIGHT-JUSTIFIED.
|
||||
WRITE /(10) 'X' CENTERED.
|
||||
WRITE /(10) ` X`.
|
||||
WRITE /(10) ` X` LEFT-JUSTIFIED.
|
||||
WRITE /(*) dc DECIMALS 2.
|
||||
|
||||
"Colors
|
||||
"The commented out value stands for the value that can also be directly
|
||||
"specified in the syntax (except 0) or contained in a data object.
|
||||
"There are several additions with many options.
|
||||
WRITE / 'COL_BACKGROUND (0)' COLOR COL_BACKGROUND. "0 (GUI dependent)
|
||||
WRITE / 'COL_HEADING (1)' COLOR COL_HEADING. "1 (gray-blue)
|
||||
WRITE / 'COL_HEADING (1)' COLOR 1.
|
||||
WRITE / 'COL_NORMAL (2)' COLOR COL_NORMAL. "2 (light gray)
|
||||
|
||||
WRITE / 'COL_TOTAL (3)' COLOR COL_TOTAL. "3 (yellow)
|
||||
WRITE / 'COL_KEY (4)' COLOR COL_KEY. "4 (blue-green)
|
||||
WRITE / 'COL_POSITIVE (5)' COLOR COL_POSITIVE. "5 (green)
|
||||
WRITE / 'COL_NEGATIVE (6)' COLOR COL_NEGATIVE. "6 (red)
|
||||
WRITE / 'COL_GROUP (7)' COLOR COL_GROUP. "7 (purple/orange)
|
||||
WRITE / 'COLOR 7 OFF' COLOR 7 OFF. "default color
|
||||
|
||||
"Setting the intensity of the background color.
|
||||
WRITE / 'COLOR 7 INTENSIFIED OFF' COLOR 7 INTENSIFIED OFF.
|
||||
|
||||
"INVERSE: When ON, the foreground, i.e. the output is displayed
|
||||
"in the selected color.
|
||||
WRITE / 'COLOR 7 INVERSE ON' COLOR 7 INVERSE ON.
|
||||
|
||||
WRITE / '****************** FORMAT ******************'.
|
||||
"FORMAT: For applying settings (COLOR, INTENSIFIED, INVERSE ...)
|
||||
"on all of the following output statements up to a definition
|
||||
"with new settings
|
||||
|
||||
WRITE / '****************** FORMAT: FRAMES addition ******************'.
|
||||
"FRAMES: Defines whether the - and | characters are converted to line elements,
|
||||
"producing continuous lines.
|
||||
FORMAT FRAMES ON.
|
||||
WRITE: / '----',
|
||||
/ '| |',
|
||||
/ '----'.
|
||||
FORMAT FRAMES OFF.
|
||||
|
||||
WRITE / '****************** FORMAT: COLOR addition ******************'.
|
||||
|
||||
"This example shows the already covered COLOR addition with FORMAT
|
||||
"statements.
|
||||
FORMAT COLOR COL_POSITIVE.
|
||||
WRITE / 'ABC'.
|
||||
WRITE / 'DEF'.
|
||||
WRITE / 'GHI'.
|
||||
FORMAT COLOR OFF.
|
||||
WRITE / 'This is the first WRITE after a new setting with FORMAT ... OFF'.
|
||||
|
||||
WRITE / '****************** FORMAT: RESET addition ******************'.
|
||||
"This addition sets all formatting settings for which the corresponding addition is
|
||||
"not specified in the same FORMAT statement to the state OFF (exception: FRAMES).
|
||||
"In the following example, note the effect of the RESET addition (apart from
|
||||
"resetting the previously set COLOR and INVERSE addition:
|
||||
"- INTENSIFIED ON is the state after the program start by default.
|
||||
"- Now, with the reset, the state is INTENSIFIED OFF.
|
||||
"- See the effect for all the WRITE statements that follow and that have
|
||||
" the COLOR addition specified.
|
||||
FORMAT COLOR 7 INVERSE ON.
|
||||
WRITE / 'ABC'.
|
||||
WRITE / 'DEF'.
|
||||
FORMAT RESET.
|
||||
WRITE / 'GHI'.
|
||||
WRITE / 'JKL'.
|
||||
|
||||
WRITE / '****************** ULINE ******************'.
|
||||
"ULINE: Creating a horizontal line
|
||||
ULINE.
|
||||
"More additions are available such as for the position and length.
|
||||
ULINE AT 5(20).
|
||||
|
||||
WRITE / '****************** SET BLANK LINES ******************'.
|
||||
"SET BLANK LINES: Specifying if blank lines created using WRITE are displayed
|
||||
WRITE / 'SET BLANK LINES OFF.' COLOR 2.
|
||||
SET BLANK LINES OFF.
|
||||
LOOP AT itab INTO DATA(wa).
|
||||
WRITE / wa.
|
||||
ENDLOOP.
|
||||
|
||||
WRITE / 'SET BLANK LINES ON.' COLOR 3.
|
||||
SET BLANK LINES ON.
|
||||
LOOP AT itab INTO wa.
|
||||
WRITE / wa.
|
||||
ENDLOOP.
|
||||
|
||||
ULINE.
|
||||
|
||||
WRITE / '****************** SKIP ******************'.
|
||||
"SKIP: Positions the list cursor explicitly
|
||||
WRITE / 'SKIP' COLOR 4.
|
||||
SKIP.
|
||||
WRITE / 'SKIP 3' COLOR 5.
|
||||
SKIP 3.
|
||||
ULINE.
|
||||
WRITE / 'SKIP TO LINE' COLOR 6.
|
||||
WRITE / 'Text A'.
|
||||
WRITE / 'Text B'.
|
||||
line = sy-linno. "The line number of the previous output is retrieved.
|
||||
WRITE / 'Text C'.
|
||||
SKIP TO LINE line.
|
||||
WRITE / 'Text D' COLOR 7.
|
||||
WRITE / 'Text E'.
|
||||
ULINE.
|
||||
|
||||
WRITE / '****************** NEW-LINE ******************'.
|
||||
"NEW-LINE: Setting list cursor to the first position of the next line.
|
||||
"Additions are available to affect the scrolling behavior.
|
||||
WRITE / 'Next statement is NEW-LINE'.
|
||||
NEW-LINE.
|
||||
WRITE 'WRITE statement without /'.
|
||||
ULINE.
|
||||
|
||||
WRITE / '****************** HIDE/HOTSPOT ******************'.
|
||||
"The example contains a DO loop. In this loop, WRITE statements output
|
||||
"the sy-index value (1 to 10). Based on the sy-index value, calculations
|
||||
"are performed. The result is hidden using HIDE. When you click a line
|
||||
"in the basic list in this very section, the hidden values are displayed
|
||||
"in the details list.
|
||||
WRITE / 'For the values of square and cube, click a line in this section.'.
|
||||
linno1 = sy-linno.
|
||||
FORMAT HOTSPOT ON.
|
||||
DO 10 TIMES.
|
||||
square = sy-index ** 2.
|
||||
cube = sy-index ** 3.
|
||||
WRITE / sy-index.
|
||||
"Storing the content of a the variables together with the current list line.
|
||||
HIDE: square, cube.
|
||||
ENDDO.
|
||||
FORMAT HOTSPOT OFF.
|
||||
linno2 = sy-linno.
|
||||
|
||||
WRITE / '****************** RESERVE/BACK ******************'.
|
||||
"RESERVE is demonstrated here with BACK.
|
||||
"Consider the RESERVE 5 LINES statements as defining a block of
|
||||
"5 lines. When using BACK after RESERVE, e.g. after a loop, you
|
||||
"can put the suqsequent output to the first line of this block of lines.
|
||||
WRITE / 'RESERVE without BACK:'.
|
||||
int_for_back = sy-colno.
|
||||
ULINE AT /(int_for_back).
|
||||
|
||||
RESERVE 5 LINES.
|
||||
|
||||
DO 5 TIMES.
|
||||
WRITE / sy-index.
|
||||
ENDDO.
|
||||
|
||||
int_for_back = sy-colno.
|
||||
|
||||
WRITE AT int_for_back ' <- This is not number 1.'.
|
||||
SKIP.
|
||||
|
||||
WRITE / 'RESERVE with BACK:'.
|
||||
int_for_back = sy-colno.
|
||||
ULINE AT /(int_for_back).
|
||||
|
||||
RESERVE 5 LINES.
|
||||
|
||||
DO 5 TIMES.
|
||||
WRITE / sy-index.
|
||||
ENDDO.
|
||||
|
||||
int_for_back = sy-colno.
|
||||
|
||||
BACK.
|
||||
WRITE AT int_for_back ' <- This should be number 1.'.
|
||||
|
||||
SKIP 5.
|
||||
|
||||
WRITE / '****************** READ LINE ******************'.
|
||||
"READ LINE: Assigning the content of a line stored in the
|
||||
"list buffer to the system field sy-lisel. Plus, it allows
|
||||
"other target fields to be specified.
|
||||
|
||||
"In the example, you can provide an integer in an input field
|
||||
"on whose basis a READ LINE statement is executed.
|
||||
|
||||
WRITE / 'Insert a number representing a line number from which to read: '.
|
||||
FORMAT INPUT.
|
||||
WRITE / input_int.
|
||||
linno_int = sy-linno.
|
||||
FORMAT INPUT OFF.
|
||||
|
||||
WRITE / '****************** MODIFY LINE ******************'.
|
||||
"MODIFY LINE: Overwrites a line stored in the list buffer with the
|
||||
"content of the sy-lisel system field Plus, it allows additional
|
||||
"modifications.
|
||||
|
||||
"In the example, you can click 7 times in the very section on whose
|
||||
"basis a MODIFY LINE statement is executed.
|
||||
WRITE / 'Click 7 times on any line in this section starting from "1 A" to explore the effect of MODIFY LINE statements.'.
|
||||
|
||||
SKIP.
|
||||
linno_mod1 = sy-linno.
|
||||
DO 10 TIMES.
|
||||
num += 1.
|
||||
char &&= 'A'.
|
||||
WRITE /10(*) num.
|
||||
WRITE 15 char.
|
||||
ENDDO.
|
||||
linno_mod2 = sy-linno.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT LINE-SELECTION.
|
||||
|
||||
"The purpose of the following implementation is to avoid multiple
|
||||
"details lists when clicking lines.
|
||||
|
||||
IF sy-lsind = 1
|
||||
AND sy-lilli BETWEEN linno_mod1 AND linno_mod2.
|
||||
|
||||
CASE count.
|
||||
WHEN 0.
|
||||
MODIFY CURRENT LINE LINE VALUE FROM 'Overwritten'.
|
||||
WHEN 1.
|
||||
MODIFY CURRENT LINE FIELD VALUE char FROM 'BBBB'.
|
||||
WHEN 2.
|
||||
MODIFY CURRENT LINE FIELD VALUE num FROM '#' char FROM 'CCCC'.
|
||||
WHEN 3.
|
||||
MODIFY CURRENT LINE FIELD FORMAT char COLOR 3.
|
||||
WHEN 4.
|
||||
MODIFY CURRENT LINE LINE FORMAT COLOR 4.
|
||||
WHEN 5.
|
||||
MODIFY CURRENT LINE FIELD FORMAT num COLOR 5 char COLOR 6
|
||||
LINE FORMAT COLOR 7.
|
||||
WHEN 6.
|
||||
linno_copy = linno_mod1.
|
||||
WHILE linno_copy <= linno_mod2.
|
||||
MODIFY LINE linno_copy LINE VALUE FROM ':)' LINE FORMAT COLOR 3.
|
||||
linno_copy += 1.
|
||||
IF sy-index = 11.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
ENDWHILE.
|
||||
WHEN OTHERS.
|
||||
EXIT.
|
||||
ENDCASE.
|
||||
count += 1.
|
||||
|
||||
ELSEIF sy-lsind = 1
|
||||
AND sy-lilli NOT BETWEEN linno_mod1 AND linno_mod2.
|
||||
WRITE / `************************ Information about the line you clicked ************************` COLOR 7 INTENSIFIED OFF.
|
||||
SKIP.
|
||||
WRITE / |Line content (sy-lisel): "{ sy-lisel }"|.
|
||||
WRITE / |Line number (sy-lilli): "{ sy-lilli }"|.
|
||||
SKIP.
|
||||
ULINE.
|
||||
SKIP.
|
||||
WRITE / `************************ HIDE statements ************************` COLOR 7 INTENSIFIED OFF.
|
||||
SKIP.
|
||||
|
||||
IF sy-lilli NOT BETWEEN linno1 + 1 AND linno2.
|
||||
WRITE / |You have clicked on line { sy-lilli } and not on a line between line { linno1 + 1 } and line { linno2 }.|.
|
||||
WRITE / `For exploring the effect of HIDE and displaying the values of 'square' and 'cube', click a line in the HIDE/HOTSPOT section of the basic list.`.
|
||||
ELSE.
|
||||
WRITE: / |square: { square }|.
|
||||
WRITE: / |cube: { cube }|.
|
||||
ENDIF.
|
||||
|
||||
"READ LINE
|
||||
CLEAR str_tab.
|
||||
CLEAR lisel_tab.
|
||||
SKIP.
|
||||
ULINE.
|
||||
SKIP.
|
||||
WRITE / `************************ READ LINE statements ************************` COLOR 7 INTENSIFIED OFF.
|
||||
SKIP.
|
||||
|
||||
READ CURRENT LINE.
|
||||
IF sy-subrc <> 0.
|
||||
lisel_copy = sy-lisel.
|
||||
APPEND VALUE #( statement = |READ CURRENT LINE. (sy-lisel contains line content)| line_content = |ERROR: Line does not exist| ) TO tab.
|
||||
ELSE.
|
||||
lisel_copy = sy-lisel.
|
||||
APPEND VALUE #( statement = |READ CURRENT LINE. (sy-lisel contains line content)| line_content = |sy-lisel: "{ lisel_copy }"| ) TO tab.
|
||||
ENDIF.
|
||||
|
||||
"Put the entire line content (current line) of the read result in a data object
|
||||
READ CURRENT LINE LINE VALUE INTO str.
|
||||
IF sy-subrc <> 0.
|
||||
APPEND VALUE #( statement = `READ CURRENT LINE LINE VALUE INTO ...` line_content = `ERROR: Line does not exist` ) TO tab.
|
||||
ELSE.
|
||||
APPEND VALUE #( statement = `READ CURRENT LINE LINE VALUE INTO ...` line_content = |str: "{ lisel_copy }"| ) TO tab.
|
||||
ENDIF.
|
||||
|
||||
"Specific line
|
||||
TRY.
|
||||
"Put concrete field values (specified line) of the read result in data objects
|
||||
READ LINE linno_int FIELD VALUE input_int INTO var.
|
||||
APPEND VALUE #( statement = |READ LINE { linno_int } FIELD VALUE ... INTO var. (Line of the input field)| line_content = |var: "{ var }"| ) TO tab.
|
||||
int = var.
|
||||
|
||||
"Read entire line content
|
||||
READ LINE int.
|
||||
IF sy-subrc = 0.
|
||||
lisel_copy = sy-lisel.
|
||||
APPEND VALUE #( statement = |READ LINE { int }. (sy-lisel contains line content)| line_content = |sy-lisel: "{ lisel_copy }"| ) TO tab.
|
||||
ELSE.
|
||||
APPEND VALUE #( statement = |READ LINE { int }.| line_content = |ERROR: Line { int } does not exist| ) TO tab.
|
||||
ENDIF.
|
||||
CATCH cx_root.
|
||||
APPEND VALUE #( statement = |READ LINE { var }.| line_content = |ERROR: That statement does not work. Insert an integer value.| ) TO tab.
|
||||
ENDTRY.
|
||||
|
||||
IF tab IS NOT INITIAL.
|
||||
LOOP AT tab INTO li.
|
||||
WRITE: / li-statement COLOR 2,
|
||||
/ li-line_content.
|
||||
SKIP.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
CLEAR: tab, input, str.
|
||||
|
||||
ULINE.
|
||||
SKIP.
|
||||
WRITE / `************************ MODIFY LINE statements ************************` COLOR 7 INTENSIFIED OFF.
|
||||
SKIP.
|
||||
WRITE / `To explore MODIFY LINE statements, click the lines in the MODIFY LINE section of the basic list.`.
|
||||
SKIP.
|
||||
ENDIF.
|
||||
23
src/test_abap_cheat_sheets_classic/zdemo_abap_lists.prog.xml
Normal file
23
src/test_abap_cheat_sheets_classic/zdemo_abap_lists.prog.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?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_LISTS</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>Classic Lists (ABAP Cheat Sheet: Selection Screens/Classic Lists)</ENTRY>
|
||||
<LENGTH>65</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
@@ -0,0 +1,100 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
*
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* This program can be used for starting the selection screen and
|
||||
* classic list programs contained in the repository.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
PROGRAM.
|
||||
|
||||
TYPES: BEGIN OF reps_str,
|
||||
number TYPE i,
|
||||
report LIKE sy-repid,
|
||||
END OF reps_str.
|
||||
|
||||
DATA: rep LIKE sy-repid,
|
||||
reports TYPE TABLE OF reps_str WITH EMPTY KEY,
|
||||
allowed TYPE string.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF BLOCK bl WITH FRAME TITLE title.
|
||||
SELECTION-SCREEN BEGIN OF LINE.
|
||||
SELECTION-SCREEN COMMENT (25) lbl FOR FIELD report.
|
||||
PARAMETERS report TYPE i AS LISTBOX VISIBLE LENGTH 60.
|
||||
SELECTION-SCREEN END OF LINE.
|
||||
SELECTION-SCREEN END OF BLOCK bl.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
INITIALIZATION.
|
||||
title = 'Select and run a program'.
|
||||
lbl = 'Program:'.
|
||||
|
||||
reports = VALUE #(
|
||||
( number = 1 report = 'ZDEMO_ABAP_SELSCR_PARAMETERS' )
|
||||
( number = 2 report = 'ZDEMO_ABAP_SELSCR_SELECT_OPT' )
|
||||
( number = 3 report = 'ZDEMO_ABAP_SELSCR_STANDALONE' )
|
||||
( number = 4 report = 'ZDEMO_ABAP_SELSCR_STMTS_VAR' )
|
||||
( number = 5 report = 'ZDEMO_ABAP_LISTS' )
|
||||
( number = 6 report = 'ZDEMO_ABAP_EVENT_BLOCKS' )
|
||||
).
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN OUTPUT.
|
||||
CALL FUNCTION 'VRM_SET_VALUES'
|
||||
EXPORTING
|
||||
id = CONV vrm_id( 'REPORT' )
|
||||
values = VALUE vrm_values(
|
||||
( key = 1 text = 'Selection screens: PARAMETERS (zdemo_abap_selscr_parameters)' )
|
||||
( key = 2 text = 'Selection screens: SELECT-OPTIONS (zdemo_abap_selscr_select_opt)' )
|
||||
( key = 3 text = 'Selection screens: SELECTION-SCREEN (zdemo_abap_selscr_standalone)' )
|
||||
( key = 4 text = 'Selection screens: SELECTION-SCREEN Variants (zdemo_abap_selscr_stmts_var)' )
|
||||
( key = 5 text = 'Lists: Creating Lists (zdemo_abap_lists)' )
|
||||
( key = 6 text = 'Event blocks (zdemo_abap_event_blocks)' ) ).
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
IF report BETWEEN 1 AND 6.
|
||||
"Dynamic programming check: Only submit program if its name is available
|
||||
"in the allow list
|
||||
TRY.
|
||||
rep = reports[ number = report ]-report.
|
||||
allowed = cl_abap_dyn_prg=>check_whitelist_tab(
|
||||
val = rep
|
||||
whitelist = VALUE #( ( `ZDEMO_ABAP_SELSCR_PARAMETERS` )
|
||||
( `ZDEMO_ABAP_SELSCR_SELECT_OPT` )
|
||||
( `ZDEMO_ABAP_SELSCR_STANDALONE` )
|
||||
( `ZDEMO_ABAP_SELSCR_STMTS_VAR` )
|
||||
( `ZDEMO_ABAP_LISTS` )
|
||||
( `ZDEMO_ABAP_EVENT_BLOCKS` ) ) ).
|
||||
|
||||
SUBMIT (rep) AND RETURN VIA SELECTION-SCREEN.
|
||||
CATCH cx_root INTO DATA(err).
|
||||
MESSAGE |Error: { err->get_text( ) }| TYPE 'E'.
|
||||
ENDTRY.
|
||||
ELSE.
|
||||
MESSAGE 'Please select a program.' TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDIF.
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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_SELSCR_LISTS_INTRO</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>ABAP Cheat Sheet: Selection Screen/Classic List Examples Intro</ENTRY>
|
||||
<LENGTH>62</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
@@ -0,0 +1,224 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
* Example: PARAMETERS statements
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* Example that demonstrates PARAMETERS statements in standard selection
|
||||
* screens
|
||||
*
|
||||
* Notes:
|
||||
* - A selection of additions is used. For more additions and details,
|
||||
* see the ABAP Keyword Documentation.
|
||||
* - The MODIF ID addition is possible for PARAMETERS. This is also true
|
||||
* for SELECTION-SCREEN statements. See the details in that example.
|
||||
* - See the ABAP cheat sheet for other statements used here, for example,
|
||||
* the ones related to event blocks such as START-OF-SELECTION.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
PROGRAM.
|
||||
|
||||
****************************** Type options ******************************
|
||||
|
||||
"Displaying some explanatory text on the standard selection screen
|
||||
"The actual text content is assigned to the variable in the INITIALIZATION
|
||||
"event block.
|
||||
SELECTION-SCREEN COMMENT /1(70) t1.
|
||||
|
||||
"Referring to a built-in type with TYPE
|
||||
"In this case, a variable length character string can be inserted in the
|
||||
"generated input field. Note the LOWER CASE addition further down.
|
||||
PARAMETERS p_str TYPE string.
|
||||
|
||||
"Referring to an existing data object with the LIKE addition.
|
||||
"When referencing to a data type from the ABAP Dictionary after LIKE,
|
||||
"you can benefit from things such as input help (if available).
|
||||
DATA dobj TYPE i.
|
||||
PARAMETERS plikedo LIKE dobj.
|
||||
|
||||
"Dynamic spefication of data object in parentheses after LIKE
|
||||
"You can reference to a data type from the ABAP Dictionary. some_dobj in
|
||||
"the example may be the name of a component of a database table,
|
||||
"provided in capital letters.
|
||||
DATA some_dobj TYPE c LENGTH 50 VALUE 'ZDEMO_ABAP_CARR-CARRID'.
|
||||
PARAMETERS p_dyn LIKE (some_dobj).
|
||||
|
||||
"Length specifications
|
||||
"Similar to declarations with DATA, the length can be specified for data
|
||||
"types with generic length (i.e. the types c, n, p, and x).
|
||||
PARAMETERS p_c1 TYPE c LENGTH 1.
|
||||
PARAMETERS p_n5 TYPE n LENGTH 5.
|
||||
|
||||
"You may also see specifications in which the length is specified in parentheses.
|
||||
"For better readability, specifying LENGTH explicitly is recommended.
|
||||
PARAMETERS pbracket(2) TYPE c.
|
||||
"No length specified means LENGTH 1 by default
|
||||
PARAMETERS p_no_len TYPE c.
|
||||
"No explicit type specification means TYPE c by default
|
||||
PARAMETERS plenonl1(40).
|
||||
PARAMETERS plenonl2 LENGTH 40.
|
||||
"No explicit type and length specification means TYPE c LENGTH 1 by default
|
||||
PARAMETERS pnothing.
|
||||
|
||||
****************************** Value options ******************************
|
||||
|
||||
SELECTION-SCREEN COMMENT /1(70) t2.
|
||||
|
||||
"DEFAULT: Defining a start value (can also be a data object instead of a literal)
|
||||
PARAMETERS pdefault TYPE i DEFAULT 12345.
|
||||
|
||||
"LOWER CASE: Prevents the effect of capitalizing the entry made when the content
|
||||
"is transported to the data object
|
||||
PARAMETERS p_upper TYPE string DEFAULT `Hello World`. "Value you insert will be capitalized.
|
||||
PARAMETERS p_lower TYPE string DEFAULT `Hello World` LOWER CASE.
|
||||
|
||||
"Note: There are more additions available, e.g. for linking the parameter to search help,
|
||||
"or checking against fixed values defined in the domain of the data type, and so on.
|
||||
"You can also perform your custom input checks in event blocks.
|
||||
|
||||
****************************** Screen options ******************************
|
||||
|
||||
SELECTION-SCREEN COMMENT /1(70) t3.
|
||||
|
||||
"OBLIGATORY: Declaring the input field as a required field
|
||||
"If there is no entry, the program cannot proceed when choosing Execute.
|
||||
"A message is displayed.
|
||||
PARAMETERS p_oblig TYPE string OBLIGATORY.
|
||||
|
||||
"NO-DISPLAY: Hiding the input field on the selection screen
|
||||
"A value can be supplied when calling the program with SUBMIT and the WITH addition.
|
||||
"Note that with the NO-DISPLAY addition, the parameter can have any data types except
|
||||
"for reference/enumerated types, unlike in the other additions which require flat
|
||||
"types (except type string).
|
||||
PARAMETERS p_nodisp TYPE string NO-DISPLAY.
|
||||
|
||||
"VISIBLE LENGTH: Defining the visible length of the field
|
||||
PARAMETERS p_vislen TYPE c LENGTH 5 VISIBLE LENGTH 3.
|
||||
|
||||
"AS CHECKBOX: Displaying input fields as checkbox
|
||||
"Type c and length 1 is expected, but the explicit length specification is not allowed.
|
||||
"The checkbox is selected if the value has the value X or x.
|
||||
PARAMETERS p_check1 AS CHECKBOX. "Implicit type c
|
||||
"Explicit type specification (but no explicit length), select by default
|
||||
PARAMETERS p_check2 TYPE c AS CHECKBOX DEFAULT 'X'.
|
||||
|
||||
"RADIOBUTTON GROUP: Defining a radio button group for parameters
|
||||
"Note:
|
||||
"- Group name can have a maximum of four characters
|
||||
"- Regarding the data type, the same applies as for AS CHECKBOX
|
||||
"- Only one parameter can be defined with the DEFAULT addition
|
||||
"- If DEFAULT is not specified, the first parameter of the group is set to the value X
|
||||
"- You can also use chained statements
|
||||
PARAMETERS: p_radio1 RADIOBUTTON GROUP rbgr,
|
||||
p_radio2 TYPE c RADIOBUTTON GROUP rbgr, "Explicit type specification
|
||||
p_radio3 RADIOBUTTON GROUP rbgr DEFAULT 'X'. "Set this radio button as selected
|
||||
|
||||
"AS LISTBOX VISIBLE LENGTH: Creating a dropdown list box
|
||||
"You can use the function module VRM_SET_VALUES by passing a suitable list at the
|
||||
"events AT SELECTION-SCREEN OUTPUT or AT SELECTION-SCREEN ON VALUE-REQUEST.
|
||||
PARAMETERS plistbox TYPE i AS LISTBOX VISIBLE LENGTH 10 OBLIGATORY.
|
||||
|
||||
*********************** Assigning function codes ***********************
|
||||
|
||||
"The AS CHECKBOX, RADIOBUTTON GROUP, AS LISTBOX additions can be combined
|
||||
"with the addition USER-COMMAND. That means, on selection, the event
|
||||
"AT SELECTION-SCREEN is raised and you can evaluate the function code there.
|
||||
"Note: To enable it, include the statement 'TABLES sscrfields.' in the code.
|
||||
"When the button is clicked, the event AT SELECTION-SCREEN is raised and the
|
||||
"function code ('cmd', 'rbcm' in the example) is passed to the 'ucomm' component
|
||||
"in the interface work area 'sscrfields' which can be evaluated and reacted upon
|
||||
"accordingly.
|
||||
"Before exploring the effect in the example, make entries for the
|
||||
"obligatory input fields first, then choose the checkbox/radio buttons.
|
||||
|
||||
SELECTION-SCREEN COMMENT /1(70) t4.
|
||||
|
||||
TABLES sscrfields.
|
||||
PARAMETERS pchckcmd AS CHECKBOX USER-COMMAND cmd.
|
||||
PARAMETERS: prad1cmd RADIOBUTTON GROUP grp USER-COMMAND rbcm,
|
||||
prad2cmd RADIOBUTTON GROUP grp.
|
||||
|
||||
**********************************************************************
|
||||
INITIALIZATION.
|
||||
|
||||
t1 = 'PARAMETERS: Demonstrating various type options:'.
|
||||
t2 = 'Demonstrating value options:'.
|
||||
t3 = 'Demonstrating screen options:'.
|
||||
t4 = 'Click these screen elements to explore the USER-COMMAND addition.'.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN.
|
||||
|
||||
CASE sscrfields-ucomm.
|
||||
WHEN 'CMD'.
|
||||
MESSAGE |Hallo { sy-uname }.| TYPE 'I'.
|
||||
WHEN 'RBCM'.
|
||||
MESSAGE |Today's date: { sy-datum DATE = ISO }| TYPE 'I'.
|
||||
ENDCASE.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN OUTPUT.
|
||||
|
||||
"This is relevant for the AS LISTBOX VISIBLE LENGTH addition.
|
||||
"Note:
|
||||
"- The function module VRM_SET_VALUES is used
|
||||
"- Column TEXT: What is displayed in the list box
|
||||
"- Colum KEY: When a line is selected, the KEY value is added to the
|
||||
" parameter
|
||||
"In the example, the numbers 1 - 10 are added as values.
|
||||
CALL FUNCTION 'VRM_SET_VALUES'
|
||||
EXPORTING
|
||||
id = CONV vrm_id( 'PLISTBOX' )
|
||||
values = VALUE vrm_values(
|
||||
FOR i = 1 UNTIL i > 10
|
||||
( key = i text = |Value { i }| ) ).
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
"Creating a classic list
|
||||
WRITE / `This list displays the values provided on the selection screen.`.
|
||||
SKIP.
|
||||
WRITE / |p_str: "{ p_str }"| .
|
||||
WRITE / |plikedo: "{ plikedo }"| .
|
||||
WRITE / |p_dyn: "{ p_dyn }"| .
|
||||
WRITE / |p_c1: "{ p_c1 }"| .
|
||||
WRITE / |p_n5: "{ p_n5 }"| .
|
||||
WRITE / |pbracket: "{ pbracket }"| .
|
||||
WRITE / |p_no_len: "{ p_no_len }"| .
|
||||
WRITE / |plenonl1: "{ plenonl1 }"| .
|
||||
WRITE / |plenonl2: "{ plenonl2 }"| .
|
||||
WRITE / |pnothing: "{ pnothing }"| .
|
||||
WRITE / |pdefault: "{ pdefault }"| .
|
||||
WRITE / |p_upper: "{ p_upper }"| .
|
||||
WRITE / |p_lower: "{ p_lower }"| .
|
||||
WRITE / |p_oblig: "{ p_oblig }"| .
|
||||
WRITE / |p_nodisp: "{ p_nodisp }"| .
|
||||
WRITE / |p_vislen: "{ p_vislen }"| .
|
||||
WRITE / |p_check1: "{ p_check1 }"| .
|
||||
WRITE / |p_check2: "{ p_check2 }"| .
|
||||
WRITE / |Radio button selected: "{ COND #( WHEN p_radio1 = 'X' THEN 'p_radio1' WHEN p_radio2 = 'X' THEN 'p_radio2' ELSE 'p_radio3' ) }"| .
|
||||
WRITE / |plistbox: "{ plistbox }"| .
|
||||
WRITE / |pchckcmd: "{ pchckcmd }"| .
|
||||
WRITE / |Radio button selected: "{ COND #( WHEN prad1cmd = 'X' THEN 'prad1cmd' ELSE 'prad2cmd' ) }"| .
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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_SELSCR_PARAMETERS</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>PARAMETERS (ABAP Cheat Sheet: Selection Screens/Classic Lists)</ENTRY>
|
||||
<LENGTH>62</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
@@ -0,0 +1,142 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
* Example: SELECT-OPTIONS statements
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* Example that demonstrates SELECT-OPTIONS statements in standard
|
||||
* selection screens
|
||||
*
|
||||
* Notes:
|
||||
* - A selection of additions is used. For more additions and details,
|
||||
* see the ABAP Keyword Documentation.
|
||||
* - See the ABAP cheat sheet for other statements used here, for example,
|
||||
* the ones related to event blocks such as START-OF-SELECTION.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
PROGRAM.
|
||||
|
||||
DATA int TYPE i.
|
||||
DATA int_tab TYPE TABLE OF i WITH EMPTY KEY.
|
||||
DATA selcriteria TYPE string_table.
|
||||
DATA str TYPE string.
|
||||
FIELD-SYMBOLS <fs> TYPE ANY TABLE.
|
||||
|
||||
"SELECT-OPTIONS statements demonstrating various additions
|
||||
|
||||
"The following statement creates two input fields that can be
|
||||
"used to specify selection criteria on the selection screen.
|
||||
"In addition, the Multiple Selection button is available to
|
||||
"further specify the selection criteria, e.g. what to include,
|
||||
"exclude, etc.. As in all examples, an internal table of type
|
||||
"TYPE RANGE OF whose contents can be evaluated.
|
||||
"The FOR addition is followed by an already declared data object.
|
||||
SELECT-OPTIONS a FOR int.
|
||||
|
||||
"NO-DISPLAY: Hides
|
||||
SELECT-OPTIONS b FOR int NO-DISPLAY.
|
||||
|
||||
"NO-EXTENSION: The Multiple Selection button is not created on
|
||||
"the selection screen
|
||||
SELECT-OPTIONS c FOR int NO-EXTENSION.
|
||||
|
||||
"NO INTERVALS: Only one input field. Intervals can still be
|
||||
"selected using the Multiple Selection button.
|
||||
SELECT-OPTIONS d FOR int NO INTERVALS.
|
||||
|
||||
"Additions can be combined
|
||||
SELECT-OPTIONS e FOR int NO-EXTENSION NO INTERVALS.
|
||||
|
||||
"DEFAULT ... TO ...: Providing start values for the columns in
|
||||
"the first line of the selection table (low and high values)
|
||||
SELECT-OPTIONS f FOR int NO-EXTENSION DEFAULT 3 TO 10.
|
||||
SELECT-OPTIONS g FOR int DEFAULT 5 TO 9.
|
||||
|
||||
"DEFAULT ... OPTION ... SIGN ...: Providing further start values.
|
||||
"See the details in the ABAP cheat sheet.
|
||||
SELECT-OPTIONS h FOR int DEFAULT 4 TO 8 OPTION NB SIGN I.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
INITIALIZATION.
|
||||
|
||||
"Providing start values for data objects
|
||||
"The following internal table is filled and used as a data source
|
||||
"for a SELECT statement.
|
||||
int_tab = VALUE #( FOR i = 1 UNTIL i > 20 ( i ) ).
|
||||
"This table is filled here with the names from above. The table is looped
|
||||
"over in the START-OF-SELECTION event block to cover all SELECT-OPTIONS
|
||||
"from above.
|
||||
selcriteria = VALUE #( ( `A` ) ( `B` ) ( `C` ) ( `D` )
|
||||
( `E` ) ( `F` ) ( `G` ) ( `H` ) ).
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
"Creating a classic list
|
||||
WRITE / `Data was retrieved from an internal table using a SELECT statement based on selection criteria.`.
|
||||
WRITE / `The table has the following content:`.
|
||||
|
||||
LOOP AT int_tab INTO int.
|
||||
WRITE |{ int }|.
|
||||
ENDLOOP.
|
||||
SKIP 2.
|
||||
|
||||
LOOP AT selcriteria INTO str.
|
||||
CASE str.
|
||||
"For historical reasons, the selection table is a table with header line.
|
||||
"Therefore, if you want to address the table content (beyond the use in a
|
||||
"SELECT ... WHERE ... IN ... statement), use the syntax `...[]`.
|
||||
WHEN `A`.
|
||||
ASSIGN a[] TO <fs>.
|
||||
WHEN `B`.
|
||||
ASSIGN b[] TO <fs>.
|
||||
WHEN `C`.
|
||||
ASSIGN c[] TO <fs>.
|
||||
WHEN `D`.
|
||||
ASSIGN d[] TO <fs>.
|
||||
WHEN `E`.
|
||||
ASSIGN e[] TO <fs>.
|
||||
WHEN `F`.
|
||||
ASSIGN f[] TO <fs>.
|
||||
WHEN `G`.
|
||||
ASSIGN g[] TO <fs>.
|
||||
WHEN `H`.
|
||||
ASSIGN h[] TO <fs>.
|
||||
ENDCASE.
|
||||
|
||||
WRITE / |Result for selection options specified for "{ str }":| COLOR 2.
|
||||
SKIP.
|
||||
|
||||
SELECT *
|
||||
FROM @int_tab AS tab
|
||||
WHERE table_line IN @<fs>
|
||||
INTO @int.
|
||||
WRITE |{ int }|.
|
||||
ENDSELECT.
|
||||
|
||||
IF <fs> IS INITIAL.
|
||||
WRITE `(No selection criteria were provided. Therefore, all table lines are respected.)`.
|
||||
ENDIF.
|
||||
|
||||
SKIP.
|
||||
ENDLOOP.
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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_SELSCR_SELECT_OPT</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>SELECT-OPTIONS (ABAP Cheat Sheet: Selection Screens/Classic Lists)</ENTRY>
|
||||
<LENGTH>66</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
@@ -0,0 +1,218 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
* Example: Creating standalone selection screens
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* - Example that demonstrates standalone selection screens
|
||||
* - In the example, calculations are performed based on user input.
|
||||
* Includes:
|
||||
* - Creating selection screens as regular dynpros with
|
||||
* SELECTION-SCREEN BEGIN/END OF SCREEN ... statements
|
||||
* - Creating selection screens as subscreen dynpros with the AS SUBSCREEN
|
||||
* addition
|
||||
* - Calling standalone selection screen with CALL SELECTION-SCREEN
|
||||
* statements
|
||||
* - Using variants of the SELECTION-SCREEN statements that do not create
|
||||
* selection screens, but are used to modify the layout
|
||||
* - INCLUDE addition for reusing already created elements
|
||||
*
|
||||
* Notes:
|
||||
* - A selection of additions is used. For more additions and details,
|
||||
* see the ABAP Keyword Documentation.
|
||||
* - See the ABAP cheat sheet for other statements used here, for example,
|
||||
* the ones related to event blocks such as START-OF-SELECTION.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
PROGRAM.
|
||||
|
||||
"Creating standalone selection screens as regular dynpros
|
||||
"The dynpro number must be unique in the program. Do not use 1000.
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9810.
|
||||
"Here go all PARAMETERS, SELECT-OPTIONS, and SELECTION-SCREEN statements
|
||||
"to define the screen elements of the standalone selection screen.
|
||||
SELECTION-SCREEN COMMENT /1(70) t1.
|
||||
PARAMETERS number1 TYPE i OBLIGATORY.
|
||||
SELECTION-SCREEN END OF SCREEN 9810.
|
||||
|
||||
"AS WINDOW/TITLE: The following selection screen is displayed in a modal
|
||||
"dialog box. Plus, a title is specified.
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9820 TITLE title1 AS WINDOW.
|
||||
SELECTION-SCREEN COMMENT /1(70) t2.
|
||||
PARAMETERS number2 TYPE i OBLIGATORY.
|
||||
SELECTION-SCREEN END OF SCREEN 9820.
|
||||
|
||||
"Creating a standalone selection screens as subscreen dynpro
|
||||
"They can be included in other dynpros or selection screens, or in
|
||||
"subscreen areas or tab pages. The following example covers the latter.
|
||||
"Note: The selection screens as subscreen dynpros cannot be called
|
||||
"explicitly.
|
||||
|
||||
"The following two selection screens are included in tab pages
|
||||
"further down.
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9830 AS SUBSCREEN.
|
||||
PARAMETERS: number3 TYPE i OBLIGATORY,
|
||||
number4 TYPE i OBLIGATORY.
|
||||
SELECTION-SCREEN END OF SCREEN 9830.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9840 AS SUBSCREEN.
|
||||
PARAMETERS: plus AS CHECKBOX DEFAULT 'X',
|
||||
minus AS CHECKBOX DEFAULT 'X',
|
||||
multiply AS CHECKBOX DEFAULT 'X',
|
||||
divide AS CHECKBOX DEFAULT 'X'.
|
||||
SELECTION-SCREEN END OF SCREEN 9840.
|
||||
|
||||
"The following selection screen (as regular dynpro) is created
|
||||
"as dummy, i.e. it is not included as the ones above. It is
|
||||
"used to demonstrate the INCLUDE addition.
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9850.
|
||||
SELECTION-SCREEN COMMENT /1(50) t3.
|
||||
SELECTION-SCREEN END OF SCREEN 9850.
|
||||
|
||||
"The following declaration is required in the context of the
|
||||
"TABBED BLOCK addition.
|
||||
TABLES sscrfields.
|
||||
|
||||
"The following selection screen (as regular dynpro) is created to
|
||||
"demonstrate ...
|
||||
"- the use of subscreen dynpros. In this case, the subscreen dynpros
|
||||
" are used in the context of tab pages (TABBED BLOCK, TAB additions).
|
||||
"- the reuse of available screen elements in the program using the
|
||||
" INCLUDE addition.
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9860 TITLE title2.
|
||||
SELECTION-SCREEN INCLUDE COMMENT /1(70) t3. "Reusing a screen element
|
||||
SELECTION-SCREEN: BEGIN OF TABBED BLOCK tabs FOR 10 LINES,
|
||||
"In such a TABBED BLOCK statement, only TAB statements are allowed
|
||||
"to include subscreen dynpros.
|
||||
"The USER-COMMAND addition specifies a function code. If a tab is
|
||||
"selected by users, the function code can be evaluated using the the
|
||||
"component ucomm of the structure sscrfields after the
|
||||
"AT SELECTION-SCREEN event.
|
||||
TAB (20) btn_nums USER-COMMAND uc_num,
|
||||
TAB (20) btn_op USER-COMMAND uc_op,
|
||||
END OF BLOCK tabs.
|
||||
SELECTION-SCREEN END OF SCREEN 9860.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
INITIALIZATION.
|
||||
title1 = 'First calculation'.
|
||||
title2 = 'Second calculation'.
|
||||
t1 = 'Insert an integer value for the first calculation.'.
|
||||
t2 = 'Provide the second number for the first calculation.'.
|
||||
t3 = 'Make entries in the tabs for the second calculation.'.
|
||||
btn_nums = 'Numbers'.
|
||||
btn_op = 'Operators'.
|
||||
|
||||
"Instead of the following assignements, you can also use the DEFAULT,
|
||||
"SCREEN, PROGRAM additions of the ... TAB ... statement
|
||||
tabs-prog = sy-repid.
|
||||
tabs-dynnr = 9830.
|
||||
tabs-activetab = 'UC_NUM'.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN.
|
||||
CASE sy-dynnr.
|
||||
WHEN 9860.
|
||||
CASE sscrfields-ucomm.
|
||||
WHEN 'UC_NUM'.
|
||||
tabs-dynnr = 9830.
|
||||
WHEN 'UC_OP'.
|
||||
tabs-dynnr = 9840.
|
||||
ENDCASE.
|
||||
ENDCASE.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
"The following statements call the selection screens.
|
||||
CALL SELECTION-SCREEN 9810.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
"STARTING AT: Specifies that the selection screen is displayed as a
|
||||
"modal dialog box.
|
||||
CALL SELECTION-SCREEN 9820 STARTING AT 10 10.
|
||||
ENDIF.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
CALL SELECTION-SCREEN 9860.
|
||||
ENDIF.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
"Creating a classic list
|
||||
WRITE / |Results of the first calculation using the provided numbers { number1 } and { number2 } (all basic arithmetic operations):| COLOR COL_POSITIVE.
|
||||
WRITE / |{ number1 } + { number2 } = { number1 + number2 }|.
|
||||
WRITE / |{ number1 } - { number2 } = { number1 - number2 }|.
|
||||
|
||||
TRY.
|
||||
WRITE / |{ number1 } * { number2 } = { number1 * number2 }|.
|
||||
CATCH cx_sy_arithmetic_error INTO DATA(error).
|
||||
WRITE / |{ number1 } * { number2 } = ??? Error in multiplication: { error->get_text( ) }| COLOR COL_NEGATIVE.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
WRITE / |{ number1 } / { number2 } = { CONV decfloat34( number1 / number2 ) DECIMALS = 3 }|.
|
||||
IF number1 = 0 AND number2 = 0.
|
||||
WRITE / `No zero division error? Note that ABAP "allows" zero division if the first number is also 0 :)` COLOR COL_NEGATIVE.
|
||||
ENDIF.
|
||||
CATCH cx_sy_zerodivide INTO error.
|
||||
WRITE / |{ number1 } / { number2 } = ??? Error in division: { error->get_text( ) }| COLOR COL_NEGATIVE.
|
||||
ENDTRY.
|
||||
|
||||
SKIP 2.
|
||||
WRITE / |Results of the second calculation using the provided numbers { number3 } and { number4 } (selected basic arithmetic operations):| COLOR COL_POSITIVE.
|
||||
|
||||
IF plus IS INITIAL
|
||||
AND minus IS INITIAL
|
||||
AND multiply IS INITIAL
|
||||
AND divide IS INITIAL.
|
||||
WRITE / 'You did not select any operators from the tab. No calculation was performed.' COLOR COL_NEGATIVE.
|
||||
ELSE.
|
||||
IF plus = 'X'.
|
||||
WRITE / |{ number3 } + { number4 } = { number3 + number4 }|.
|
||||
ENDIF.
|
||||
|
||||
IF minus = 'X'.
|
||||
WRITE / |{ number3 } - { number4 } = { number3 - number4 }|.
|
||||
ENDIF.
|
||||
|
||||
IF multiply = 'X'.
|
||||
TRY.
|
||||
WRITE / |{ number3 } * { number4 } = { number3 * number4 }|.
|
||||
CATCH cx_sy_arithmetic_error INTO error.
|
||||
WRITE / |{ number3 } * { number4 } = ??? Error in multiplication: { error->get_text( ) }| COLOR COL_NEGATIVE.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
IF divide = 'X'.
|
||||
TRY.
|
||||
WRITE / |{ number3 } / { number4 } = { CONV decfloat34( number3 / number4 ) DECIMALS = 3 }|.
|
||||
IF number3 = 0 AND number4 = 0.
|
||||
WRITE / `No zero division error? Note that ABAP "allows" zero division if the first number is also 0 :)` COLOR COL_NEGATIVE.
|
||||
ENDIF.
|
||||
CATCH cx_sy_zerodivide INTO error.
|
||||
WRITE / |{ number3 } / { number4 } = ??? Error in division: { error->get_text( ) }| COLOR COL_NEGATIVE.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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_SELSCR_STANDALONE</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>Standalone selection screens (ABAP cheat sheet)</ENTRY>
|
||||
<LENGTH>47</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
@@ -0,0 +1,263 @@
|
||||
***********************************************************************
|
||||
*
|
||||
* ABAP cheat sheet: Selection screens and classic lists
|
||||
* Example: Variants of SELECTION-SCREEN statements
|
||||
*
|
||||
* -------------------------- PURPOSE ----------------------------------
|
||||
* Example that demonstrates variants of the SELECTION-SCREEN statements
|
||||
* to modify the layout, create additional screen elements etc.
|
||||
* Includes:
|
||||
* - Adding blank lines (SKIP)
|
||||
* - Creating a horizontal line (ULINE)
|
||||
* - Providing text (COMMENT)
|
||||
* - Creating a pushbutton (PUSHBUTTON)
|
||||
* - Specifying the output position of a screen element (POSITION)
|
||||
* - Defining a new line with multiple elements (BEGIN OF LINE)
|
||||
* - Creating blocks (BLOCK)
|
||||
* - Creating tabbed blocks (TABBED BLOCK/TAB)
|
||||
* - Assigning a screen element to a modification group (MODIF ID)
|
||||
* - Adding pushbuttons in the application toolbar (FUNCTION KEY)
|
||||
*
|
||||
* Notes:
|
||||
* - A selection of additions is used. For more additions and details,
|
||||
* see the ABAP Keyword Documentation.
|
||||
* - See the ABAP cheat sheet for other statements used here, for example,
|
||||
* the ones related to event blocks such as START-OF-SELECTION.
|
||||
*
|
||||
* ----------------------- GETTING STARTED -----------------------------
|
||||
* - Open the program with the ABAP development tools for Eclipse (ADT).
|
||||
* - Choose F8 to run 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.
|
||||
*
|
||||
***********************************************************************
|
||||
|
||||
PROGRAM.
|
||||
|
||||
"The following declaration is required in the context of the
|
||||
"TABBED BLOCK, FUNCTION KEY, and USER-COMMAND additions.
|
||||
TABLES sscrfields.
|
||||
|
||||
"Creating blocks (BLOCK)
|
||||
"The WITH FRAME additions draws a frame around a block.
|
||||
"Note that the block must be ended with a ... END OF BLOCK ... statement.
|
||||
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME.
|
||||
"Providing text (COMMENT)
|
||||
SELECTION-SCREEN COMMENT /30(70) t1.
|
||||
"Assigning a screen element to a modification group (MODIF ID)
|
||||
"An identifier can be specified to assign a screen element to a
|
||||
"modification group. This identifier is assigned to the component
|
||||
"'group1' of the SCREEN structure. Using MODIFY SCREEN statements,
|
||||
"the elements can be modified before displaying
|
||||
"in the AT SELECTION-SCREEN OUTPUT event block.
|
||||
"Note: The additions is possible for PARAMETERS, SELECT-OPTIONS
|
||||
"and SELECTION-SCREEN.
|
||||
PARAMETERS my_name LIKE sy-uname MODIF ID nd.
|
||||
|
||||
"Adding blank lines (SKIP)
|
||||
"Just SKIP, no further addition means it skips one line.
|
||||
SELECTION-SCREEN SKIP.
|
||||
PARAMETERS sap_rel LIKE sy-saprl MODIF ID nd.
|
||||
|
||||
"Specifying the number of blank lines
|
||||
SELECTION-SCREEN SKIP 2.
|
||||
"Creating a horizontal line (ULINE)
|
||||
SELECTION-SCREEN ULINE /10(40).
|
||||
PARAMETERS random_i TYPE i MODIF ID nd.
|
||||
SELECTION-SCREEN END OF BLOCK block1.
|
||||
|
||||
SELECTION-SCREEN ULINE.
|
||||
SELECTION-SCREEN SKIP.
|
||||
|
||||
"Defining a new line with multiple elements (BEGIN OF LINE)
|
||||
"Chained statements are handy.
|
||||
SELECTION-SCREEN: BEGIN OF LINE,
|
||||
"Specifying the output position of a screen element (POSITION)
|
||||
"Only possible within BEGIN/END OF LINE
|
||||
POSITION 2,
|
||||
PUSHBUTTON (5) btn1 USER-COMMAND btn_1,
|
||||
POSITION 9,
|
||||
COMMENT (25) t2,
|
||||
POSITION 35,
|
||||
PUSHBUTTON (5) btn2 USER-COMMAND btn_2,
|
||||
POSITION 42,
|
||||
COMMENT (25) t3,
|
||||
END OF LINE.
|
||||
SELECTION-SCREEN SKIP.
|
||||
|
||||
"Radio buttons in a block with a frame and title
|
||||
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE title1.
|
||||
SELECTION-SCREEN BEGIN OF LINE.
|
||||
PARAMETERS: rb1 RADIOBUTTON GROUP grp.
|
||||
SELECTION-SCREEN COMMENT (20) text1.
|
||||
SELECTION-SCREEN END OF LINE.
|
||||
SELECTION-SCREEN BEGIN OF LINE.
|
||||
PARAMETERS: rb2 RADIOBUTTON GROUP grp.
|
||||
SELECTION-SCREEN COMMENT (20) text2.
|
||||
SELECTION-SCREEN END OF LINE.
|
||||
SELECTION-SCREEN END OF BLOCK block2.
|
||||
|
||||
SELECTION-SCREEN SKIP.
|
||||
|
||||
"Further statements with the MODIF ID addition
|
||||
|
||||
"The layout of the following screen element should be modified
|
||||
"using the specified ID.
|
||||
"Note: Outside of BEGIN/END OF LINE statements, the specified
|
||||
"format must contain one position (/...)
|
||||
SELECTION-SCREEN COMMENT /10(70) t4 MODIF ID mod.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF BLOCK bl WITH FRAME.
|
||||
"The layout of the following screen elements should be modified
|
||||
"using the specified ID.
|
||||
PARAMETERS: pa1 RADIOBUTTON GROUP gr MODIF ID mbl,
|
||||
pa2 RADIOBUTTON GROUP gr MODIF ID mbl,
|
||||
pa3 RADIOBUTTON GROUP gr,
|
||||
pa4 RADIOBUTTON GROUP gr.
|
||||
SELECTION-SCREEN END OF BLOCK bl.
|
||||
|
||||
"Creating tabbed blocks (TABBED BLOCK/TAB)
|
||||
|
||||
"Creating standalone selection screens as subscreen dynpros
|
||||
"They can be included in other dynpros or selection screens, or in
|
||||
"subscreen areas or tab pages. This example covers the latter.
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9990 AS SUBSCREEN.
|
||||
PARAMETERS: par_sub1 TYPE c LENGTH 10 LOWER CASE.
|
||||
SELECTION-SCREEN END OF SCREEN 9990.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF SCREEN 9991 AS SUBSCREEN.
|
||||
PARAMETERS: par_sub2 TYPE c LENGTH 10 LOWER CASE.
|
||||
SELECTION-SCREEN END OF SCREEN 9991.
|
||||
|
||||
SELECTION-SCREEN: BEGIN OF TABBED BLOCK tabs FOR 2 LINES,
|
||||
"The USER-COMMAND addition specifies a function code.
|
||||
"If a tab is selected by users, the function code can
|
||||
"be evaluated using the the component ucomm of the structure
|
||||
"sscrfields after the AT SELECTION-SCREEN event.
|
||||
TAB (20) tabtitl1 USER-COMMAND tab1,
|
||||
TAB (20) tabtitl2 USER-COMMAND tab2,
|
||||
END OF BLOCK tabs.
|
||||
|
||||
"Adding pushbuttons in the application toolbar (FUNCTION KEY)
|
||||
"There are five inactive pushbuttons to which the function codes FC01, FC02
|
||||
"up to FC05 are assigned. The ... FUNCTION KEY ... statement activates the
|
||||
"pushbuttons for the specified codes.
|
||||
"Note: To enable it, include the statement 'TABLES sscrfields.' in the code.
|
||||
"When the button is clicked, the event AT SELECTION-SCREEN is raised and the
|
||||
"function code is passed to the 'ucomm' component in the interface
|
||||
"work area 'sscrfields' which can be evaluated and reacted upon accordingly,
|
||||
"e.g. in a CASE control structure.
|
||||
SELECTION-SCREEN: FUNCTION KEY 1, "Stands for FC01
|
||||
FUNCTION KEY 2, "FC02
|
||||
FUNCTION KEY 3, "FC03
|
||||
FUNCTION KEY 4. "FC04
|
||||
|
||||
**********************************************************************
|
||||
|
||||
INITIALIZATION.
|
||||
title1 = 'Block including radio buttons + comments put in one line using BEGIN/END OF LINE'.
|
||||
t1 = 'This is a selection screen comment included in a block with frame.'.
|
||||
t2 = '<- Click to get the time'.
|
||||
t3 = '<- Click to get the date'.
|
||||
t4 = 'This text and the following radio button group was modified.'.
|
||||
text1 = 'Radio button A'.
|
||||
text2 = 'Radio button B'.
|
||||
btn1 = 'A'.
|
||||
btn2 = 'B'.
|
||||
"Relevant to the tabbed blocks
|
||||
tabtitl1 = 'Selection Screen A'.
|
||||
tabtitl2 = 'Selection Screen B'.
|
||||
tabs-prog = sy-repid.
|
||||
tabs-dynnr = 9990.
|
||||
tabs-activetab = 'TAB1'.
|
||||
"Relevant to the function keys
|
||||
"To provide text for the buttons, assign values to the component functxt_0n
|
||||
"(while n stands for the numbers 1 - 5). Otherwise, there won't be any button
|
||||
"text.
|
||||
sscrfields-functxt_01 = 'Get my name'.
|
||||
sscrfields-functxt_02 = 'Get ABAP release'.
|
||||
sscrfields-functxt_03 = 'Get random integer'.
|
||||
sscrfields-functxt_04 = 'Clear input fields'.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN OUTPUT.
|
||||
|
||||
"Modifying the layout of screen elements
|
||||
LOOP AT SCREEN INTO DATA(wa).
|
||||
IF wa-group1 = 'MOD'.
|
||||
"Intensify the text output
|
||||
wa-intensified = '1'.
|
||||
MODIFY SCREEN FROM wa.
|
||||
ENDIF.
|
||||
|
||||
IF wa-group1 = 'MBL'.
|
||||
"Make the screen element invisible
|
||||
wa-invisible = '1'.
|
||||
MODIFY SCREEN FROM wa.
|
||||
ENDIF.
|
||||
|
||||
IF wa-group1 = 'ND'.
|
||||
"Disable the input for a field
|
||||
wa-input = '0'.
|
||||
MODIFY SCREEN FROM wa.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
AT SELECTION-SCREEN.
|
||||
|
||||
"Evaluating the function codes relevant to the
|
||||
"TABBED BLOCK, FUNCTION KEY, and USER-COMMAND additions.
|
||||
|
||||
"Evaluating only if sy-dynnr has the value of the standard selection
|
||||
"screen
|
||||
CHECK sy-dynnr = 1000.
|
||||
|
||||
CASE sscrfields-ucomm.
|
||||
WHEN 'FC01'.
|
||||
my_name = sy-uname.
|
||||
WHEN 'FC02'.
|
||||
sap_rel = sy-saprl.
|
||||
WHEN 'FC03'.
|
||||
random_i = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = 100 )->get_next( ).
|
||||
WHEN 'FC04'.
|
||||
CLEAR: my_name, sap_rel, random_i, par_sub1, par_sub2.
|
||||
WHEN 'BTN_1'.
|
||||
MESSAGE |You clicked button A. The time is { sy-uzeit TIME = ISO }.| TYPE 'I'.
|
||||
WHEN 'BTN_2'.
|
||||
MESSAGE |You clicked button B. The date is { sy-datum DATE = ISO }.| TYPE 'I'.
|
||||
WHEN 'TAB1'.
|
||||
tabs-dynnr = 9990.
|
||||
WHEN 'TAB2'.
|
||||
tabs-dynnr = 9991.
|
||||
ENDCASE.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
"Creating a classic list
|
||||
WRITE / `This list displays the values provided on the selection screen.`.
|
||||
SKIP.
|
||||
WRITE / |my_name: "{ my_name }"|.
|
||||
WRITE / |sap_rel: "{ sap_rel }"|.
|
||||
WRITE / |random_i: "{ random_i }"|.
|
||||
WRITE / |Radio button selected (1): "{ COND #( WHEN rb1 = 'X' THEN 'rb1' ELSE 'rb2' ) }"| .
|
||||
WRITE / |Radio button selected (2): "{ COND #( WHEN pa1 = 'X' THEN 'pa1' WHEN pa2 = 'X' THEN 'pa2' WHEN pa3 = 'X' THEN 'pa3' ELSE 'pa4' ) }"| .
|
||||
WRITE / |par_sub1: "{ par_sub1 }"|.
|
||||
WRITE / |par_sub2: "{ par_sub2 }"|.
|
||||
@@ -0,0 +1,23 @@
|
||||
<?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_SELSCR_STMTS_VAR</NAME>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>1</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>Variants of SELECTION-SCREEN statements (ABAP cheat sheet)</ENTRY>
|
||||
<LENGTH>58</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
||||
Reference in New Issue
Block a user