diff --git a/20_Selection_Screens_Lists.md b/20_Selection_Screens_Lists.md index 2135abb..b21c06e 100644 --- a/20_Selection_Screens_Lists.md +++ b/20_Selection_Screens_Lists.md @@ -2183,47 +2183,364 @@ CALL SELECTION-SCREEN 9345 STARTING AT a b ENDING AT c d.

⬆️ back to top

## Excursion: SUBMIT Statements + - [`SUBMIT`](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abapsubmit.htm) statements call executable programs and, therefore, selection screens. - In general, every executable program is started implicitly with `SUBMIT`. - Selection screens can be considered a parameter interface if the program containing them is executed using `SUBMIT`. +- Note that when using `SUBMIT`, an authorization check for the [authorization group](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abenauthorization_group_glosry.htm) is performed using the `S_PROGRAM` authorization object. -```abap -"The calling program is ended -SUBMIT some_program. "Direct specification of the program name +The following table includes a selection of additions and code snippets (2 programs use the demo names `zdemo_abap_report` for the calling program and `zdemo_abap_report_submit` for the called program): -"Dynamic call -"Note the security risks and consequences a program submitted from outside can cause; -"you may use the class CL_ABAP_DYN_PRG to tackle security risks -SUBMIT ('SOME_PROGRAM'). "Character-like data object in a pair of parentheses + -"AND RETURN: The calling program is interrupted -SUBMIT some_program AND RETURN. + + + -"Selection screen-related options for the SUBMIT statement -"Specifies a particular selection screen to be called (but it's not displayed) -SUBMIT some_program USING SELECTION-SCREEN 9123. + + -"In the followig example, it is assumed that the called program only has 1 -"parameter with name par, type i. The addition USING SELECTION-SCREEN is -"omitted, i.e. the standard selection screen is called (but you can also call -"the dynpro 1000 explicitly). -SUBMIT some_program WITH par = 1. "Specifying EQ is also possible + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subject/Addition Notes Code Snippet
-"Specifies that the selection screen to be called is displayed -SUBMIT some_program VIA SELECTION-SCREEN. -SUBMIT some_program USING SELECTION-SCREEN 9123 VIA SELECTION-SCREEN. +Calling a program, ending the current program -"You can pass values to the selection screen. There are a several options. -"Check the ABAP Keyword Documentation. The following examples cover a selection. + -"Displaying the selection screen, only interrupt the current program -SUBMIT some_program VIA SELECTION-SCREEN WITH par = 1 AND RETURN. +- The program name is specified directly. +- If the program does not exist, a runtime error occurs. +- Without the `AND RETURN` addition, the current [SAP LUW](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abensap_luw_glosry.htm) is terminated. -"You can also pass multiple values, e.g. consider a program having multiple -"PARAMETERS statements (you may also have multiple WITH additions), or SELECT-OPTIONS -"statements. -SUBMIT some_program VIA SELECTION-SCREEN WITH SELECTION-TABLE tab. -``` + + +`zdemo_abap_report` +``` abap +PROGRAM. + +SUBMIT zdemo_abap_report_submit. + +WRITE / |This will not be displayed as the calling program is ended.|. +``` + +
+ +`zdemo_abap_report_submit` +``` abap +PROGRAM. + +WRITE / |The program { sy-repid } was executed at { utclong_current( ) TIMESTAMP = SPACE }.|. +``` + + +
Subject/Addition Notes Code Snippet
+ +Dynamically calling a program + + + +- A parenthesized flat character-like data object (literal, constannt or variable) is specified. +- The name must be specified in uppercase. +- Note the security risks and consequences a program submitted from outside can cause. You can use the class `CL_ABAP_DYN_PRG` to tackle security risks. + + + +`zdemo_abap_report` +``` abap +PROGRAM. + +SUBMIT ('ZDEMO_ABAP_REPORT_SUBMIT'). + +WRITE / `This will not be displayed, and the following SUBMIT ` && + `statement will not be carried out as the calling program is ended.`. + +"Using the name of a program in a variable +"The statement is not called in the example. +DATA prog_name type syrepid value 'ZDEMO_ABAP_REPORT_SUBMIT'. +SUBMIT (prog_name). +``` + +
+ +`zdemo_abap_report_submit` +``` abap +PROGRAM. + +WRITE / |The program { sy-repid } was executed at { utclong_current( ) TIMESTAMP = SPACE }.|. +``` + +
Subject/Addition Notes Code Snippet
+ +Calling a program, interrupting the current program and return

