Initial commit
This commit is contained in:
228
src/zcl_demo_abap_dynamic_prog.clas.locals_imp.abap
Normal file
228
src/zcl_demo_abap_dynamic_prog.clas.locals_imp.abap
Normal file
@@ -0,0 +1,228 @@
|
||||
CLASS lcl_det_at_runtime DEFINITION.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS:
|
||||
get_dyn_table_name RETURNING VALUE(tab) TYPE string,
|
||||
get_dyn_dobj RETURNING VALUE(dobj) TYPE string,
|
||||
get_dyn_field RETURNING VALUE(field) TYPE string,
|
||||
get_dyn_select_list RETURNING VALUE(list) TYPE string,
|
||||
get_dyn_where_clause RETURNING VALUE(clause_tab) TYPE string_table,
|
||||
get_dyn_class RETURNING VALUE(cl) TYPE string,
|
||||
get_random_type RETURNING VALUE(random_type) TYPE string.
|
||||
|
||||
CLASS-DATA: string1 TYPE string,
|
||||
string2 TYPE string,
|
||||
string3 TYPE string.
|
||||
|
||||
TYPES: type1 TYPE p LENGTH 8 DECIMALS 2, "elementary type
|
||||
type2 TYPE zdemo_abap_carr, "structure type
|
||||
type3 TYPE TABLE OF zdemo_abap_flsch, "internal table type
|
||||
type4 TYPE REF TO lcl_det_at_runtime. "reference type
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_det_at_runtime IMPLEMENTATION.
|
||||
METHOD get_dyn_table_name.
|
||||
|
||||
"Providing DDIC table names in a string table to be selected from.
|
||||
DATA(flight_tables) = VALUE string_table(
|
||||
( `ZDEMO_ABAP_CARR` ) ( `ZDEMO_ABAP_FLSCH` ) ( `ZDEMO_ABAP_FLI` ) ).
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = lines( flight_tables ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random table name.
|
||||
TRY.
|
||||
tab = flight_tables[ idx ].
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_dyn_dobj.
|
||||
|
||||
"Providing strings with demo content.
|
||||
string1 = |Hallo, { sy-uname }. | &&
|
||||
|This is string1.|.
|
||||
string2 = |Hallo, { sy-uname }. | &&
|
||||
|This is string2.|.
|
||||
string3 = |Hallo, { sy-uname }. | &&
|
||||
|This is string3.|.
|
||||
|
||||
"Filling table with data object names.
|
||||
DATA(str_tab) = VALUE string_table(
|
||||
( `STRING1` ) ( `STRING2` ) ( `STRING3` ) ).
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = lines( str_tab ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random data object name.
|
||||
TRY.
|
||||
dobj = str_tab[ idx ].
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_dyn_field.
|
||||
|
||||
"Getting list of components of DDIC type zdemo_abap_carr
|
||||
DATA(comp) = CAST cl_abap_structdescr(
|
||||
cl_abap_typedescr=>describe_by_name(
|
||||
'ZDEMO_ABAP_CARR' )
|
||||
)->components.
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
"Starting from 2 to exclude MANDT field
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 2
|
||||
max = lines( comp ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random component name.
|
||||
TRY.
|
||||
field = comp[ idx ]-name.
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_dyn_select_list.
|
||||
|
||||
"Providing SELECT lists in a string table to be selected from.
|
||||
DATA sel_list_tab TYPE string_table.
|
||||
sel_list_tab = VALUE #(
|
||||
( `CARRID, CONNID, COUNTRYFR, COUNTRYTO` )
|
||||
( `CARRID, CONNID, CITYFROM, CITYTO` )
|
||||
( `CARRID, CONNID, AIRPFROM, AIRPTO` )
|
||||
( `CARRID, CONNID, AIRPFROM, AIRPTO, ` &&
|
||||
`FLTIME, DEPTIME, ARRTIME, DISTANCE` )
|
||||
).
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = lines( sel_list_tab ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random SELECT list.
|
||||
TRY.
|
||||
list = sel_list_tab[ idx ].
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_dyn_where_clause.
|
||||
|
||||
"Providing WHERE clauses in a table to be selected from.
|
||||
DATA: BEGIN OF where_struc,
|
||||
where_clause_tab TYPE string_table,
|
||||
END OF where_struc.
|
||||
|
||||
DATA where_itab LIKE TABLE OF where_struc WITH EMPTY KEY.
|
||||
|
||||
where_itab = VALUE #(
|
||||
( where_clause_tab = VALUE #( ( `CARRID = 'LH'` )
|
||||
( `OR CARRID = 'AA'` ) ) )
|
||||
( where_clause_tab = VALUE #( ( `CONNID BETWEEN 0 AND 300` ) ) )
|
||||
( where_clause_tab = VALUE #( ( `CITYFROM LIKE '%FRA%'` ) ) )
|
||||
( where_clause_tab =
|
||||
VALUE #( ( `DISTANCE > 500 AND DISTID = 'KM'` ) ) ) ).
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = lines( where_itab ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random WHERE clause.
|
||||
TRY.
|
||||
clause_tab = where_itab[ idx ]-where_clause_tab.
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_dyn_class.
|
||||
|
||||
"Providing class names in a string table to be selected from.
|
||||
DATA(class_tab) = VALUE string_table(
|
||||
( `LCL_DET_AT_RUNTIME` )
|
||||
( `LCL_DUMMY` ) ).
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = lines( class_tab ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random class name.
|
||||
TRY.
|
||||
cl = class_tab[ idx ].
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_random_type.
|
||||
|
||||
"Providing names of classes in a string table to be selected from.
|
||||
"Note that in this example types are defined in the public section
|
||||
"of a class and the program logic is included in another class.
|
||||
"To be able to refer to the types, the class name is added.
|
||||
DATA(str_tab) = VALUE string_table(
|
||||
( `LCL_DET_AT_RUNTIME=>TYPE1` )
|
||||
( `LCL_DET_AT_RUNTIME=>TYPE2` )
|
||||
( `LCL_DET_AT_RUNTIME=>TYPE3` )
|
||||
( `LCL_DET_AT_RUNTIME=>TYPE4` )
|
||||
( `LCL_DET_AT_RUNTIME` )
|
||||
( `IF_OO_ADT_CLASSRUN` ) ).
|
||||
|
||||
"Getting random number to determine the table index at runtime.
|
||||
DATA(random) = cl_abap_random_int=>create(
|
||||
seed = cl_abap_random=>seed( ) min = 1
|
||||
max = lines( str_tab ) ).
|
||||
DATA(idx) = random->get_next( ).
|
||||
|
||||
"Returning parameter to receive the random type name.
|
||||
TRY.
|
||||
random_type = str_tab[ idx ].
|
||||
CATCH cx_sy_itab_line_not_found INTO DATA(error).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_dummy DEFINITION.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS:
|
||||
meth_a IMPORTING imp TYPE i
|
||||
EXPORTING exp TYPE i
|
||||
RETURNING VALUE(str) TYPE string,
|
||||
meth_b CHANGING ch TYPE string
|
||||
RETURNING VALUE(str) TYPE string.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_dummy IMPLEMENTATION.
|
||||
METHOD meth_a.
|
||||
str = |Hallo from meth_a.|.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD meth_b.
|
||||
str = |Hallo from meth_b.|.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user