From 29845df4d1f6aaeefb96cc9bd777e698ff1b25f9 Mon Sep 17 00:00:00 2001 From: danrega <16720986+danrega@users.noreply.github.com> Date: Wed, 20 Sep 2023 10:42:21 +0200 Subject: [PATCH] Update --- src/zcl_demo_abap_dynamic_prog.clas.abap | 46 ++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/zcl_demo_abap_dynamic_prog.clas.abap b/src/zcl_demo_abap_dynamic_prog.clas.abap index 4dcdaec..dbac8b3 100644 --- a/src/zcl_demo_abap_dynamic_prog.clas.abap +++ b/src/zcl_demo_abap_dynamic_prog.clas.abap @@ -1458,6 +1458,8 @@ CLASS zcl_demo_abap_dynamic_prog IMPLEMENTATION. "In the example, the SELECT list that is used in a SELECT statement is "determined at runtime. + "Note: Check out the CL_ABAP_DYN_PRG class, which supports dynamic programming by + "checking the validity of dynamic specifications. See an example below. DATA(select_list) = lcl_det_at_runtime=>get_dyn_select_list( ). @@ -1512,7 +1514,7 @@ CLASS zcl_demo_abap_dynamic_prog IMPLEMENTATION. ********************************************************************** - output->next_section( `37) Excursion: Multiple Dynamically Specified ` && + output->next_section( `37a) Excursion: Multiple Dynamically Specified ` && `Clauses in an ABAP SQL SELECT Statement` ). "In this example, multiple clauses in a SELECT statement are @@ -1548,6 +1550,46 @@ CLASS zcl_demo_abap_dynamic_prog IMPLEMENTATION. output->display( `There's an issue with syntax elements.` ). ENDIF. +********************************************************************** + + output->next_section( `37b) Excursion: Checking the validity of dynamic specifications` ). + "The following example uses the CL_ABAP_DYN_PRG class, which supports + "dynamic programming by checking the validity of dynamic specifications. + "Check out the class documentation for more information. + "In the example, several table names are provided in a string table that + "is looped over. Some wrong table names are intentionally included. + "You can provide the "packages" formal parameter with a table that contains + "the names of packages in which the tables should be included. The + "assumption is that you imported the repository into the package + "specified. If you imported it into a package with a different name, + "change the value accordingly. Otherwise, none of the tables is found. + + DATA(table_names) = VALUE string_table( ( `ZDEMO_ABAP_CARR` ) + ( `ZDEMO_ABAP_FLI` ) + ( `NO_DBTAB` ) + ( `ZDEMO_ABAP_FLSCH` ) + ( `ZDEMO_ABAP_FLI2` ) + ( `WRONG_DBTAB` ) ). + + DATA(check_packages) = VALUE string_hashed_table( ( `ZABAP_CHEAT_SHEETS` ) ). + + DATA dbtab TYPE string. + + LOOP AT table_names INTO DATA(wa_tab). + TRY. + dbtab = cl_abap_dyn_prg=>check_table_name_tab( val = to_upper( wa_tab ) + packages = check_packages ). + + SELECT SINGLE * FROM (dbtab) INTO NEW @DATA(ref_wa). + + output->display( |Result for { wa_tab }| ). + output->display( ref_wa->* ). + CATCH cx_abap_not_a_table cx_abap_not_in_package INTO DATA(err). + output->display( |Result for { wa_tab }| ). + output->display( err->get_text( ) ). + ENDTRY. + ENDLOOP. + ********************************************************************** output->next_section( `38) Dynamic Invoke` ). @@ -2102,4 +2144,4 @@ CLASS zcl_demo_abap_dynamic_prog IMPLEMENTATION. output->display( input = ref_tab->* name = `ref_tab->*` ). ENDMETHOD. -ENDCLASS. +ENDCLASS. \ No newline at end of file