+Addition `AND RETURN` + +
+ +- The calling program is interrupted. +- With the `AND RETURN` addition, the called program starts in a new [internal session](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abeninternal_session_glosry.htm) and has its own [SAP LUW](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abensap_luw_glosry.htm). The current internal session and [SAP LUW](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abensap_luw_glosry.htm) is kept. When the called program is ended, the execution of the calling program continues. +- Find [here](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abapsubmit.htm) more information regarding the impact of the involved SAP LUWs. + + + +The following code snippets, copyable to demo programs and executable using F8 (execute program `zdemo_abap_report`), implements the following: +- `zdemo_abap_report` calls a program using the `AND RETURN` addition. Before and after the statement, the SAP LUW key is retrieved using a system class. +- The program interruption is demonstrated that the `WRITE` statements display content in a classic list, and both SAP LUW keys are the same. So, the SAP LUW has been kept. +- The called program also contains a statement to store the SAP LUW key. The `BREAK-POINT` statement starts the debugger. You can check the SAP LUW key value there, and - after continuing the program execution - compare the SAP LUW key values. They are different, thus, showing that two different SAP LUWs have been started. + +`zdemo_abap_report` +``` abap +PROGRAM. + +DATA(sap_luw_key_calling_prog1) = cl_system_transaction_state=>get_sap_luw_key( ). + +SUBMIT zdemo_abap_report_submit AND RETURN. + +DATA(sap_luw_key_calling_prog2) = cl_system_transaction_state=>get_sap_luw_key( ). + +WRITE / `This will be displayed as the calling program is only interrupted.`. +WRITE / |sap_luw_key_calling_prog1: "{ sap_luw_key_calling_prog1 }"|. +WRITE / |sap_luw_key_calling_prog2: "{ sap_luw_key_calling_prog2 }"|. +``` + +
+ +`zdemo_abap_report_submit` +``` abap +PROGRAM. + +DATA(sap_luw_key_called_prog) = cl_system_transaction_state=>get_sap_luw_key( ). +BREAK-POINT. +``` + +
Subject/Addition Notes Code Snippet
+ +Specifying a particular selection screen to be called and display it or not
+Additions `USING SELECTION-SCREEN` and `VIA SELECTION-SCREEN` + +
+ +- `USING SELECTION-SCREEN`: Specifies the selection screen. If the addition is not specified, the standard selection screen 1000 is called. The specified seclection screen must exist, otherwise a runtime error occurs. +- `VIA SELECTION-SCREEN`: Determines whether the selection is displayed or not. +- The following sections outline options to pass parameter and selection criteria values. + + + +`zdemo_abap_report` +``` abap +PROGRAM. + +PARAMETERS: p_rb1 RADIOBUTTON GROUP rbg, + p_rb2 RADIOBUTTON GROUP rbg, + p_rb3 RADIOBUTTON GROUP rbg. + +START-OF-SELECTION. + + CASE 'X'. + WHEN p_rb1. + "In this example, the called selection screen is not displayed. Therefore, none + "of the parameters in the called program are assigned values. + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9000 AND RETURN. + WHEN p_rb2. + "The specified selection screen is called. + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9000 VIA SELECTION-SCREEN AND RETURN. + WHEN p_rb3. + "The standard selection screen 1000 is called. + SUBMIT zdemo_abap_report_submit VIA SELECTION-SCREEN AND RETURN. + ENDCASE. +``` + +
+ +`zdemo_abap_report_submit` +``` abap +PROGRAM. + +PARAMETERS param1 TYPE c LENGTH 10. + +SELECTION-SCREEN BEGIN OF SCREEN 9000. + PARAMETERS param2 TYPE c LENGTH 10. +SELECTION-SCREEN END OF SCREEN 9000. + +START-OF-SELECTION. + + WRITE / `Inserted values:`. + SKIP. + WRITE / |param1: "{ param1 }"|. + WRITE / |param2: "{ param2 }"|. +``` + +
Subject/Addition Notes Code Snippet
+ +Passing values to a called selection screen
+Additions `WITH SELECTION-TABLE`, `WITH ...` + +
+ +- `WITH SELECTION-TABLE`: Passes values specified in an internal of a special line type (`RSPARAMS`, `RSPARAMSL_255`, without secondary table keys). The line type has specific component, among them: `selname` (parameter name in uppercase), `kind` (`P` for parameters, `S` for selection criteria), `sign`/`option`/`low`/`high` (ranges table components; note that for parameters, the value must be specified for `low`) +- `WITH ...` : Supplying individual values +- More additions are available. Find more information [here](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abapsubmit_selscreen_parameters.htm): + - `WITH FREE SELECTIONS`: For dynamic selections of selection screens of [logical databases](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abenlogical_data_base_glosry.htm) + - `USING SELECTION-SET`: Passes values of a [selection screen variant](https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abenvariant_glosry.htm) + - `USING SELECTION-SETS OF PROGRAM`: Passes values of a selection screen variant of a particular program + + + +`zdemo_abap_report` +``` abap +PROGRAM. + +PARAMETERS: wseltab1 RADIOBUTTON GROUP rbg, + wseltab2 RADIOBUTTON GROUP rbg, + wseltab3 RADIOBUTTON GROUP rbg, + simple_w RADIOBUTTON GROUP rbg, + with_sel RADIOBUTTON GROUP rbg, + singlrt RADIOBUTTON GROUP rbg, + intv_rt RADIOBUTTON GROUP rbg, + rangest RADIOBUTTON GROUP rbg. + +START-OF-SELECTION. + + CASE 'X'. + WHEN wseltab1. + DATA seltab1 TYPE TABLE OF rsparams WITH EMPTY KEY. + seltab1 = VALUE #( ( selname = 'PARAM2' kind = 'P' low = 'Test' ) ). + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9000 WITH SELECTION-TABLE seltab1 AND RETURN. + + WHEN wseltab2.DATA seltab2 TYPE TABLE OF rsparams WITH EMPTY KEY. + seltab2 = VALUE #( ( selname = 'SEL1' kind = 'S' low = 'A' high = 'M' option = 'BT' sign = 'I' ) ). + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9001 WITH SELECTION-TABLE seltab2 AND RETURN. + + WHEN wseltab3.DATA seltab3 TYPE TABLE OF rsparams WITH EMPTY KEY. + seltab3 = VALUE #( ( selname = 'PARAM3' kind = 'P' low = 'Hello' ) + ( selname = 'SEL2' kind = 'S' low = 1 high = 10 option = 'BT' sign = 'I' ) ). + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9002 WITH SELECTION-TABLE seltab3 AND RETURN. + + WHEN simple_w. + "Calls the standard selection screen + SUBMIT zdemo_abap_report_submit WITH param1 = 'ABAP' AND RETURN. + + WHEN with_sel.SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9000 WITH param2 = 'lorem' AND RETURN. + + WHEN singlrt. + "Single value passed for ranges table + "Note: + "- Specifying SIGN is optional. The default value for sign is 'I'. + "- Specify the comparions operations EQ|NE|CP|NP|GT|GE|LT|LE and =|INCL instead of EQ + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9001 WITH sel1 = 'A' SIGN 'I' AND RETURN. + + WHEN intv_rt. + "Passed interval for ranges table + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9001 WITH sel1 BETWEEN 'A' AND 'M' SIGN 'I' AND RETURN. + + WHEN rangest. + "Passing a ranges table + TYPES c10 TYPE c LENGTH 10. + DATA rangetab TYPE RANGE OF c10. + rangetab = VALUE #( sign = 'I' + option = 'BT' ( low = 'A' high = 'C' ) + ( low = 'F' high = 'M' ) + ( low = 'S' high = 'U' ) + option = 'GE' ( low = 'X' ) ). + + SUBMIT zdemo_abap_report_submit USING SELECTION-SCREEN 9001 WITH sel1 IN rangetab AND RETURN. + + ENDCASE. +``` + +
+ +`zdemo_abap_report_submit` +``` abap +PROGRAM. + +PARAMETERS param1 TYPE c LENGTH 10 LOWER CASE. + +SELECTION-SCREEN BEGIN OF SCREEN 9000. + PARAMETERS param2 TYPE c LENGTH 10 LOWER CASE. +SELECTION-SCREEN END OF SCREEN 9000. + +DATA txt TYPE c LENGTH 10. +SELECTION-SCREEN BEGIN OF SCREEN 9001. + SELECT-OPTIONS: sel1 FOR txt. +SELECTION-SCREEN END OF SCREEN 9001. + +DATA num TYPE i. +SELECTION-SCREEN BEGIN OF SCREEN 9002. + PARAMETERS param3 TYPE c LENGTH 10 LOWER CASE. + SELECT-OPTIONS: sel2 FOR num. +SELECTION-SCREEN END OF SCREEN 9002. + +START-OF-SELECTION. + + WRITE / `Inserted values:`. + SKIP. + WRITE / |param1: "{ param1 }"|. + WRITE / |param2: "{ param2 }"|. + WRITE / |param3: "{ param3 }"|. + SKIP. + WRITE / `Selection table content (sel1):`. + LOOP AT sel1 ASSIGNING FIELD-SYMBOL(). + WRITE / |low: { -low }, high: { -high }, option: { -option }, sign: { -sign }|. + ENDLOOP. + SKIP. + WRITE / `Selection table content (sel2):`. + LOOP AT sel2 ASSIGNING FIELD-SYMBOL(). + WRITE / |low: { -low }, high: { -high }, option: { -option }, sign: { -sign }|. + ENDLOOP. +``` + +

⬆️ back to top