├── .github
└── CODEOWNERS
├── src
├── .vscode
│ └── settings.json
├── package.devc.xml
├── zabap_oo_patterns
│ ├── zcl_5_composite_other.clas.abap
│ ├── package.devc.xml
│ ├── zif_5_composite.intf.abap
│ ├── zif_5_composite.intf.xml
│ ├── zcl_3_factory.clas.xml
│ ├── zcl_4_singleton.clas.xml
│ ├── zcl_3_factory_tester.clas.xml
│ ├── zcl_4_singleton_tester_1.clas.xml
│ ├── zcl_5_composite_tester.clas.xml
│ ├── zcl_1_basic_class_tester.clas.xml
│ ├── zcl_5_composite_a340.clas.xml
│ ├── zcl_5_composite_other.clas.xml
│ ├── zcl_2_static_and_inst_tester.clas.xml
│ ├── zcl_3_factory_tester.clas.abap
│ ├── zcl_5_composite_a340.clas.abap
│ ├── zcl_4_singleton_tester_1.clas.abap
│ ├── zoo_patterns.msag.xml
│ ├── zcl_1_basic_class.clas.xml
│ ├── zcx_5_composite.clas.xml
│ ├── zcl_3_factory.clas.abap
│ ├── zcl_4_singleton.clas.abap
│ ├── zcl_2_static.clas.xml
│ ├── zcl_1_basic_class.clas.abap
│ ├── zcl_5_composite_747.clas.xml
│ ├── zcl_5_composite_tester.clas.abap
│ ├── zcl_2_instance.clas.xml
│ ├── zcl_1_basic_class_tester.clas.abap
│ ├── zcl_2_instance.clas.abap
│ ├── zcx_5_composite.clas.abap
│ ├── zcl_5_composite_base.clas.xml
│ ├── zcl_5_composite_747.clas.abap
│ ├── zcl_2_static.clas.abap
│ ├── zcl_2_static_and_inst_tester.clas.abap
│ └── zcl_5_composite_base.clas.abap
├── zcl_oo_tutorial_6_other.clas.abap
├── zif_oo_tutorial.intf.abap
├── zif_oo_tutorial.intf.xml
├── zcl_workflow_test.clas.xml
├── zcl_abap_to_json.clas.xml
├── zcl_json_to_xml.clas.xml
├── zcl_obj_xml_test.clas.xml
├── zcl_xml_to_json.clas.xml
├── zcl_json_to_abap.clas.xml
├── zcl_simple_example.clas.xml
├── zcl_inline_declare.clas.xml
├── zcl_oo_tutorial_3_tester.clas.xml
├── zcl_oo_tutorial_4_tester.clas.xml
├── zcl_oo_tutorial_5_tester.clas.xml
├── zcl_oo_tutorial_6_a340.clas.xml
├── zcl_oo_tutorial_6_tester.clas.xml
├── zcl_table_expressions.clas.xml
├── zcl_oo_tutorial_6_other.clas.xml
├── zcl_xml_to_json_call.clas.xml
├── zcl_abap_to_json_id.clas.xml
├── zcl_abap_to_json_restore.clas.xml
├── zcl_constructor_expression.clas.xml
├── zcl_json_to_xml_call.clas.xml
├── zcl_fs_ref_perf_testing.clas.xml
├── zcl_oo_tutorial_5a_tester.clas.xml
├── zcl_abap_to_json_restore.clas.abap
├── zcl_oo_tutorial_6_a340.clas.abap
├── zcl_oo_tutorial_1.clas.xml
├── zoo_messages.msag.xml
├── zcx_oo_tutorial.clas.xml
├── zcl_oo_tutorial_1.clas.abap
├── zcl_oo_tutorial_2.clas.xml
├── zcl_hungarian_notation.clas.xml
├── zcl_json_to_abap.clas.abap
├── zcl_oo_tutorial_6_747.clas.xml
├── zcl_workflow_test.clas.abap
├── zcl_json_to_xml_call.clas.abap
├── zcl_oo_tutorial_6_tester.clas.abap
├── zcl_oo_tutorial_3.clas.xml
├── zcl_oo_tutorial_5.clas.xml
├── zcl_oo_tutorial_4.clas.xml
├── zcl_xml_to_json_call.clas.abap
├── zcl_oo_tutorial_4_tester.clas.abap
├── zcl_fs_ref_perf_testing.clas.abap
├── zcl_xml_to_json.clas.abap
├── zcl_abap_to_json.clas.abap
├── zcl_json_to_xml.clas.abap
├── zcl_inline_declare.clas.abap
├── zcl_oo_tutorial_3_tester.clas.abap
├── zcl_oo_tutorial_5_tester.clas.abap
├── zcx_oo_tutorial.clas.abap
├── zcl_oo_tutorial_6_base.clas.xml
├── zcl_oo_tutorial_3.clas.abap
├── zcl_hungarian_notation.clas.abap
├── zobject_xml.tabl.xml
├── zcl_oo_tutorial_4.clas.abap
├── zcl_abap_to_json_id.clas.abap
├── zcl_oo_tutorial_5a_tester.clas.abap
├── zcl_oo_tutorial_6_747.clas.abap
├── zcl_simple_example.clas.abap
├── zcl_obj_xml_test.clas.abap
├── zcl_oo_tutorial_5.clas.abap
├── zcl_oo_tutorial_2.clas.abap
├── zcl_oo_tutorial_6_base.clas.abap
├── zcl_table_expressions.clas.abap
└── zcl_constructor_expression.clas.abap
├── .vscode
└── settings.json
├── .abapgit.xml
├── REUSE.toml
├── README.md
├── LICENSES
└── Apache-2.0.txt
└── LICENSE
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @jung-thomas
2 |
--------------------------------------------------------------------------------
/src/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": []
3 | }
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "SAP HANA Database Artifacts.displaySapWebAnalyticsStartupNotification": false
3 | }
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
Tutorial #6 - Planetype Other
2 | CLASS ZCL_OO_TUTORIAL_6_OTHER DEFINITION 3 | public 4 | inheriting from ZCL_OO_TUTORIAL_6_BASE 5 | final 6 | create protected 7 | 8 | global friends ZCL_OO_TUTORIAL_6_BASE . 9 | 10 | PUBLIC SECTION. 11 | PROTECTED SECTION. 12 | PRIVATE SECTION. 13 | ENDCLASS. 14 | 15 | 16 | 17 | CLASS ZCL_OO_TUTORIAL_6_OTHER IMPLEMENTATION. 18 | ENDCLASS. 19 | -------------------------------------------------------------------------------- /src/zif_oo_tutorial.intf.abap: -------------------------------------------------------------------------------- 1 | "!OO Tutorial Base Interface
2 | INTERFACE ZIF_OO_TUTORIAL 3 | PUBLIC . 4 | 5 | 6 | TYPES: 7 | BEGIN OF COST, 8 | PRICE TYPE /DMO/FLIGHT_PRICE, 9 | CURRENCY TYPE /DMO/CURRENCY_CODE, 10 | END OF COST . 11 | 12 | METHODS GET_FLIGHT_DETAILS 13 | RETURNING 14 | VALUE(FLIGHT) TYPE /DMO/FLIGHT . 15 | METHODS CALCULATE_FLIGHT_PRICE 16 | RETURNING 17 | VALUE(PRICE) TYPE COST . 18 | ENDINTERFACE. 19 | -------------------------------------------------------------------------------- /src/zif_oo_tutorial.intf.xml: -------------------------------------------------------------------------------- 1 | 2 |Tutorial #6 - Planetype A340
2 | CLASS ZCL_OO_TUTORIAL_6_A340 DEFINITION 3 | PUBLIC 4 | INHERITING FROM ZCL_OO_TUTORIAL_6_BASE 5 | FINAL 6 | CREATE PROTECTED 7 | 8 | GLOBAL FRIENDS ZCL_OO_TUTORIAL_6_BASE. 9 | 10 | PUBLIC SECTION. 11 | 12 | METHODS ZIF_OO_TUTORIAL~CALCULATE_FLIGHT_PRICE 13 | REDEFINITION . 14 | PROTECTED SECTION. 15 | PRIVATE SECTION. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS ZCL_OO_TUTORIAL_6_A340 IMPLEMENTATION. 21 | 22 | 23 | METHOD ZIF_OO_TUTORIAL~CALCULATE_FLIGHT_PRICE. 24 | price = SUPER->CALCULATE_FLIGHT_PRICE( ). 25 | PRICE-PRICE = PRICE-PRICE + 15. 26 | ENDMETHOD. 27 | ENDCLASS. 28 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_4_singleton_tester_1.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_4_singleton_tester_1 DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES if_oo_adt_classrun. 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS zcl_4_singleton_tester_1 IMPLEMENTATION. 15 | METHOD if_oo_adt_classrun~main. 16 | DATA(logger) = zcl_4_singleton=>factory( ). 17 | logger->write_to_log( |First Test| ). 18 | out->write( logger->read_log( ) ). 19 | clear logger. 20 | DATA(second_logger) = zcl_4_singleton=>factory( ). 21 | second_logger->write_to_log( |Second Test| ). 22 | out->write( second_logger->read_log( ) ). 23 | ENDMETHOD. 24 | ENDCLASS. 25 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_1.clas.xml: -------------------------------------------------------------------------------- 1 | 2 |OO Tutorial #1
2 | CLASS zcl_oo_tutorial_1 DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | INTERFACES if_oo_adt_classrun. 10 | TYPES: 11 | sample_table_type TYPE STANDARD TABLE OF string . 12 | 13 | DATA sample_internal_table TYPE sample_table_type . 14 | 15 | "!My First Method
16 | METHODS my_first_method 17 | IMPORTING 18 | !import TYPE string "Import parameter 19 | RETURNING VALUE(export) TYPE string. 20 | 21 | PROTECTED SECTION. 22 | 23 | PRIVATE SECTION. 24 | 25 | ENDCLASS. 26 | 27 | 28 | 29 | CLASS ZCL_OO_TUTORIAL_1 IMPLEMENTATION. 30 | 31 | 32 | METHOD if_oo_adt_classrun~main. 33 | out->write( `Starting OO #1 Test` ). 34 | out->write( me->my_first_method( `Input Value` ) ). 35 | ENDMETHOD. 36 | 37 | 38 | METHOD my_first_method. 39 | export = import. 40 | ENDMETHOD. 41 | ENDCLASS. 42 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_2.clas.xml: -------------------------------------------------------------------------------- 1 | 2 |My First Method
13 | METHODS my_First_Method 14 | IMPORTING 15 | !import TYPE string "Import parameter 16 | RETURNING VALUE(export) TYPE string. 17 | 18 | 19 | methods my_Second_Method 20 | returning VALUE(sample_Internal_Table) like sample_Internal_Table. 21 | PROTECTED SECTION. 22 | PRIVATE SECTION. 23 | ENDCLASS. 24 | 25 | 26 | 27 | CLASS zcl_1_basic_class IMPLEMENTATION. 28 | 29 | METHOD my_First_Method. 30 | export = |${ import } - Plus New Stuff|. 31 | APPEND INITIAL LINE TO sample_Internal_Table REFERENCE INTO DATA(itab_Line). 32 | itab_Line->* = export. 33 | ENDMETHOD. 34 | 35 | method my_Second_Method. 36 | sample_Internal_Table = me->sample_Internal_Table. 37 | ENDMETHOD. 38 | ENDCLASS. 39 | -------------------------------------------------------------------------------- /src/zcl_json_to_abap.clas.abap: -------------------------------------------------------------------------------- 1 | "!JSON to ABAP Conversion
2 | CLASS ZCL_JSON_TO_ABAP DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_JSON_TO_ABAP IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | 20 | TYPES: BEGIN OF T_STRUCT, 21 | C1 TYPE STRING, 22 | C2 TYPE STRING, 23 | END OF T_STRUCT. 24 | TYPES T_TAB TYPE STANDARD TABLE OF T_STRUCT. 25 | DATA ITAB TYPE T_TAB. 26 | 27 | DATA(JSON) = `{"TEXT":"JSON", "SECOND": "Second Variable", "TAB": [{"C1": "HI", "C2":"Hey"},{"C1": "HI2", "C2":"Hey2"}]}`. 28 | DATA TEXT TYPE STRING. 29 | DATA SECOND TYPE STRING. 30 | CALL TRANSFORMATION ID SOURCE XML JSON 31 | RESULT TEXT = TEXT 32 | SECOND = SECOND 33 | TAB = ITAB. 34 | OUT->WRITE( TEXT ). 35 | OUT->WRITE( SECOND ). 36 | OUT->WRITE( ITAB ). 37 | ENDMETHOD. 38 | ENDCLASS. 39 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_6_747.clas.xml: -------------------------------------------------------------------------------- 1 | 2 |JSON To XML Conversion via Call Transformation
2 | CLASS ZCL_JSON_TO_XML_CALL DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_JSON_TO_XML_CALL IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | DATA(JSON) = `{"TEXT":"JSON"}`. 20 | CALL TRANSFORMATION ID SOURCE XML JSON 21 | RESULT XML DATA(XML). 22 | 23 | TRY. 24 | DATA(READER) = CL_SXML_STRING_READER=>CREATE( XML ). 25 | DATA(WRITER) = CAST IF_SXML_WRITER( 26 | CL_SXML_STRING_WRITER=>CREATE( ) ). 27 | WRITER->SET_OPTION( OPTION = IF_SXML_WRITER=>CO_OPT_LINEBREAKS ). 28 | WRITER->SET_OPTION( OPTION = IF_SXML_WRITER=>CO_OPT_INDENT ). 29 | READER->NEXT_NODE( ). 30 | READER->SKIP_NODE( WRITER ). 31 | * DATA(xml_output) = cl_abap_codepage=>convert_from( CAST cl_sxml_string_writer( writer )->get_output( ) ). 32 | DATA(XML_OUTPUT) = CL_ABAP_CONV_CODEPAGE=>CREATE_IN( )->CONVERT( CAST CL_SXML_STRING_WRITER( WRITER )->GET_OUTPUT( ) ). 33 | CATCH CX_SXML_PARSE_ERROR. 34 | RETURN. 35 | ENDTRY. 36 | 37 | OUT->WRITE( XML_OUTPUT ). 38 | 39 | ENDMETHOD. 40 | ENDCLASS. 41 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_2_instance.clas.xml: -------------------------------------------------------------------------------- 1 | 2 |XML To JSON via CALL Transformation
2 | CLASS zcl_xml_to_json_call DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES if_oo_adt_classrun. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_XML_TO_JSON_CALL IMPLEMENTATION. 16 | 17 | 18 | METHOD if_oo_adt_classrun~main. 19 | DATA(xml) = ``. 20 | DATA(json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). 21 | CALL TRANSFORMATION id SOURCE XML xml 22 | RESULT XML json_writer. 23 | 24 | 25 | TRY. 26 | DATA(reader) = cl_sxml_string_reader=>create( json_writer->get_output( ) ). 27 | DATA(writer) = CAST if_sxml_writer( 28 | cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ). 29 | writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ). 30 | writer->set_option( option = if_sxml_writer=>co_opt_indent ). 31 | reader->next_node( ). 32 | reader->skip_node( writer ). 33 | data(json_output) = CL_ABAP_CONV_CODEPAGE=>CREATE_IN( )->CONVERT( CAST cl_sxml_string_writer( writer )->get_output( ) ). 34 | 35 | CATCH cx_sxml_parse_error. 36 | RETURN. 37 | ENDTRY. 38 | out->write( json_output ). 39 | ENDMETHOD. 40 | ENDCLASS. 41 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_4_tester.clas.abap: -------------------------------------------------------------------------------- 1 | "!OO Tutorial #4 Tester
2 | CLASS ZCL_OO_TUTORIAL_4_TESTER DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_OO_TUTORIAL_4_TESTER IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | DATA(AA_0017) = NEW ZCL_OO_TUTORIAL_4( 20 | CARRIER_ID = `AA` 21 | CONNECTION_ID = `0017` 22 | FLIGHT_DATE = `20230222` ). 23 | 24 | DATA(FLIGHT_GOOD) = AA_0017->CALCULATE_FLIGHT_PRICE( ). 25 | OUT->WRITE( |Flight Price for AA-0017 on { CONV /DMO/FLIGHT_DATE( `20230222` ) DATE = ENVIRONMENT }: | && 26 | |{ FLIGHT_GOOD-PRICE CURRENCY = FLIGHT_GOOD-CURRENCY } { FLIGHT_GOOD-CURRENCY }| ). 27 | OUT->WRITE( AA_0017->GET_FLIGHT_DETAILS( ) ). 28 | 29 | OUT->WRITE( ` `). 30 | DATA(UA_0017) = NEW ZCL_OO_TUTORIAL_4( 31 | CARRIER_ID = `UA` 32 | CONNECTION_ID = `0058` 33 | FLIGHT_DATE = `20200426` ). 34 | 35 | DATA(FLIGHT_BAD) = UA_0017->CALCULATE_FLIGHT_PRICE( ). 36 | 37 | OUT->WRITE( |Flight Price for UA-0058 on { CONV /DMO/FLIGHT_DATE( `20200426` ) DATE = ENVIRONMENT }: | && 38 | |{ FLIGHT_BAD-PRICE CURRENCY = FLIGHT_BAD-CURRENCY } { FLIGHT_BAD-CURRENCY }| ). 39 | OUT->WRITE( UA_0017->GET_FLIGHT_DETAILS( ) ). 40 | ENDMETHOD. 41 | ENDCLASS. 42 | -------------------------------------------------------------------------------- /src/zcl_fs_ref_perf_testing.clas.abap: -------------------------------------------------------------------------------- 1 | "!Field-Symbol vs. Reference Performance Testing
2 | CLASS zcl_fs_ref_perf_testing DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES if_oo_adt_classrun. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | DATA flights TYPE /dmo/t_flight. 12 | METHODS data_test. 13 | METHODS field_symbols_test. 14 | METHODS data_ref_test. 15 | ENDCLASS. 16 | 17 | 18 | 19 | CLASS ZCL_FS_REF_PERF_TESTING IMPLEMENTATION. 20 | 21 | 22 | METHOD if_oo_adt_classrun~main. 23 | DO 1000 TIMES. 24 | SELECT * FROM /dmo/flight APPENDING TABLE @flights. 25 | ENDDO. 26 | 27 | data_test( ). 28 | field_symbols_test( ). 29 | data_ref_test( ). 30 | ENDMETHOD. 31 | 32 | 33 | METHOD data_ref_test. 34 | LOOP AT flights REFERENCE INTO DATA(flight). 35 | IF flight->carrier_id = `AA`. 36 | flight->price += 35. 37 | ENDIF. 38 | ENDLOOP. 39 | ENDMETHOD. 40 | 41 | 42 | METHOD data_test. 43 | LOOP AT flights INTO DATA(flight). 44 | IF flight-carrier_id = `SQ`. 45 | flight-price += 35. 46 | modify table flights from flight. 47 | ENDIF. 48 | ENDLOOP. 49 | ENDMETHOD. 50 | 51 | 52 | METHOD field_symbols_test. 53 | LOOP AT flights ASSIGNING FIELD-SYMBOL(XML to JSON Conversion
2 | CLASS ZCL_XML_TO_JSON DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_XML_TO_JSON IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | DATA(XML) = CL_ABAP_CONV_CODEPAGE=>CREATE_OUT( )->CONVERT( 20 | `` ). 21 | DATA(XML_READER) = CL_SXML_STRING_READER=>CREATE( XML ). 22 | DATA(JSON_WRITER) = CL_SXML_STRING_WRITER=>CREATE( TYPE = IF_SXML=>CO_XT_JSON ). 23 | XML_READER->NEXT_NODE( ). 24 | XML_READER->SKIP_NODE( JSON_WRITER ). 25 | 26 | TRY. 27 | DATA(READER) = CL_SXML_STRING_READER=>CREATE( JSON_WRITER->GET_OUTPUT( ) ). 28 | DATA(WRITER) = CAST IF_SXML_WRITER( 29 | CL_SXML_STRING_WRITER=>CREATE( TYPE = IF_SXML=>CO_XT_JSON ) ). 30 | WRITER->SET_OPTION( OPTION = IF_SXML_WRITER=>CO_OPT_LINEBREAKS ). 31 | WRITER->SET_OPTION( OPTION = IF_SXML_WRITER=>CO_OPT_INDENT ). 32 | READER->NEXT_NODE( ). 33 | READER->SKIP_NODE( WRITER ). 34 | DATA(JSON_OUTPUT) = CL_ABAP_CONV_CODEPAGE=>CREATE_IN( )->CONVERT( CAST CL_SXML_STRING_WRITER( WRITER )->GET_OUTPUT( ) ). 35 | 36 | CATCH CX_SXML_PARSE_ERROR. 37 | RETURN. 38 | ENDTRY. 39 | OUT->WRITE( JSON_OUTPUT ). 40 | 41 | ENDMETHOD. 42 | ENDCLASS. 43 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_1_basic_class_tester.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_1_basic_class_tester DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES IF_OO_ADT_CLASSRUN. 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS zcl_1_basic_class_tester IMPLEMENTATION. 15 | METHOD if_oo_adt_classrun~main. 16 | * out->write( |sample_Internal_Table Starter| ). 17 | * out->write( zcl_1_basic_class=>sample_Internal_Table ). 18 | * APPEND INITIAL LINE TO zcl_1_basic_class=>sample_internal_table REFERENCE INTO DATA(line). 19 | * line->* = `Sneaky Stuff I Injected`. 20 | 21 | out->write( |\nCalling First Method| ). 22 | data(class_Instance) = new zcl_1_basic_class( ). 23 | out->write( class_Instance->my_first_method( `First Call` ) ). 24 | 25 | out->write( class_Instance->my_second_method( ) ). 26 | 27 | out->write( |\nCalling First Method Again| ). 28 | out->write( class_Instance->my_first_method( `Second Call` ) ). 29 | 30 | out->write( class_Instance->my_second_method( ) ). 31 | 32 | clear class_instance. 33 | * out->write( zcl_1_basic_class=>sample_Internal_Table ). 34 | * out->write( class_Instance->my_second_method( ) ). 35 | 36 | out->write( |\nCalling New Instance First Method| ). 37 | data(class_Instance_New) = new zcl_1_basic_class( ). 38 | out->write( class_Instance_New->my_first_method( `First Call Of New Instance` ) ). 39 | out->write( class_Instance_New->my_second_method( ) ). 40 | ENDMETHOD. 41 | 42 | ENDCLASS. 43 | -------------------------------------------------------------------------------- /src/zcl_abap_to_json.clas.abap: -------------------------------------------------------------------------------- 1 | "!ABAP To JSON Example
2 | CLASS zcl_abap_to_json DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES if_oo_adt_classrun. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_ABAP_TO_JSON IMPLEMENTATION. 16 | 17 | 18 | METHOD if_oo_adt_classrun~main. 19 | 20 | SELECT * FROM /DMO/FLIGHT INTO TABLE @DATA(flights). 21 | DATA(json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). 22 | CALL TRANSFORMATION id SOURCE flights = flights 23 | RESULT XML json_writer. 24 | 25 | TRY. 26 | DATA(reader) = cl_sxml_string_reader=>create( json_writer->get_output( ) ). 27 | DATA(writer) = CAST if_sxml_writer( 28 | cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ). 29 | writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ). 30 | writer->set_option( option = if_sxml_writer=>co_opt_indent ). 31 | reader->next_node( ). 32 | reader->skip_node( writer ). 33 | * data(json_output) = cl_abap_codepage=>convert_from( CAST cl_sxml_string_writer( writer )->get_output( ) ). 34 | data(json_output) = CL_ABAP_CONV_CODEPAGE=>CREATE_IN( )->CONVERT( CAST cl_sxml_string_writer( writer )->get_output( ) ). 35 | CATCH cx_sxml_parse_error. 36 | RETURN. 37 | ENDTRY. 38 | out->write( json_output ). 39 | 40 | 41 | ENDMETHOD. 42 | ENDCLASS. 43 | -------------------------------------------------------------------------------- /src/zcl_json_to_xml.clas.abap: -------------------------------------------------------------------------------- 1 | "!Convert JSON to XML
2 | CLASS ZCL_JSON_TO_XML DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_JSON_TO_XML IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | * DATA(json) = cl_abap_codepage=>convert_to( `{"TEXT":"JSON"}` ). 20 | DATA(JSON) = CL_ABAP_CONV_CODEPAGE=>CREATE_OUT( )->CONVERT( `{"TEXT":"JSON"}` ). 21 | DATA(JSON_READER) = CL_SXML_STRING_READER=>CREATE( JSON ). 22 | DATA(XML_WRITER) = CL_SXML_STRING_WRITER=>CREATE( ). 23 | JSON_READER->NEXT_NODE( ). 24 | JSON_READER->SKIP_NODE( XML_WRITER ). 25 | 26 | TRY. 27 | DATA(READER) = CL_SXML_STRING_READER=>CREATE( XML_WRITER->GET_OUTPUT( ) ). 28 | DATA(WRITER) = CAST IF_SXML_WRITER( 29 | CL_SXML_STRING_WRITER=>CREATE( ) ). 30 | WRITER->SET_OPTION( OPTION = IF_SXML_WRITER=>CO_OPT_LINEBREAKS ). 31 | WRITER->SET_OPTION( OPTION = IF_SXML_WRITER=>CO_OPT_INDENT ). 32 | READER->NEXT_NODE( ). 33 | READER->SKIP_NODE( WRITER ). 34 | * DATA(XML_OUTPUT) = CL_ABAP_CODEPAGE=>CONVERT_FROM( CAST CL_SXML_STRING_WRITER( WRITER )->GET_OUTPUT( ) ). 35 | DATA(XML_OUTPUT) = CL_ABAP_CONV_CODEPAGE=>CREATE_IN( )->CONVERT( CAST CL_SXML_STRING_WRITER( WRITER )->GET_OUTPUT( ) ). 36 | CATCH CX_SXML_PARSE_ERROR. 37 | RETURN. 38 | ENDTRY. 39 | 40 | OUT->WRITE( XML_OUTPUT ). 41 | ENDMETHOD. 42 | ENDCLASS. 43 | -------------------------------------------------------------------------------- /src/zcl_inline_declare.clas.abap: -------------------------------------------------------------------------------- 1 | "!ABAP Inline Declaration
2 | CLASS zcl_inline_declare DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES if_oo_adt_classrun. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_INLINE_DECLARE IMPLEMENTATION. 16 | 17 | 18 | METHOD if_oo_adt_classrun~main. 19 | 20 | 21 | SELECT * FROM /dmo/flight INTO TABLE @DATA(flights). 22 | 23 | LOOP AT flights INTO DATA(flight). 24 | ENDLOOP. 25 | 26 | READ TABLE flights INTO DATA(flight2) INDEX 1. 27 | 28 | DATA old TYPE i VALUE 6. 29 | DATA inc TYPE i VALUE 5. 30 | DATA(new) = old + inc. 31 | 32 | DATA(rnd) = cl_abap_random_int=>create( seed = CONV i( CL_ABAP_CONTEXT_INFO=>GET_SYSTEM_TIME( ) ) 33 | min = 0 max = 500 ). 34 | 35 | ****Old Way 36 | FIELD-SYMBOLS:OO Tutorial #3 Tester
2 | CLASS ZCL_OO_TUTORIAL_3_TESTER DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_OO_TUTORIAL_3_TESTER IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | DATA(AA_0017) = NEW ZCL_OO_TUTORIAL_3( 20 | CARRIER_ID = `AA` 21 | CONNECTION_ID = `0017` 22 | FLIGHT_DATE = `20230222` ). 23 | 24 | AA_0017->FLIGHT-PRICE = `0.01`. 25 | AA_0017->CALCULATE_FLIGHT_PRICE( 26 | IMPORTING 27 | PRICE = DATA(PRICE) 28 | CURRENCY_CODE = DATA(CURRENCY_CODE) ). 29 | 30 | OUT->WRITE( |Flight Price for AA-0017 on { CONV /DMO/FLIGHT_DATE( `20230222` ) DATE = ENVIRONMENT }: | && 31 | |{ PRICE CURRENCY = CURRENCY_CODE } { CURRENCY_CODE }| ). 32 | OUT->WRITE( AA_0017->GET_FLIGHT_DETAILS( ) ). 33 | 34 | OUT->WRITE( ` ` ). 35 | DATA(UA_0017) = NEW ZCL_OO_TUTORIAL_3( 36 | CARRIER_ID = `UA` 37 | CONNECTION_ID = `0058` 38 | FLIGHT_DATE = `20200426` ). 39 | 40 | UA_0017->CALCULATE_FLIGHT_PRICE( 41 | IMPORTING 42 | PRICE = DATA(PRICE_BAD) 43 | CURRENCY_CODE = DATA(CURRENCY_CODE_BAD) ). 44 | 45 | OUT->WRITE( |Flight Price for UA-0058 on { CONV /DMO/FLIGHT_DATE( `20200426` ) DATE = ENVIRONMENT }: | && 46 | |{ PRICE_BAD CURRENCY = CURRENCY_CODE_BAD } { CURRENCY_CODE_BAD }| ). 47 | OUT->WRITE( UA_0017->GET_FLIGHT_DETAILS( ) ). 48 | 49 | ENDMETHOD. 50 | ENDCLASS. 51 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_5_tester.clas.abap: -------------------------------------------------------------------------------- 1 | "!OO Tutorial #5 Tester
2 | CLASS ZCL_OO_TUTORIAL_5_TESTER DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_OO_TUTORIAL_5_TESTER IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | 20 | TRY. 21 | DATA(AA_0017) = NEW ZCL_OO_TUTORIAL_5( 22 | CARRIER_ID = `AA` 23 | CONNECTION_ID = `0017` 24 | FLIGHT_DATE = `20230222` ). 25 | DATA(FLIGHT_GOOD) = AA_0017->CALCULATE_FLIGHT_PRICE( ). 26 | OUT->WRITE( |Flight Price for AA-0017 on { CONV /DMO/FLIGHT_DATE( `20230222` ) DATE = ENVIRONMENT }: | && 27 | |{ FLIGHT_GOOD-PRICE CURRENCY = FLIGHT_GOOD-CURRENCY } { FLIGHT_GOOD-CURRENCY }| ). 28 | OUT->WRITE( AA_0017->GET_FLIGHT_DETAILS( ) ). 29 | 30 | OUT->WRITE( ` `). 31 | DATA(UA_0017) = NEW ZCL_OO_TUTORIAL_5( 32 | CARRIER_ID = `UA` 33 | CONNECTION_ID = `0058` 34 | FLIGHT_DATE = `20200426` ). 35 | 36 | DATA(FLIGHT_BAD) = UA_0017->CALCULATE_FLIGHT_PRICE( ). 37 | 38 | OUT->WRITE( |Flight Price for UA-0058 on { CONV /DMO/FLIGHT_DATE( `20220426` ) DATE = ENVIRONMENT }: | && 39 | |{ FLIGHT_BAD-PRICE CURRENCY = FLIGHT_BAD-CURRENCY } { FLIGHT_BAD-CURRENCY }| ). 40 | OUT->WRITE( UA_0017->GET_FLIGHT_DETAILS( ) ). 41 | 42 | CATCH ZCX_OO_TUTORIAL INTO DATA(CX_FLIGHT). 43 | OUT->WRITE( CX_FLIGHT->GET_TEXT( ) ). 44 | ENDTRY. 45 | 46 | ENDMETHOD. 47 | ENDCLASS. 48 | -------------------------------------------------------------------------------- /src/zcx_oo_tutorial.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_OO_TUTORIAL definition 2 | public 3 | inheriting from CX_STATIC_CHECK 4 | final 5 | create public . 6 | 7 | public section. 8 | 9 | interfaces IF_T100_DYN_MSG . 10 | interfaces IF_T100_MESSAGE . 11 | data CARRID type /DMO/CARRIER_ID . 12 | constants: 13 | begin of ZCX_OO_TUTORIAL, 14 | MSGID type SYMSGID value 'ZOO_MESSAGES', 15 | MSGNO type SYMSGNO value '001', 16 | ATTR1 type SCX_ATTRNAME value '', 17 | ATTR2 type SCX_ATTRNAME value '', 18 | ATTR3 type SCX_ATTRNAME value '', 19 | ATTR4 type SCX_ATTRNAME value '', 20 | end of ZCX_OO_TUTORIAL. 21 | 22 | constants: 23 | begin of FLIGHT_NOT_FOUND, 24 | MSGID type SYMSGID value 'ZOO_MESSAGES', 25 | MSGNO type SYMSGNO value '002', 26 | ATTR1 type SCX_ATTRNAME value 'CARRID', 27 | ATTR2 type SCX_ATTRNAME value '', 28 | ATTR3 type SCX_ATTRNAME value '', 29 | ATTR4 type SCX_ATTRNAME value '', 30 | end of FLIGHT_NOT_FOUND. 31 | 32 | methods CONSTRUCTOR 33 | importing 34 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 35 | !PREVIOUS like PREVIOUS optional 36 | !CARRID type /DMO/CARRIER_ID optional . 37 | protected section. 38 | private section. 39 | ENDCLASS. 40 | 41 | 42 | 43 | CLASS ZCX_OO_TUTORIAL IMPLEMENTATION. 44 | 45 | 46 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 47 | call method SUPER->CONSTRUCTOR 48 | exporting 49 | PREVIOUS = PREVIOUS. 50 | clear ME->TEXTID. 51 | if TEXTID is initial. 52 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 53 | else. 54 | IF_T100_MESSAGE~T100KEY = TEXTID. 55 | endif. 56 | ME->CARRID = CARRID . 57 | endmethod. 58 | ENDCLASS. 59 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_2_instance.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_2_instance DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | "!Flight
8 | DATA flight TYPE /dmo/flight. 9 | 10 | "!CONSTRUCTOR
11 | METHODS constructor 12 | IMPORTING 13 | !carrier_id TYPE /dmo/carrier_id 14 | !connection_id TYPE /dmo/connection_id 15 | !flight_date TYPE /dmo/flight_date. 16 | 17 | "!Get Booking Details
18 | METHODS get_flight_details 19 | RETURNING VALUE(flight) TYPE /dmo/flight . 20 | 21 | "!Calculate Flight Price
22 | METHODS calculate_flight_price 23 | EXPORTING 24 | !price TYPE /dmo/flight_price 25 | !currency_code TYPE /dmo/currency_code. 26 | PROTECTED SECTION. 27 | PRIVATE SECTION. 28 | ENDCLASS. 29 | 30 | 31 | 32 | CLASS zcl_2_instance IMPLEMENTATION. 33 | 34 | METHOD calculate_flight_price. 35 | 36 | price = me->flight-price. 37 | currency_code = me->flight-currency_code. 38 | 39 | CASE me->flight-plane_type_id. 40 | WHEN `747-400`. 41 | PRICE = PRICE + 40. 42 | WHEN `A321-200`. 43 | PRICE = PRICE + 25. 44 | WHEN OTHERS. 45 | PRICE = PRICE + 10. 46 | ENDCASE. 47 | ENDMETHOD. 48 | 49 | 50 | METHOD constructor. 51 | SELECT SINGLE * FROM /dmo/flight 52 | WHERE carrier_id = @carrier_id 53 | AND connection_id = @connection_id 54 | AND flight_date = @flight_date 55 | INTO @flight. 56 | ENDMETHOD. 57 | 58 | 59 | METHOD get_flight_details. 60 | flight = me->flight. 61 | ENDMETHOD. 62 | ENDCLASS. 63 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcx_5_composite.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_5_COMPOSITE definition 2 | public 3 | inheriting from CX_STATIC_CHECK 4 | final 5 | create public . 6 | 7 | public section. 8 | 9 | interfaces IF_T100_DYN_MSG . 10 | interfaces IF_T100_MESSAGE . 11 | data CARRID type /DMO/CARRIER_ID . 12 | constants: 13 | begin of ZCX_5_COMPOSITE, 14 | MSGID type SYMSGID value 'ZOO_PATTERNS', 15 | MSGNO type SYMSGNO value '001', 16 | ATTR1 type SCX_ATTRNAME value '', 17 | ATTR2 type SCX_ATTRNAME value '', 18 | ATTR3 type SCX_ATTRNAME value '', 19 | ATTR4 type SCX_ATTRNAME value '', 20 | end of ZCX_5_COMPOSITE. 21 | 22 | constants: 23 | begin of FLIGHT_NOT_FOUND, 24 | MSGID type SYMSGID value 'ZOO_PATTERNS', 25 | MSGNO type SYMSGNO value '002', 26 | ATTR1 type SCX_ATTRNAME value 'CARRID', 27 | ATTR2 type SCX_ATTRNAME value '', 28 | ATTR3 type SCX_ATTRNAME value '', 29 | ATTR4 type SCX_ATTRNAME value '', 30 | end of FLIGHT_NOT_FOUND. 31 | 32 | methods CONSTRUCTOR 33 | importing 34 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 35 | !PREVIOUS like PREVIOUS optional 36 | !CARRID type /DMO/CARRIER_ID optional . 37 | protected section. 38 | private section. 39 | ENDCLASS. 40 | 41 | 42 | 43 | CLASS ZCX_5_COMPOSITE IMPLEMENTATION. 44 | 45 | 46 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 47 | call method SUPER->CONSTRUCTOR 48 | exporting 49 | PREVIOUS = PREVIOUS. 50 | clear ME->TEXTID. 51 | if TEXTID is initial. 52 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 53 | else. 54 | IF_T100_MESSAGE~T100KEY = TEXTID. 55 | endif. 56 | ME->CARRID = CARRID . 57 | endmethod. 58 | ENDCLASS. 59 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_6_base.clas.xml: -------------------------------------------------------------------------------- 1 | 2 |CONSTRUCTOR
19 | METHODS constructor 20 | IMPORTING 21 | !flight TYPE /dmo/flight. 22 | 23 | "!Get a listing of in flight movies
24 | METHODS get_inflight_movies 25 | RETURNING VALUE(movies) TYPE zcl_5_composite_747=>movies_table. 26 | * EXPORTING !MOVIES TYPE ZCL_OO_TUTORIAL_6_747=>MOVIES_TABLE. 27 | 28 | METHODS zif_5_composite~calculate_flight_price 29 | REDEFINITION . 30 | 31 | PROTECTED SECTION. 32 | PRIVATE SECTION. 33 | "!List of Movies on the Flight
34 | DATA MOVIES TYPE MOVIES_TABLE. 35 | ENDCLASS. 36 | 37 | 38 | 39 | CLASS zcl_5_composite_747 IMPLEMENTATION. 40 | 41 | METHOD CONSTRUCTOR. 42 | SUPER->CONSTRUCTOR( 43 | FLIGHT = FLIGHT ). 44 | 45 | INSERT VALUE #( MOVIE_TITLE = `Transformers: Revenge of the Fallen` RUNNING_TIME = `150 min` ) INTO TABLE me->movies. 46 | INSERT VALUE #( MOVIE_TITLE = `The Hangover` RUNNING_TIME = `100 min` ) INTO TABLE me->movies. 47 | 48 | ENDMETHOD. 49 | 50 | METHOD GET_INFLIGHT_MOVIES. 51 | MOVIES = ME->MOVIES. 52 | ENDMETHOD. 53 | 54 | 55 | METHOD zif_5_composite~CALCULATE_FLIGHT_PRICE. 56 | price = SUPER->CALCULATE_FLIGHT_PRICE( ). 57 | PRICE-PRICE = PRICE-PRICE + 35. 58 | 59 | ENDMETHOD. 60 | ENDCLASS. 61 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_2_static.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_2_static DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | "!Get Booking Details
8 | CLASS-METHODS get_flight_details 9 | IMPORTING 10 | !carrier_id TYPE /dmo/carrier_id 11 | !connection_id TYPE /dmo/connection_id 12 | !flight_date TYPE /dmo/flight_date 13 | RETURNING VALUE(flight) TYPE /dmo/flight. 14 | 15 | 16 | "!Calculate Flight Price
17 | CLASS-METHODS calculate_flight_price 18 | IMPORTING 19 | !carrier_id TYPE /dmo/carrier_id 20 | !connection_id TYPE /dmo/connection_id 21 | !flight_date TYPE /dmo/flight_date 22 | EXPORTING 23 | !price TYPE /dmo/flight_price 24 | !currency_code TYPE /dmo/currency_code. 25 | PROTECTED SECTION. 26 | PRIVATE SECTION. 27 | ENDCLASS. 28 | 29 | 30 | 31 | CLASS zcl_2_static IMPLEMENTATION. 32 | METHOD calculate_flight_price. 33 | DATA plane_type TYPE /dmo/plane_type_id. 34 | 35 | SELECT SINGLE price, currency_code, plane_type_id FROM /dmo/flight 36 | WHERE carrier_id = @carrier_id 37 | AND connection_id = @connection_id 38 | AND flight_date = @flight_date 39 | INTO (@price, @currency_code, @plane_type). 40 | 41 | CASE plane_type. 42 | WHEN `747-400`. 43 | price = price + 40. 44 | WHEN `A321-200`. 45 | price = price + 25. 46 | WHEN OTHERS. 47 | price = price + 10. 48 | ENDCASE. 49 | ENDMETHOD. 50 | 51 | 52 | METHOD get_flight_details. 53 | 54 | SELECT SINGLE * FROM /dmo/flight 55 | WHERE carrier_id = @carrier_id 56 | AND connection_id = @connection_id 57 | AND flight_date = @flight_date 58 | INTO @flight. 59 | endmethod. 60 | ENDCLASS. 61 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_3.clas.abap: -------------------------------------------------------------------------------- 1 | "!Flight Data as Instance Methods
2 | CLASS zcl_oo_tutorial_3 DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES if_serializable_object. 9 | "!Flight
10 | DATA flight TYPE /dmo/flight. 11 | 12 | "!CONSTRUCTOR
13 | METHODS constructor 14 | IMPORTING 15 | !carrier_id TYPE /dmo/carrier_id 16 | !connection_id TYPE /dmo/connection_id 17 | !flight_date TYPE /dmo/flight_date. 18 | 19 | "!Get Booking Details
20 | METHODS get_flight_details 21 | RETURNING VALUE(flight) TYPE /dmo/flight . 22 | 23 | "!Calculate Flight Price
24 | METHODS calculate_flight_price 25 | EXPORTING 26 | !price TYPE /dmo/flight_price 27 | !currency_code TYPE /dmo/currency_code. 28 | PROTECTED SECTION. 29 | PRIVATE SECTION. 30 | ENDCLASS. 31 | 32 | 33 | 34 | CLASS ZCL_OO_TUTORIAL_3 IMPLEMENTATION. 35 | 36 | 37 | METHOD calculate_flight_price. 38 | 39 | price = me->flight-price. 40 | currency_code = me->flight-currency_code. 41 | 42 | CASE me->flight-plane_type_id. 43 | WHEN `747-400`. 44 | PRICE = PRICE + 40. 45 | WHEN `A321-200`. 46 | PRICE = PRICE + 25. 47 | WHEN OTHERS. 48 | PRICE = PRICE + 10. 49 | ENDCASE. 50 | ENDMETHOD. 51 | 52 | 53 | METHOD constructor. 54 | SELECT SINGLE * FROM /dmo/flight 55 | WHERE carrier_id = @carrier_id 56 | AND connection_id = @connection_id 57 | AND flight_date = @flight_date 58 | INTO @flight. 59 | ENDMETHOD. 60 | 61 | 62 | METHOD get_flight_details. 63 | flight = me->flight. 64 | ENDMETHOD. 65 | ENDCLASS. 66 | -------------------------------------------------------------------------------- /REUSE.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | SPDX-PackageName = "abap-oo-basics" 3 | SPDX-PackageSupplier = "Thomas JungABAP Class examples with and without Hungarian Notation
2 | CLASS zcl_hungarian_notation DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES if_oo_adt_classrun. 9 | methods mu_export_flights 10 | exporting 11 | !et_flights type /dmo/t_flight. 12 | methods get_flights 13 | exporting 14 | !flights type /dmo/t_flight. 15 | PROTECTED SECTION. 16 | PRIVATE SECTION. 17 | "!All Flights
18 | DATA flights TYPE /dmo/t_flight. 19 | "!All Flights
20 | data git_flights TYPE /dmo/t_flight. 21 | 22 | 23 | ENDCLASS. 24 | 25 | 26 | 27 | CLASS ZCL_HUNGARIAN_NOTATION IMPLEMENTATION. 28 | 29 | 30 | METHOD if_oo_adt_classrun~main. 31 | 32 | select * from /dmo/flight into table @flights. 33 | select * from /dmo/flight into table @git_flights. 34 | select * from @git_flights as FLIGHTS where carrier_id = 'AA' into table @data(lt_flights) . 35 | select * from @flights as FLIGHTS where carrier_id = 'AA' into table @data(flights_american). 36 | 37 | loop at lt_flights REFERENCE INTO data(lr_flight). 38 | if lr_flight->connection_id = '0017'. 39 | endif. 40 | endloop. 41 | 42 | loop at flights_american REFERENCE INTO data(flight). 43 | if flight->connection_id = '0017'. 44 | endif. 45 | endloop. 46 | 47 | mu_export_flights( 48 | IMPORTING 49 | et_flights = data(li_flights) 50 | ). 51 | 52 | get_flights( 53 | IMPORTING 54 | flights = data(processed_flights) 55 | ). 56 | 57 | ENDMETHOD. 58 | 59 | 60 | METHOD mu_export_flights. 61 | et_flights = git_flights. 62 | ENDMETHOD. 63 | 64 | 65 | METHOD get_flights. 66 | flights = me->flights. 67 | ENDMETHOD. 68 | ENDCLASS. 69 | -------------------------------------------------------------------------------- /src/zobject_xml.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 |CONSTRUCTOR
15 | METHODS CONSTRUCTOR 16 | IMPORTING 17 | !CARRIER_ID TYPE /DMO/CARRIER_ID 18 | !CONNECTION_ID TYPE /DMO/CONNECTION_ID 19 | !FLIGHT_DATE TYPE /DMO/FLIGHT_DATE. 20 | 21 | "!Get Booking Details
22 | METHODS GET_FLIGHT_DETAILS 23 | RETURNING VALUE(FLIGHT) TYPE /DMO/FLIGHT. 24 | 25 | "!Calculate Flight Price
26 | METHODS CALCULATE_FLIGHT_PRICE 27 | RETURNING 28 | VALUE(PRICE) TYPE COST. 29 | 30 | PROTECTED SECTION. 31 | PRIVATE SECTION. 32 | "!Flight
33 | DATA FLIGHT TYPE /DMO/FLIGHT. 34 | ENDCLASS. 35 | 36 | 37 | 38 | CLASS ZCL_OO_TUTORIAL_4 IMPLEMENTATION. 39 | 40 | 41 | METHOD CALCULATE_FLIGHT_PRICE. 42 | 43 | PRICE-PRICE = ME->FLIGHT-PRICE. 44 | PRICE-CURRENCY = ME->FLIGHT-CURRENCY_CODE. 45 | 46 | CASE ME->FLIGHT-PLANE_TYPE_ID. 47 | WHEN '747-400'. 48 | PRICE-PRICE = PRICE-PRICE + 40. 49 | WHEN `A321-200`. 50 | PRICE-PRICE = PRICE-PRICE + 25. 51 | WHEN OTHERS. 52 | PRICE-PRICE = PRICE-PRICE + 10. 53 | ENDCASE. 54 | ENDMETHOD. 55 | 56 | 57 | METHOD CONSTRUCTOR. 58 | SELECT SINGLE * FROM /DMO/FLIGHT 59 | WHERE CARRIER_ID = @CARRIER_ID 60 | AND CONNECTION_ID = @CONNECTION_ID 61 | AND FLIGHT_DATE = @FLIGHT_DATE 62 | INTO @FLIGHT. 63 | ENDMETHOD. 64 | 65 | 66 | METHOD GET_FLIGHT_DETAILS. 67 | FLIGHT = ME->FLIGHT. 68 | ENDMETHOD. 69 | ENDCLASS. 70 | -------------------------------------------------------------------------------- /src/zcl_abap_to_json_id.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abap_to_json_id DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES if_oo_adt_classrun. 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS ZCL_ABAP_TO_JSON_ID IMPLEMENTATION. 15 | 16 | 17 | METHOD if_oo_adt_classrun~main. 18 | 19 | DATA(ua_0058) = NEW zcl_oo_tutorial_5( 20 | carrier_id = `UA` 21 | connection_id = `0058` 22 | flight_date = `20220426` ). 23 | DATA(json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). 24 | CALL TRANSFORMATION id SOURCE flight = ua_0058 25 | RESULT XML json_writer. "data(json_out). "json_writer. DATA(json_out). 26 | * out->write( json_out ). 27 | * clear ua_0058. 28 | * data object_xml type zobject_xml. 29 | * object_xml-id = 1. 30 | * object_xml-content = json_out. 31 | * MODIFY ZOBJECT_XML from @object_xml. 32 | * data context2 type ref to zcl_oo_tutorial_5. 33 | * CALL TRANSFORMATION id SOURCE XML json_out 34 | * RESULT flight = context2. 35 | * out->write( context2->get_flight_details( ) ). 36 | 37 | TRY. 38 | DATA(reader) = cl_sxml_string_reader=>create( json_writer->get_output( ) ). 39 | DATA(writer) = CAST if_sxml_writer( 40 | cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ). 41 | writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ). 42 | writer->set_option( option = if_sxml_writer=>co_opt_indent ). 43 | reader->next_node( ). 44 | reader->skip_node( writer ). 45 | DATA(json_output) = cl_abap_conv_codepage=>create_in( )->convert( CAST cl_sxml_string_writer( writer )->get_output( ) ). 46 | CATCH cx_sxml_parse_error into data(error). 47 | out->write( error->get_text( ) ). 48 | RETURN. 49 | ENDTRY. 50 | out->write( json_output ). 51 | ENDMETHOD. 52 | ENDCLASS. 53 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_5a_tester.clas.abap: -------------------------------------------------------------------------------- 1 | "!OO Tutorial #5A - Tester with iTab of references
2 | CLASS ZCL_OO_TUTORIAL_5A_TESTER DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_OO_TUTORIAL_5A_TESTER IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | 20 | TYPES: BEGIN OF T_FLIGHT_REF, 21 | CARRIER_ID TYPE /DMO/CARRIER_ID, 22 | CONNECTION_ID TYPE /DMO/CONNECTION_ID, 23 | FLIGHT_DATE TYPE /DMO/FLIGHT_DATE, 24 | FLIGHT_OBJECT TYPE REF TO ZCL_OO_TUTORIAL_5, 25 | END OF T_FLIGHT_REF. 26 | DATA FLIGHTS TYPE STANDARD TABLE OF T_FLIGHT_REF WITH EMPTY KEY. 27 | TRY. 28 | SELECT CARRIER_ID, CONNECTION_ID, FLIGHT_DATE 29 | FROM /DMO/FLIGHT 30 | INTO CORRESPONDING FIELDS OF TABLE @FLIGHTS. 31 | INSERT VALUE #( CARRIER_ID = `UA` CONNECTION_ID = `0058` FLIGHT_DATE = `20220426` ) INTO TABLE FLIGHTS. 32 | 33 | LOOP AT FLIGHTS REFERENCE INTO DATA(FLIGHT). 34 | FLIGHT->FLIGHT_OBJECT = NEW ZCL_OO_TUTORIAL_5( 35 | CARRIER_ID = FLIGHT->CARRIER_ID 36 | CONNECTION_ID = FLIGHT->CONNECTION_ID 37 | FLIGHT_DATE = FLIGHT->FLIGHT_DATE ). 38 | DATA(FLIGHT_PRICE) = FLIGHT->FLIGHT_OBJECT->CALCULATE_FLIGHT_PRICE( ). 39 | OUT->WRITE( |Flight Price for { FLIGHT->CARRIER_ID }-{ FLIGHT->CONNECTION_ID } on { FLIGHT->FLIGHT_DATE DATE = ENVIRONMENT }: | && 40 | |{ FLIGHT_PRICE-PRICE CURRENCY = FLIGHT_PRICE-CURRENCY } { FLIGHT_PRICE-CURRENCY }| ). 41 | OUT->WRITE( FLIGHT->FLIGHT_OBJECT->GET_FLIGHT_DETAILS( ) ). 42 | OUT->WRITE( ` `). 43 | ENDLOOP. 44 | 45 | 46 | CATCH ZCX_OO_TUTORIAL INTO DATA(CX_FLIGHT). 47 | OUT->WRITE( CX_FLIGHT->GET_TEXT( ) ). 48 | ENDTRY. 49 | ENDMETHOD. 50 | ENDCLASS. 51 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_6_747.clas.abap: -------------------------------------------------------------------------------- 1 | "!OO Tutorial #6 - Planetype 747
2 | CLASS ZCL_OO_TUTORIAL_6_747 DEFINITION 3 | PUBLIC 4 | INHERITING FROM ZCL_OO_TUTORIAL_6_BASE 5 | FINAL 6 | CREATE PROTECTED 7 | GLOBAL FRIENDS ZCL_OO_TUTORIAL_6_BASE. 8 | 9 | PUBLIC SECTION. 10 | 11 | TYPES: 12 | BEGIN OF MOVIE, 13 | MOVIE_TITLE TYPE string, 14 | RUNNING_TIME TYPE string, 15 | END OF MOVIE. 16 | TYPES: 17 | MOVIES_TABLE TYPE STANDARD TABLE OF MOVIE WITH EMPTY KEY. 18 | 19 | "!CONSTRUCTOR
20 | METHODS CONSTRUCTOR 21 | IMPORTING 22 | !FLIGHT TYPE /DMO/FLIGHT. 23 | 24 | 25 | "!Get a listing of in flight movies
26 | METHODS GET_INFLIGHT_MOVIES 27 | returning value(movies) type ZCL_OO_TUTORIAL_6_747=>MOVIES_TABLE. 28 | * EXPORTING !MOVIES TYPE ZCL_OO_TUTORIAL_6_747=>MOVIES_TABLE. 29 | 30 | METHODS ZIF_OO_TUTORIAL~CALCULATE_FLIGHT_PRICE 31 | REDEFINITION . 32 | PROTECTED SECTION. 33 | *"* protected components of class ZCL_OO_TUTORIAL_6_747 34 | *"* do not include other source files here!!! 35 | PRIVATE SECTION. 36 | *"* private components of class ZCL_OO_TUTORIAL_6_747 37 | *"* do not include other source files here!!! 38 | 39 | "!List of Movies on the Flight
40 | DATA MOVIES TYPE MOVIES_TABLE. 41 | 42 | ENDCLASS. 43 | 44 | 45 | 46 | CLASS ZCL_OO_TUTORIAL_6_747 IMPLEMENTATION. 47 | 48 | 49 | METHOD CONSTRUCTOR. 50 | SUPER->CONSTRUCTOR( 51 | FLIGHT = FLIGHT ). 52 | 53 | INSERT VALUE #( MOVIE_TITLE = `Transformers: Revenge of the Fallen` RUNNING_TIME = `150 min` ) INTO TABLE me->movies. 54 | INSERT VALUE #( MOVIE_TITLE = `The Hangover` RUNNING_TIME = `100 min` ) INTO TABLE me->movies. 55 | 56 | ENDMETHOD. 57 | 58 | 59 | METHOD GET_INFLIGHT_MOVIES. 60 | MOVIES = ME->MOVIES. 61 | ENDMETHOD. 62 | 63 | 64 | METHOD ZIF_OO_TUTORIAL~CALCULATE_FLIGHT_PRICE. 65 | price = SUPER->CALCULATE_FLIGHT_PRICE( ). 66 | PRICE-PRICE = PRICE-PRICE + 35. 67 | 68 | ENDMETHOD. 69 | ENDCLASS. 70 | -------------------------------------------------------------------------------- /src/zcl_simple_example.clas.abap: -------------------------------------------------------------------------------- 1 | "!Simple Example Class
2 | CLASS ZCL_SIMPLE_EXAMPLE DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | TYPES: 10 | BEGIN OF FLIGHT_NESTED, 11 | CARRIER_ID TYPE /DMO/CARRIER_ID, 12 | CONNECTION_ID TYPE /DMO/CONNECTION_ID, 13 | FLIGHT_DATE TYPE /DMO/FLIGHT_DATE, 14 | PRICE TYPE /DMO/FLIGHT_PRICE, 15 | CURRENCY_CODE TYPE /DMO/CURRENCY_CODE, 16 | PLANE_TYPE_ID TYPE /DMO/PLANE_TYPE_ID, 17 | BOOKING TYPE STANDARD TABLE OF /DMO/BOOKING WITH EMPTY KEY, 18 | END OF FLIGHT_NESTED. 19 | 20 | TYPES: 21 | BEGIN OF EXAMPLE_TYPE, 22 | C1 TYPE I, 23 | C2 TYPE C LENGTH 10, 24 | CARRIER_ID TYPE /DMO/CARRIER_ID, 25 | CONNECTION_ID TYPE /DMO/CONNECTION_ID, 26 | FLIGHT TYPE STANDARD TABLE OF FLIGHT_NESTED WITH EMPTY KEY, 27 | END OF EXAMPLE_TYPE. 28 | TYPES: 29 | EXAMPLE_TABLE_TYPE TYPE STANDARD TABLE OF EXAMPLE_TYPE WITH EMPTY KEY. 30 | 31 | METHODS CONSTRUCTOR 32 | IMPORTING 33 | !INPUT1 TYPE STRING 34 | !INPUT2 TYPE STRING . 35 | CLASS-METHODS METHOD1 36 | IMPORTING 37 | !TABLE TYPE EXAMPLE_TABLE_TYPE . 38 | CLASS-METHODS METHOD2 39 | IMPORTING 40 | !FLIGHT TYPE /DMO/FLIGHT. 41 | CLASS-METHODS METHOD3 42 | IMPORTING 43 | !FLIGHT TYPE REF TO /DMO/FLIGHT. 44 | CLASS-METHODS METHOD4 45 | IMPORTING 46 | !CONNECTION_ID TYPE /DMO/CONNECTION_ID 47 | RETURNING 48 | VALUE(CONNECTION_OUTPUT) TYPE /DMO/CONNECTION_ID. 49 | CLASS-METHODS GET_SIZE 50 | RETURNING 51 | VALUE(SIZE) TYPE I . 52 | CLASS-METHODS SIZE_OK 53 | IMPORTING 54 | !SIZE TYPE I 55 | RETURNING 56 | VALUE(OK) TYPE ABAP_BOOL . 57 | PROTECTED SECTION. 58 | PRIVATE SECTION. 59 | ENDCLASS. 60 | 61 | 62 | 63 | CLASS ZCL_SIMPLE_EXAMPLE IMPLEMENTATION. 64 | 65 | 66 | METHOD CONSTRUCTOR. 67 | ENDMETHOD. 68 | 69 | 70 | METHOD GET_SIZE. 71 | SIZE = 10. 72 | ENDMETHOD. 73 | 74 | 75 | METHOD METHOD1. 76 | ENDMETHOD. 77 | 78 | 79 | METHOD METHOD2. 80 | ENDMETHOD. 81 | 82 | 83 | METHOD METHOD3. 84 | ENDMETHOD. 85 | 86 | 87 | METHOD METHOD4. 88 | CONNECTION_OUTPUT = CONNECTION_ID. 89 | ENDMETHOD. 90 | 91 | 92 | METHOD SIZE_OK. 93 | OK = XSDBOOL( SIZE > 0 ). 94 | ENDMETHOD. 95 | ENDCLASS. 96 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_2_static_and_inst_tester.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_2_static_and_inst_tester DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES if_oo_adt_classrun. 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS zcl_2_static_and_inst_tester IMPLEMENTATION. 15 | METHOD if_oo_adt_classrun~main. 16 | 17 | 18 | **** Static 19 | zcl_2_static=>calculate_flight_price( 20 | EXPORTING 21 | carrier_id = `AA` 22 | connection_id = `0017` 23 | flight_date = `20230222` 24 | IMPORTING 25 | price = DATA(price) 26 | currency_code = DATA(currency_code) ). 27 | out->write( |Flight Price for AA-0017 on { CONV /dmo/flight_date( `20230222` ) DATE = ENVIRONMENT }: | && 28 | |{ price CURRENCY = currency_code } { currency_code }| ). 29 | 30 | zcl_2_static=>calculate_flight_price( 31 | EXPORTING 32 | carrier_id = `UA` 33 | connection_id = `0058` 34 | flight_date = `20220426` 35 | IMPORTING 36 | price = DATA(price_bad) 37 | currency_code = DATA(currency_code_bad) ). 38 | out->write( |Flight Price for UA-0058 on { CONV /dmo/flight_date( `20220426` ) DATE = ENVIRONMENT }: | && 39 | |{ price_bad CURRENCY = currency_code_bad } { currency_code_bad }| ). 40 | 41 | out->write( zcl_2_static=>get_flight_details( 42 | carrier_id = `AA` 43 | connection_id = `0017` 44 | flight_date = `20230222` ) ). 45 | 46 | out->write( zcl_2_static=>get_flight_details( 47 | carrier_id = `UA` 48 | connection_id = `0058` 49 | flight_date = `20220426` ) ). 50 | 51 | **** Instance 52 | DATA(aa_0017) = NEW zcl_oo_tutorial_3( 53 | carrier_id = `AA` 54 | connection_id = `0017` 55 | flight_date = `20230222` ). 56 | 57 | aa_0017->flight-price = `0.01`. 58 | aa_0017->calculate_flight_price( 59 | IMPORTING 60 | price = price 61 | currency_code = currency_code ). 62 | 63 | out->write( |\nFlight Price for AA-0017 on { CONV /dmo/flight_date( `20230222` ) DATE = ENVIRONMENT }: | && 64 | |{ price CURRENCY = currency_code } { currency_code }| ). 65 | out->write( aa_0017->get_flight_details( ) ). 66 | 67 | out->write( ` ` ). 68 | DATA(ua_0017) = NEW zcl_oo_tutorial_3( 69 | carrier_id = `UA` 70 | connection_id = `0058` 71 | flight_date = `20200426` ). 72 | 73 | ua_0017->calculate_flight_price( 74 | IMPORTING 75 | price = price_bad 76 | currency_code = currency_code_bad ). 77 | 78 | out->write( |\nFlight Price for UA-0058 on { CONV /dmo/flight_date( `20200426` ) DATE = ENVIRONMENT }: | && 79 | |{ price_bad CURRENCY = currency_code_bad } { currency_code_bad }| ). 80 | out->write( ua_0017->get_flight_details( ) ). 81 | ENDMETHOD. 82 | ENDCLASS. 83 | -------------------------------------------------------------------------------- /src/zcl_obj_xml_test.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_obj_xml_test DEFINITION 2 | PUBLIC 3 | CREATE PUBLIC . 4 | 5 | PUBLIC SECTION. 6 | 7 | INTERFACES if_http_service_extension . 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS ZCL_OBJ_XML_TEST IMPLEMENTATION. 15 | 16 | 17 | METHOD if_http_service_extension~handle_request. 18 | CASE request->get_method( ). 19 | WHEN CONV string( if_web_http_client=>get ). 20 | TRY. 21 | DATA(key) = request->get_form_field( 'key' ). 22 | IF key IS INITIAL. 23 | response->set_status( i_code = if_web_http_status=>bad_request i_reason = `Key Not Supplied` ). 24 | response->set_text( `Key Not Supplied` ). 25 | RETURN. 26 | ENDIF. 27 | SELECT SINGLE * FROM zobject_xml 28 | WHERE id = @( CONV #( key ) ) INTO @DATA(object_xml). 29 | if sy-subrc ne 0. 30 | response->set_status( i_code = if_web_http_status=>bad_request i_reason = `Invalid Key` ). 31 | response->set_text( `Invalid Key` ). 32 | RETURN. 33 | endif. 34 | 35 | DATA context2 TYPE REF TO zcl_oo_tutorial_5. 36 | 37 | CALL TRANSFORMATION id SOURCE XML object_xml-content 38 | RESULT flight = context2. 39 | DATA(json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). 40 | CALL TRANSFORMATION id SOURCE flight = context2 41 | RESULT XML json_writer. "DATA(json_out). 42 | * response->set_header_field( i_name = 'Content-Type' i_value = 'application/xml' ). 43 | * response->set_binary( object_xml-content ). 44 | 45 | TRY. 46 | DATA(reader) = cl_sxml_string_reader=>create( json_writer->get_output( ) ). 47 | DATA(writer) = CAST if_sxml_writer( 48 | cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ). 49 | writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ). 50 | writer->set_option( option = if_sxml_writer=>co_opt_indent ). 51 | reader->next_node( ). 52 | reader->skip_node( writer ). 53 | DATA(json_output) = cl_abap_conv_codepage=>create_in( )->convert( CAST cl_sxml_string_writer( writer )->get_output( ) ). 54 | response->set_header_field( i_name = 'Content-Type' i_value = 'application/json' ). 55 | response->set_text( json_output ). 56 | CATCH cx_sxml_parse_error INTO DATA(error). 57 | response->set_status( i_code = if_web_http_status=>bad_request i_reason = error->get_text( ) ). 58 | response->set_text( error->get_text( ) ). 59 | RETURN. 60 | ENDTRY. 61 | CATCH cx_web_message_error INTO DATA(web_error). 62 | response->set_status( i_code = if_web_http_status=>bad_request i_reason = web_error->get_text( ) ). 63 | response->set_text( web_error->get_text( ) ). 64 | ENDTRY. 65 | ENDCASE. 66 | 67 | ENDMETHOD. 68 | ENDCLASS. 69 | -------------------------------------------------------------------------------- /src/zabap_oo_patterns/zcl_5_composite_base.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_5_composite_base DEFINITION 2 | PUBLIC 3 | ABSTRACT 4 | CREATE PROTECTED. 5 | 6 | PUBLIC SECTION. 7 | INTERFACES zif_5_composite. 8 | 9 | ALIASES calculate_flight_price 10 | FOR zif_5_composite~calculate_flight_price . 11 | ALIASES get_flight_details 12 | FOR zif_5_composite~get_flight_details . 13 | ALIASES cost 14 | FOR zif_5_composite~cost . 15 | 16 | CONSTANTS: 17 | "!Plane Type Enumerator
18 | BEGIN OF plane_type, 19 | b747 TYPE /dmo/plane_type_id VALUE `747`, 20 | a340 TYPE /dmo/plane_type_id VALUE `A340`, 21 | END OF plane_type . 22 | 23 | "!CONSTRUCTOR
24 | METHODS constructor 25 | IMPORTING 26 | !flight TYPE /dmo/flight . 27 | 28 | "!Get Filght Object
29 | CLASS-METHODS factory 30 | IMPORTING 31 | !carrier_id TYPE /dmo/carrier_id 32 | !connection_id TYPE /dmo/connection_id 33 | !flight_date TYPE /dmo/flight_date 34 | RETURNING 35 | VALUE(flight) TYPE REF TO zcl_5_composite_base 36 | RAISING 37 | zcx_5_composite. 38 | PROTECTED SECTION. 39 | "!Flight
40 | DATA flight TYPE /dmo/flight . 41 | 42 | PRIVATE SECTION. 43 | "!Base Class Name
44 | CONSTANTS class_base_name TYPE string VALUE `ZCL_5_COMPOSITE_`. "#EC NOTEXT 45 | "!Class Name Other
46 | CONSTANTS class_other TYPE string VALUE `OTHER`. "#EC NOTEXT 47 | ENDCLASS. 48 | 49 | 50 | 51 | CLASS zcl_5_composite_base IMPLEMENTATION. 52 | METHOD constructor. 53 | me->flight = flight. 54 | ENDMETHOD. 55 | 56 | METHOD factory. 57 | 58 | SELECT SINGLE * FROM /dmo/flight 59 | WHERE carrier_id = @carrier_id 60 | AND connection_id = @connection_id 61 | AND flight_date = @flight_date 62 | INTO @DATA(flight_temp). 63 | IF sy-subrc NE 0. 64 | RAISE EXCEPTION NEW zcx_5_composite( textid = zcx_5_composite=>flight_not_found 65 | carrid = carrier_id ). 66 | ENDIF. 67 | 68 | DATA class_name TYPE string. 69 | IF flight_temp-plane_type_id CS ZCL_5_COMPOSITE_BASE=>plane_type-b747. 70 | class_name = ZCL_5_COMPOSITE_BASE=>class_base_name && 71 | ZCL_5_COMPOSITE_BASE=>plane_type-b747. 72 | 73 | ELSEIF flight_temp-plane_type_id CS ZCL_5_COMPOSITE_BASE=>plane_type-a340. 74 | class_name = ZCL_5_COMPOSITE_BASE=>class_base_name && 75 | ZCL_5_COMPOSITE_BASE=>plane_type-a340. 76 | ELSE. 77 | class_name = ZCL_5_COMPOSITE_BASE=>class_base_name && 78 | ZCL_5_COMPOSITE_BASE=>class_other. 79 | ENDIF. 80 | 81 | CREATE OBJECT flight TYPE (class_name) 82 | EXPORTING 83 | flight = flight_temp. 84 | 85 | ENDMETHOD. 86 | 87 | 88 | METHOD zif_5_composite~calculate_flight_price. 89 | 90 | price-price = me->flight-price + 100. 91 | price-currency = me->flight-currency_code. 92 | 93 | ENDMETHOD. 94 | 95 | 96 | METHOD zif_5_composite~get_flight_details. 97 | flight = me->flight. 98 | ENDMETHOD. 99 | 100 | ENDCLASS. 101 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_5.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_oo_tutorial_5 DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES if_serializable_object. 8 | 9 | TYPES: 10 | BEGIN OF cost, 11 | price TYPE /dmo/flight_price, 12 | currency TYPE /dmo/currency_code, 13 | END OF cost . 14 | DATA nested TYPE zcl_simple_example=>example_table_type. 15 | "!CONSTRUCTOR
16 | METHODS constructor 17 | IMPORTING 18 | !carrier_id TYPE /dmo/carrier_id 19 | !connection_id TYPE /dmo/connection_id 20 | !flight_date TYPE /dmo/flight_date 21 | RAISING zcx_oo_tutorial. 22 | 23 | "!Get Booking Details
24 | METHODS get_flight_details 25 | RETURNING VALUE(flight) TYPE /dmo/flight. 26 | 27 | "!Calculate Flight Price
28 | METHODS calculate_flight_price 29 | RETURNING 30 | VALUE(price) TYPE cost. 31 | 32 | "!Flight
33 | 34 | DATA test TYPE c LENGTH 10 VALUE 'HI'. 35 | DATA test_string_table TYPE string_table. 36 | PROTECTED SECTION. 37 | PRIVATE SECTION. 38 | DATA flight TYPE /dmo/flight. 39 | DATA obj3 TYPE REF TO zcl_oo_tutorial_3. 40 | "DATA nested TYPE zcl_simple_example=>example_table_type. 41 | 42 | ENDCLASS. 43 | 44 | 45 | 46 | CLASS ZCL_OO_TUTORIAL_5 IMPLEMENTATION. 47 | 48 | 49 | METHOD calculate_flight_price. 50 | 51 | price-price = me->flight-price. 52 | price-currency = me->flight-currency_code. 53 | 54 | CASE me->flight-plane_type_id. 55 | WHEN '747-400'. 56 | price-price = price-price + 40. 57 | WHEN `A321-200`. 58 | price-price = price-price + 25. 59 | WHEN OTHERS. 60 | price-price = price-price + 10. 61 | ENDCASE. 62 | ENDMETHOD. 63 | 64 | 65 | METHOD constructor. 66 | 67 | SELECT * FROM /dmo/connection WHERE carrier_id = 'AA' INTO CORRESPONDING FIELDS OF TABLE @nested. 68 | LOOP AT nested REFERENCE INTO DATA(connection). 69 | SELECT * FROM /dmo/flight 70 | WHERE carrier_id = @connection->carrier_id AND connection_id = @connection->connection_id 71 | INTO CORRESPONDING FIELDS OF TABLE @connection->flight. 72 | LOOP AT connection->flight REFERENCE INTO DATA(flightTemp). 73 | SELECT * FROM /dmo/booking 74 | WHERE carrier_id = @connection->carrier_id AND connection_id = @connection->connection_id AND flight_date = @flightTemp->flight_date 75 | INTO CORRESPONDING FIELDS OF TABLE @flightTemp->booking. 76 | ENDLOOP. 77 | ENDLOOP. 78 | 79 | SELECT SINGLE * FROM /dmo/flight 80 | WHERE carrier_id = @carrier_id 81 | AND connection_id = @connection_id 82 | AND flight_date = @flight_date 83 | INTO @flight. 84 | IF sy-subrc NE 0. 85 | RAISE EXCEPTION NEW zcx_oo_tutorial( 86 | textid = zcx_oo_tutorial=>flight_not_found 87 | carrid = carrier_id ). 88 | ELSE. 89 | me->obj3 = NEW zcl_oo_tutorial_3( 90 | carrier_id = flight-carrier_id 91 | connection_id = flight-connection_id 92 | flight_date = flight-flight_date ). 93 | ENDIF. 94 | ENDMETHOD. 95 | 96 | 97 | METHOD get_flight_details. 98 | flight = me->flight. 99 | ENDMETHOD. 100 | ENDCLASS. 101 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_2.clas.abap: -------------------------------------------------------------------------------- 1 | "!Flight Data as Static Methods
2 | CLASS ZCL_OO_TUTORIAL_2 DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | 10 | "!Get Booking Details
11 | CLASS-METHODS GET_FLIGHT_DETAILS 12 | IMPORTING 13 | !CARRIER_ID TYPE /DMO/CARRIER_ID 14 | !CONNECTION_ID TYPE /DMO/CONNECTION_ID 15 | !FLIGHT_DATE TYPE /DMO/FLIGHT_DATE 16 | RETURNING VALUE(FLIGHT) TYPE /DMO/FLIGHT. 17 | 18 | 19 | "!Calculate Flight Price
20 | CLASS-METHODS CALCULATE_FLIGHT_PRICE 21 | IMPORTING 22 | !CARRIER_ID TYPE /DMO/CARRIER_ID 23 | !CONNECTION_ID TYPE /DMO/CONNECTION_ID 24 | !FLIGHT_DATE TYPE /DMO/FLIGHT_DATE 25 | EXPORTING 26 | !PRICE TYPE /DMO/FLIGHT_PRICE 27 | !CURRENCY_CODE TYPE /DMO/CURRENCY_CODE. 28 | 29 | PROTECTED SECTION. 30 | PRIVATE SECTION. 31 | ENDCLASS. 32 | 33 | 34 | 35 | CLASS ZCL_OO_TUTORIAL_2 IMPLEMENTATION. 36 | 37 | 38 | METHOD CALCULATE_FLIGHT_PRICE. 39 | DATA PLANE_TYPE TYPE /DMO/PLANE_TYPE_ID. 40 | 41 | SELECT SINGLE PRICE, CURRENCY_CODE, PLANE_TYPE_ID FROM /DMO/FLIGHT 42 | WHERE CARRIER_ID = @CARRIER_ID 43 | AND CONNECTION_ID = @CONNECTION_ID 44 | AND FLIGHT_DATE = @FLIGHT_DATE 45 | INTO (@PRICE, @CURRENCY_CODE, @PLANE_TYPE). 46 | 47 | CASE PLANE_TYPE. 48 | WHEN `747-400`. 49 | PRICE = PRICE + 40. 50 | WHEN `A321-200`. 51 | PRICE = PRICE + 25. 52 | WHEN OTHERS. 53 | PRICE = PRICE + 10. 54 | ENDCASE. 55 | ENDMETHOD. 56 | 57 | 58 | METHOD GET_FLIGHT_DETAILS. 59 | 60 | SELECT SINGLE * FROM /DMO/FLIGHT 61 | WHERE CARRIER_ID = @CARRIER_ID 62 | AND CONNECTION_ID = @CONNECTION_ID 63 | AND FLIGHT_DATE = @FLIGHT_DATE 64 | INTO @FLIGHT. 65 | 66 | ENDMETHOD. 67 | 68 | 69 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 70 | 71 | ME->CALCULATE_FLIGHT_PRICE( 72 | EXPORTING 73 | CARRIER_ID = `AA` 74 | CONNECTION_ID = `0017` 75 | FLIGHT_DATE = `20230222` 76 | IMPORTING 77 | PRICE = DATA(PRICE) 78 | CURRENCY_CODE = DATA(CURRENCY_CODE) ). 79 | OUT->WRITE( |Flight Price for AA-0017 on { CONV /DMO/FLIGHT_DATE( `20230222` ) DATE = ENVIRONMENT }: | && 80 | |{ PRICE CURRENCY = CURRENCY_CODE } { CURRENCY_CODE }| ). 81 | 82 | ME->CALCULATE_FLIGHT_PRICE( 83 | EXPORTING 84 | CARRIER_ID = `UA` 85 | CONNECTION_ID = `0058` 86 | FLIGHT_DATE = `20220426` 87 | IMPORTING 88 | PRICE = DATA(PRICE_BAD) 89 | CURRENCY_CODE = DATA(CURRENCY_CODE_BAD) ). 90 | OUT->WRITE( |Flight Price for UA-0058 on { CONV /DMO/FLIGHT_DATE( `20220426` ) DATE = ENVIRONMENT }: | && 91 | |{ PRICE_BAD CURRENCY = CURRENCY_CODE_BAD } { CURRENCY_CODE_BAD }| ). 92 | 93 | OUT->WRITE( ME->GET_FLIGHT_DETAILS( 94 | CARRIER_ID = `AA` 95 | CONNECTION_ID = `0017` 96 | FLIGHT_DATE = `20230222` ) ). 97 | 98 | OUT->WRITE( ME->GET_FLIGHT_DETAILS( 99 | CARRIER_ID = `UA` 100 | CONNECTION_ID = `0058` 101 | FLIGHT_DATE = `20220426` ) ). 102 | ENDMETHOD. 103 | ENDCLASS. 104 | -------------------------------------------------------------------------------- /src/zcl_oo_tutorial_6_base.clas.abap: -------------------------------------------------------------------------------- 1 | "!Flight Data Basic Class
2 | CLASS ZCL_OO_TUTORIAL_6_BASE DEFINITION 3 | PUBLIC 4 | abstract 5 | CREATE PROTECTED. 6 | 7 | PUBLIC SECTION. 8 | INTERFACES ZIF_OO_TUTORIAL. 9 | 10 | 11 | ALIASES CALCULATE_FLIGHT_PRICE 12 | FOR ZIF_OO_TUTORIAL~CALCULATE_FLIGHT_PRICE . 13 | ALIASES GET_FLIGHT_DETAILS 14 | FOR ZIF_OO_TUTORIAL~GET_FLIGHT_DETAILS . 15 | ALIASES COST 16 | FOR ZIF_OO_TUTORIAL~COST . 17 | 18 | CONSTANTS: 19 | "!Plane Type Enumerator
20 | BEGIN OF PLANE_TYPE, 21 | B747 TYPE /DMO/PLANE_TYPE_ID VALUE `747`, 22 | A340 TYPE /DMO/PLANE_TYPE_ID VALUE `A340`, 23 | END OF PLANE_TYPE . 24 | 25 | "!CONSTRUCTOR
26 | METHODS CONSTRUCTOR 27 | IMPORTING 28 | !FLIGHT TYPE /DMO/FLIGHT . 29 | 30 | "!Get Filght Object
31 | CLASS-METHODS GET_FLIGHT_OBJECT 32 | IMPORTING 33 | !CARRIER_ID TYPE /DMO/CARRIER_ID 34 | !CONNECTION_ID TYPE /DMO/CONNECTION_ID 35 | !FLIGHT_DATE TYPE /DMO/FLIGHT_DATE 36 | RETURNING 37 | VALUE(FLIGHT) TYPE REF TO ZCL_OO_TUTORIAL_6_BASE 38 | RAISING 39 | ZCX_OO_TUTORIAL. 40 | PROTECTED SECTION. 41 | *"* protected components of class ZCL_OO_TUTORIAL_6_BASE 42 | *"* do not include other source files here!!! 43 | 44 | "!Flight
45 | DATA FLIGHT TYPE /DMO/FLIGHT . 46 | 47 | PRIVATE SECTION. 48 | "!Base Class Name
49 | CONSTANTS CLASS_BASE_NAME TYPE STRING VALUE `ZCL_OO_TUTORIAL_6_`. "#EC NOTEXT 50 | "!Class Name Other
51 | CONSTANTS CLASS_OTHER TYPE STRING VALUE `OTHER`. "#EC NOTEXT 52 | ENDCLASS. 53 | 54 | 55 | 56 | CLASS ZCL_OO_TUTORIAL_6_BASE IMPLEMENTATION. 57 | 58 | 59 | METHOD CONSTRUCTOR. 60 | ME->FLIGHT = FLIGHT. 61 | ENDMETHOD. 62 | 63 | 64 | METHOD GET_FLIGHT_OBJECT. 65 | 66 | SELECT SINGLE * FROM /DMO/FLIGHT 67 | WHERE CARRIER_ID = @CARRIER_ID 68 | AND CONNECTION_ID = @CONNECTION_ID 69 | AND FLIGHT_DATE = @FLIGHT_DATE 70 | INTO @DATA(FLIGHT_TEMP). 71 | IF SY-SUBRC NE 0. 72 | RAISE EXCEPTION NEW ZCX_OO_TUTORIAL( 73 | TEXTID = ZCX_OO_TUTORIAL=>FLIGHT_NOT_FOUND 74 | CARRID = CARRIER_ID ). 75 | ENDIF. 76 | 77 | DATA CLASS_NAME TYPE STRING. 78 | IF FLIGHT_TEMP-PLANE_TYPE_ID CS ZCL_OO_TUTORIAL_6_BASE=>PLANE_TYPE-B747. 79 | CLASS_NAME = ZCL_OO_TUTORIAL_6_BASE=>CLASS_BASE_NAME && 80 | ZCL_OO_TUTORIAL_6_BASE=>PLANE_TYPE-B747. 81 | 82 | ELSEIF FLIGHT_TEMP-PLANE_TYPE_ID CS ZCL_OO_TUTORIAL_6_BASE=>PLANE_TYPE-A340. 83 | CLASS_NAME = ZCL_OO_TUTORIAL_6_BASE=>CLASS_BASE_NAME && 84 | ZCL_OO_TUTORIAL_6_BASE=>PLANE_TYPE-A340. 85 | ELSE. 86 | CLASS_NAME = ZCL_OO_TUTORIAL_6_BASE=>CLASS_BASE_NAME && 87 | ZCL_OO_TUTORIAL_6_BASE=>CLASS_OTHER. 88 | ENDIF. 89 | 90 | CREATE OBJECT FLIGHT TYPE (CLASS_NAME) 91 | EXPORTING 92 | FLIGHT = FLIGHT_TEMP. 93 | 94 | ENDMETHOD. 95 | 96 | 97 | METHOD ZIF_OO_TUTORIAL~CALCULATE_FLIGHT_PRICE. 98 | 99 | PRICE-PRICE = ME->FLIGHT-PRICE + 100. 100 | PRICE-CURRENCY = ME->FLIGHT-CURRENCY_CODE. 101 | 102 | ENDMETHOD. 103 | 104 | 105 | METHOD ZIF_OO_TUTORIAL~GET_FLIGHT_DETAILS. 106 | FLIGHT = ME->FLIGHT. 107 | ENDMETHOD. 108 | ENDCLASS. 109 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ABAP Object Oriented Basics 2019 2 | 3 | [](https://api.reuse.software/info/github.com/SAP-samples/abap-oo-basics) 4 | 5 | ## Description 6 | 7 | This is an update to the 10 year old ABAP Object Oriented eLearning series. What started as an update to improve the video resolution also turned into modernizing the tooling and ABAP syntax used to teach the basic Object Oriented concepts. 8 | Here is the YouTube Playlist that goes along with this code sample: 9 | https://youtube.com/playlist?list=PL6RpkC85SLQB-vyEFpUj1xkrIhH4UiV4D 10 | 11 | ABAP OO Part 1 - Introduction 12 | 13 | [](https://youtu.be/GUh7QyCwxGk "ABAP OO Part 1 - Introduction") 14 | 15 | ABAP OO Part 2 - Static vs. Instance 16 | 17 | [](https://youtu.be/SwqNRez4itg "ABAP OO Part 2 - Static vs. Instance") 18 | 19 | ABAP OO Part 3 - Visibility 20 | 21 | [](https://youtu.be/A9IPfLJBV5w "ABAP OO Part 3 - Visibility") 22 | 23 | ABAP OO Part 4 - Exceptions 24 | 25 | [](https://youtu.be/2p4SJpYv7uQ "ABAP OO Part 4 - Exceptions") 26 | 27 | ABAP OO Part 5 - Inheritance 28 | 29 | [](https://youtu.be/zlp0CHaeSfw "ABAP OO Part 5 - Inheritance") 30 | 31 | ## Requirements 32 | 33 | Make sure to fulfill the following requirements: 34 | 35 | * You have access to an SAP BTP, ABAP Environment instance (see [here](https://blogs.sap.com/2018/09/04/sap-cloud-platform-abap-environment) for additional information). 36 | * You have downloaded and installed ABAP Development Tools (ADT). Make sure to use the most recent version as indicated on the [installation page](https://tools.hana.ondemand.com/#abap). 37 | * You have created an ABAP Cloud Project in ADT that allows you to access your SAP BTP, ABAP Environment instance (see [here](https://help.sap.com/viewer/5371047f1273405bb46725a417f95433/Cloud/en-US/99cc54393e4c4e77a5b7f05567d4d14c.html) for additional information). Your log-on language is English. 38 | * You have installed the [abapGit](https://github.com/abapGit/eclipse.abapgit.org) plug-in for ADT from the update site `http://eclipse.abapgit.org/updatesite/`. 39 | 40 | ## Download and Installation 41 | 42 | Use the abapGit plug-in to install the ABAP OO Examples by executing the following steps: 43 | 44 | 1. In your ABAP cloud project, create an ABAP package for the demo content to be downloaded (leave the suggested values unchanged when following the steps in the package creation wizard). 45 | 2. To add the abapGit Repositories view to the ABAP perspective, click `Window` > `Show View` > `Other...` from the menu bar and choose `abapGit Repositories`. 46 | 3. In the abapGit Repositories view, click the `+` icon to clone an abapGit repository. 47 | 4. Enter the following URL of this repository: `https://github.com/SAP-samples/abap-oo-basics` and choose Next. 48 | 5. Create a new transport request that you only use for this demo content installation (recommendation) and choose Finish to link the Git repository to your ABAP cloud project. The repository appears in the abapGit Repositories View with status Linked. 49 | 6. Right-click on the new ABAP repository and choose `pull` to start the cloning of the repository contents. Note that this procedure may take a few minutes. 50 | 7. Once the cloning has finished, the status is set to `Pulled Successfully`. Then refresh your project tree. 51 | 52 | As a result of the installation procedure above, the ABAP system creates an inactive version of all artifacts from the demo content 53 | 54 | To activate all development objects from this sample: 55 | 56 | 1. Click the mass-activation icon (Activate Inactive ABAP Development Objects) in the toolbar. 57 | 2. In the dialog that appears, select all development objects in the transport request (that you created for the demo content installation) and choose `Activate`. 58 | 59 | ## Known Issues 60 | 61 | In the ABAP Trial on SAP Business Technology Platform you sharing an ABAP instance with many other users. Only one user on this system may import this sample as all object names must be globally unique. If you receive an error that the objects already exists upon import, search the system for classes named ZCL_OO_TUTORIAL*. Someone has already imported the content in your trial system and you can simply start with that imported version. 62 | 63 | ## How to obtain support 64 | 65 | This project is provided "as-is": there is no guarantee that raised issues will be answered or addressed in future releases. 66 | 67 | ## License 68 | 69 | Copyright (c) 2024 SAP SE or an SAP affiliate company. All rights reserved. 70 | This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the [LICENSE](LICENSES/Apache-2.0.txt) file. 71 | -------------------------------------------------------------------------------- /src/zcl_table_expressions.clas.abap: -------------------------------------------------------------------------------- 1 | "!ABAP Table Expressions Examples
2 | CLASS ZCL_TABLE_EXPRESSIONS DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_TABLE_EXPRESSIONS IMPLEMENTATION. 16 | 17 | 18 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 19 | DATA FLIGHTS TYPE STANDARD TABLE OF /DMO/FLIGHT 20 | WITH NON-UNIQUE SORTED KEY PLTYPE COMPONENTS PLANE_TYPE_ID. 21 | SELECT * FROM /DMO/FLIGHT INTO TABLE @FLIGHTS. 22 | 23 | TRY. 24 | ****Old 25 | READ TABLE FLIGHTS INDEX 1 INTO DATA(WA). 26 | 27 | ****New 28 | DATA(WA1) = FLIGHTS[ 1 ]. 29 | 30 | ****Old 31 | READ TABLE FLIGHTS INDEX 1 32 | USING KEY PLTYPE INTO DATA(WA3). 33 | 34 | ****New 35 | DATA(WA4) = FLIGHTS[ KEY PLTYPE INDEX 1 ]. 36 | 37 | ****Old 38 | READ TABLE FLIGHTS WITH KEY 39 | CARRIER_ID = 'AA' CONNECTION_ID = '0322' INTO DATA(WA5). 40 | 41 | ****New 42 | DATA(WA6) = FLIGHTS[ CARRIER_ID = 'AA' CONNECTION_ID = '0322' ]. 43 | 44 | ****Old 45 | READ TABLE FLIGHTS WITH TABLE KEY PLTYPE 46 | COMPONENTS PLANE_TYPE_ID = '747-400' INTO DATA(WA7). 47 | 48 | ****New 49 | DATA(WA8) = FLIGHTS[ KEY PLTYPE PLANE_TYPE_ID = '747-400' ]. 50 | 51 | ****Old 52 | READ TABLE FLIGHTS INDEX 1 ASSIGNING FIELD-SYMBOL(| { | { |
| { SFLIGHT2-CARRIER_ID }| & 129 | | | { SFLIGHT2-CONNECTION_ID } |
ABAP Constructor Expression Examples
2 | CLASS ZCL_CONSTRUCTOR_EXPRESSION DEFINITION 3 | PUBLIC 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | INTERFACES IF_OO_ADT_CLASSRUN. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | 12 | TYPES: BEGIN OF STRUCT, 13 | C1 TYPE I, 14 | C2 TYPE C LENGTH 10, 15 | END OF STRUCT. 16 | TYPES T_TAB TYPE STANDARD TABLE OF STRUCT WITH EMPTY KEY. 17 | DATA OTHERTAB TYPE ZCL_SIMPLE_EXAMPLE=>EXAMPLE_TABLE_TYPE. 18 | 19 | constants: EXPORTING type string value 'E'. 20 | 21 | ENDCLASS. 22 | 23 | 24 | 25 | CLASS ZCL_CONSTRUCTOR_EXPRESSION IMPLEMENTATION. 26 | 27 | 28 | METHOD IF_OO_ADT_CLASSRUN~MAIN. 29 | 30 | ****Old Way 31 | DATA DREF TYPE REF TO DATA. 32 | FIELD-SYMBOLS