├── .abapgit.xml ├── LICENSE ├── README.md ├── plantuml.txt ├── schema └── abak.xsd └── src ├── core ├── package.devc.xml ├── zabak.acid.xml ├── zabak.fugr.lzabaktop.abap ├── zabak.fugr.lzabaktop.xml ├── zabak.fugr.saplzabak.abap ├── zabak.fugr.saplzabak.xml ├── zabak.fugr.xml ├── zabak.fugr.z_abak_zabak_rfc_get.abap ├── zabak.msag.xml ├── zabak.tabl.xml ├── zabak_content.dtel.xml ├── zabak_content_rfc.xslt.source.xml ├── zabak_content_rfc.xslt.xml ├── zabak_context.dtel.xml ├── zabak_copy.xslt.source.xml ├── zabak_copy.xslt.xml ├── zabak_core_api.pinf.xml ├── zabak_cx_abak.enho.xml ├── zabak_data.tabl.xml ├── zabak_db.tabl.xml ├── zabak_db_fields.tabl.xml ├── zabak_db_key.tabl.xml ├── zabak_db_t.ttyp.xml ├── zabak_default.tabl.xml ├── zabak_default_c.tabl.xml ├── zabak_demo_xml.xslt.source.xml ├── zabak_demo_xml.xslt.xml ├── zabak_description.dtel.xml ├── zabak_fieldname.dtel.xml ├── zabak_format_json.xslt.source.xml ├── zabak_format_json.xslt.xml ├── zabak_format_type.doma.xml ├── zabak_format_type.dtel.xml ├── zabak_format_xml.xslt.source.xml ├── zabak_format_xml.xslt.xml ├── zabak_high.dtel.xml ├── zabak_id.doma.xml ├── zabak_id.dtel.xml ├── zabak_index.dtel.xml ├── zabak_k.tabl.xml ├── zabak_k_t.ttyp.xml ├── zabak_kv.tabl.xml ├── zabak_kv_t.ttyp.xml ├── zabak_low.dtel.xml ├── zabak_maint.fugr.lzabak_maintf00.abap ├── zabak_maint.fugr.lzabak_maintf00.xml ├── zabak_maint.fugr.lzabak_mainti00.abap ├── zabak_maint.fugr.lzabak_mainti00.xml ├── zabak_maint.fugr.lzabak_maintt00.abap ├── zabak_maint.fugr.lzabak_maintt00.xml ├── zabak_maint.fugr.lzabak_mainttop.abap ├── zabak_maint.fugr.lzabak_mainttop.xml ├── zabak_maint.fugr.saplzabak_maint.abap ├── zabak_maint.fugr.saplzabak_maint.xml ├── zabak_maint.fugr.tableframe_zabak_maint.abap ├── zabak_maint.fugr.tableproc_zabak_maint.abap ├── zabak_maint.fugr.xml ├── zabak_namevalue.tabl.xml ├── zabak_namevalue_t.ttyp.xml ├── zabak_range.tabl.xml ├── zabak_range_t.ttyp.xml ├── zabak_scope.dtel.xml ├── zabak_source_type.doma.xml ├── zabak_source_type.dtel.xml ├── zabak_use_shm.dtel.xml ├── zabak_value.doma.xml ├── zabak_xml_k.tabl.xml ├── zabak_xml_k_t.ttyp.xml ├── zcl_abak.clas.abap ├── zcl_abak.clas.testclasses.abap ├── zcl_abak.clas.xml ├── zcl_abak_data.clas.abap ├── zcl_abak_data.clas.locals_imp.abap ├── zcl_abak_data.clas.testclasses.abap ├── zcl_abak_data.clas.xml ├── zcl_abak_data_factory.clas.abap ├── zcl_abak_data_factory.clas.locals_imp.abap ├── zcl_abak_data_factory.clas.testclasses.abap ├── zcl_abak_data_factory.clas.xml ├── zcl_abak_data_normal.clas.abap ├── zcl_abak_data_normal.clas.testclasses.abap ├── zcl_abak_data_normal.clas.xml ├── zcl_abak_data_shm.clas.abap ├── zcl_abak_data_shm.clas.testclasses.abap ├── zcl_abak_data_shm.clas.xml ├── zcl_abak_factory.clas.abap ├── zcl_abak_factory.clas.xml ├── zcl_abak_k_table.clas.abap ├── zcl_abak_k_table.clas.xml ├── zcl_abak_params.clas.abap ├── zcl_abak_params.clas.testclasses.abap ├── zcl_abak_params.clas.xml ├── zcl_abak_params_definition.clas.abap ├── zcl_abak_params_definition.clas.testclasses.abap ├── zcl_abak_params_definition.clas.xml ├── zcl_abak_rfc.clas.abap ├── zcl_abak_rfc.clas.xml ├── zcl_abak_shm_area.clas.abap ├── zcl_abak_shm_area.clas.xml ├── zcl_abak_shm_area.shma.xml ├── zcl_abak_shm_root.clas.abap ├── zcl_abak_shm_root.clas.xml ├── zcl_abak_source.clas.abap ├── zcl_abak_source.clas.xml ├── zcl_abak_tools.clas.abap ├── zcl_abak_tools.clas.xml ├── zcx_abak.clas.abap ├── zcx_abak.clas.locals_imp.abap ├── zcx_abak.clas.xml ├── zcx_abak_data.clas.abap ├── zcx_abak_data.clas.xml ├── zcx_abak_engine.clas.abap ├── zcx_abak_engine.clas.xml ├── zcx_abak_factory.clas.abap ├── zcx_abak_factory.clas.xml ├── zcx_abak_params.clas.abap ├── zcx_abak_params.clas.xml ├── zif_abak.intf.abap ├── zif_abak.intf.xml ├── zif_abak_consts.intf.abap ├── zif_abak_consts.intf.xml ├── zif_abak_data.intf.abap ├── zif_abak_data.intf.xml ├── zif_abak_format.intf.abap ├── zif_abak_format.intf.xml ├── zif_abak_params.intf.abap ├── zif_abak_params.intf.xml ├── zif_abak_source.intf.abap └── zif_abak_source.intf.xml ├── formats ├── package.devc.xml ├── zabak_formats_api.pinf.xml ├── zcl_abak_format_csv.clas.abap ├── zcl_abak_format_csv.clas.testclasses.abap ├── zcl_abak_format_csv.clas.xml ├── zcl_abak_format_factory.clas.abap ├── zcl_abak_format_factory.clas.testclasses.abap ├── zcl_abak_format_factory.clas.xml ├── zcl_abak_format_internal.clas.abap ├── zcl_abak_format_internal.clas.xml ├── zcl_abak_format_json.clas.abap ├── zcl_abak_format_json.clas.testclasses.abap ├── zcl_abak_format_json.clas.xml ├── zcl_abak_format_xml.clas.abap ├── zcl_abak_format_xml.clas.testclasses.abap └── zcl_abak_format_xml.clas.xml ├── package.devc.xml ├── sources ├── package.devc.xml ├── zabak_sources_api.pinf.xml ├── zcl_abak_source_database.clas.abap ├── zcl_abak_source_database.clas.testclasses.abap ├── zcl_abak_source_database.clas.xml ├── zcl_abak_source_factory.clas.abap ├── zcl_abak_source_factory.clas.testclasses.abap ├── zcl_abak_source_factory.clas.xml ├── zcl_abak_source_file.clas.abap ├── zcl_abak_source_file.clas.testclasses.abap ├── zcl_abak_source_file.clas.xml ├── zcl_abak_source_inline.clas.abap ├── zcl_abak_source_inline.clas.testclasses.abap ├── zcl_abak_source_inline.clas.xml ├── zcl_abak_source_mime.clas.abap ├── zcl_abak_source_mime.clas.testclasses.abap ├── zcl_abak_source_mime.clas.xml ├── zcl_abak_source_rfc.clas.abap ├── zcl_abak_source_rfc.clas.testclasses.abap ├── zcl_abak_source_rfc.clas.xml ├── zcl_abak_source_so10.clas.abap ├── zcl_abak_source_so10.clas.testclasses.abap ├── zcl_abak_source_so10.clas.xml ├── zcl_abak_source_url.clas.abap ├── zcl_abak_source_url.clas.testclasses.abap ├── zcl_abak_source_url.clas.xml ├── zcx_abak_source_database.clas.abap ├── zcx_abak_source_database.clas.xml ├── zcx_abak_source_file.clas.abap ├── zcx_abak_source_file.clas.xml ├── zcx_abak_source_url.clas.abap └── zcx_abak_source_url.clas.xml ├── utils ├── package.devc.xml ├── zabak_demo.prog.abap ├── zabak_demo.prog.xml ├── zabak_demo.tabl.xml ├── zabak_usage.prog.abap ├── zabak_usage.prog.xml ├── zcl_abak_demo.clas.abap ├── zcl_abak_demo.clas.xml ├── zcl_abak_usage.clas.abap └── zcl_abak_usage.clas.xml ├── zabak s.tobj.xml ├── zabak_api.pinf.xml ├── zabak_defaults.tobj.xml └── zabak_table_customizing.scp1.xml /.abapgit.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | E 6 | /src/ 7 | PREFIX 8 | 9 | /.gitignore 10 | /LICENSE 11 | /README.md 12 | /package.json 13 | /.travis.yml 14 | /plantuml.txt 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nuno Godinho 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | (abaK is now in beta stage. It's mostly stable but its API can still change and more tests need to be done so please don't use it in a production environment yet. Wait for a non-beta release.) 2 | 3 | # abaK 4 | 5 | A powerful yet simple ABAP library to manage constants. 6 | 7 | ## Why 8 | Nowadays, whenever a constant is needed in a program, it has to be hard coded, stored in a dedicated custom ZTABLE or, even worse, stored in the standard table TVARVC (or similar). 9 | 10 | ## What 11 | `abaK` aims to become the standard constants library that `ABAP` so desperately needs. 12 | 13 | It's single design goal is to **address most common needs** while still being **extremely easy to use**, by both developers and functional people alike. And if its standard functionality doesn't cover your particular needs, you can easily extend it. 14 | 15 | With `abaK` you can finally stop developing a new `ZCONSTANTS` table every time you need one. Or, even worse, stop storing your constants in obscure standard tables like `TVARVC`. 16 | 17 | ## How 18 | abaK offers a simple yet powerful and flexible way for any program to manage its constants. Advantages of using abaK: 19 | - decentralized: there is no monolithic table holding all the constants. One program can decide to have its own constants source. 20 | - easily customizable: a project can decide to have its constants maintainable directly in PRD while another may required them to be maintained in DEV and then transported; 21 | - multiple scopes: some constants can be used system-wide while others can belong to a single program and no one else will mess with them; 22 | - system-wide management: constant sources are registered in a central table so that it is easy to keep track of the existing data sources; 23 | - different formats: besides using a custom database table, the constants data can be formatted as `CSV`, `XML` or `JSON`; 24 | - different content locations: besides providing content directly inline, it can also be fetched from an `URL`, an `SO10` standard text, a `GS03` set, a server file or even another `abaK` instance in a remote SAP system via `RFC`; 25 | - extensible: if needed, new custom `FORMAT`/`CONTENT` classes can be created (ex.: to read legacy data in a specific data format). 26 | 27 | Providing a well-defined `API`, `abaK` clearly separates the way it is used from the way the constants are stored. 28 | 29 | Documentation in the [wiki](https://github.com/abapinho/abak/wiki). 30 | 31 | ## Requirements 32 | * ABAP Version: 702 or higher. 33 | * [abapGit](https://abapgit.org) 34 | 35 | ## FAQ 36 | For questions/comments/bugs/feature requests/wishes please create an [issue](https://github.com/abapinho/abak/issues). 37 | -------------------------------------------------------------------------------- /schema/abak.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/core/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | abaK Core 7 | X 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/core/zabak.acid.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | abaK Checkpoint group 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/core/zabak.fugr.lzabaktop.abap: -------------------------------------------------------------------------------- 1 | FUNCTION-POOL ZABAK. "MESSAGE-ID .. 2 | 3 | * INCLUDE LZABAKD... " Local class definition 4 | -------------------------------------------------------------------------------- /src/core/zabak.fugr.lzabaktop.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZABAKTOP 7 | S 8 | D$ 9 | I 10 | S 11 | X 12 | D$S 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/core/zabak.fugr.saplzabak.abap: -------------------------------------------------------------------------------- 1 | ******************************************************************* 2 | * System-defined Include-files. * 3 | ******************************************************************* 4 | INCLUDE LZABAKTOP. " Global Data 5 | INCLUDE LZABAKUXX. " Function Modules 6 | 7 | ******************************************************************* 8 | * User-defined Include-files (if necessary). * 9 | ******************************************************************* 10 | * INCLUDE LZABAKF... " Subroutines 11 | * INCLUDE LZABAKO... " PBO-Modules 12 | * INCLUDE LZABAKI... " PAI-Modules 13 | * INCLUDE LZABAKE... " Events 14 | * INCLUDE LZABAKP... " Local class implement. 15 | * INCLUDE LZABAKT99. " ABAP Unit tests 16 | -------------------------------------------------------------------------------- /src/core/zabak.fugr.saplzabak.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | SAPLZABAK 7 | S 8 | D$ 9 | F 10 | S 11 | E 12 | X 13 | D$S 14 | X 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/core/zabak.fugr.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | abaK Function modules 6 | 7 | LZABAKTOP 8 | SAPLZABAK 9 | 10 | 11 | 12 | Z_ABAK_ZABAK_RFC_GET 13 | R 14 | abaK get remote data by ZABAK id 15 | 16 | 17 | I_ID 18 | ZABAK_ID 19 | 20 | 21 | 22 | 23 | E_SERIALIZED_DATA 24 | STRING 25 | 26 | 27 | 28 | 29 | ERROR 30 | 31 | 32 | 33 | 34 | I_ID 35 | P 36 | abaK ID 37 | 001 38 | 39 | 40 | E_SERIALIZED_DATA 41 | P 42 | 002 43 | 44 | 45 | ERROR 46 | X 47 | 003 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/core/zabak.fugr.z_abak_zabak_rfc_get.abap: -------------------------------------------------------------------------------- 1 | FUNCTION z_abak_zabak_rfc_get . 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(I_ID) TYPE ZABAK_ID 6 | *" EXPORTING 7 | *" VALUE(E_SERIALIZED_DATA) TYPE STRING 8 | *" EXCEPTIONS 9 | *" ERROR 10 | *"---------------------------------------------------------------------- 11 | 12 | DATA: o_abak_rfc TYPE REF TO zcl_abak_rfc, 13 | o_exp TYPE REF TO zcx_abak, 14 | text TYPE string. 15 | 16 | TRY. 17 | CREATE OBJECT o_abak_rfc. 18 | e_serialized_data = o_abak_rfc->get_data( i_id ). 19 | 20 | CATCH zcx_abak INTO o_exp. 21 | text = o_exp->get_text( ). 22 | MESSAGE text TYPE 'E' RAISING error. 23 | ENDTRY. 24 | 25 | ENDFUNCTION. 26 | -------------------------------------------------------------------------------- /src/core/zabak.msag.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK 7 | E 8 | abaK messages 9 | 10 | 11 | 12 | E 13 | ZABAK 14 | 000 15 | Invalid parameters 16 | 17 | 18 | E 19 | ZABAK 20 | 001 21 | Error opening file & 22 | 23 | 24 | E 25 | ZABAK 26 | 002 27 | Invalid sign & 28 | 29 | 30 | E 31 | ZABAK 32 | 003 33 | Invalid option & 34 | 35 | 36 | E 37 | ZABAK 38 | 004 39 | For option & the HIGH value must be empty 40 | 41 | 42 | E 43 | ZABAK 44 | 005 45 | For option & both LOW and HIGH values must be filled 46 | 47 | 48 | E 49 | ZABAK 50 | 006 51 | For option & HIGH & must be > LOW & 52 | 53 | 54 | E 55 | ZABAK 56 | 007 57 | Format of table & is not valid. Please check documentation. 58 | 59 | 60 | E 61 | ZABAK 62 | 008 63 | Unexpected error 64 | 65 | 66 | E 67 | ZABAK 68 | 009 69 | Value not found for scope & field & context & 70 | 71 | 72 | E 73 | ZABAK 74 | 010 75 | HTTP error & & url & 76 | 77 | 78 | E 79 | ZABAK 80 | 011 81 | Not implemented 82 | 83 | 84 | E 85 | ZABAK 86 | 012 87 | ID & not found in table ZABAK 88 | 89 | 90 | E 91 | ZABAK 92 | 013 93 | Duplicate parameter & 94 | 95 | 96 | E 97 | ZABAK 98 | 014 99 | For multiple fields OPTION must be EQ 100 | 101 | 102 | E 103 | ZABAK 104 | 015 105 | For multiple fields SIGN must be I 106 | 107 | 108 | E 109 | ZABAK 110 | 016 111 | For multiple fields only one value line allowed 112 | 113 | 114 | E 115 | ZABAK 116 | 017 117 | For multiple fields HIGH must not be filled. Only LOW. 118 | 119 | 120 | E 121 | ZABAK 122 | 018 123 | For multiple fieldnames we need a value per fieldname 124 | 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /src/core/zabak.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK 7 | E 8 | TRANSP 9 | X 10 | abaK Registered constants instances 11 | X 12 | C 13 | 1 14 | 15 | 16 | ZABAK 17 | A 18 | 0 19 | APPL2 20 | X 21 | X 22 | X 23 | 24 | 25 | 26 | ZABAK 27 | MANDT 28 | 0001 29 | X 30 | MANDT 31 | 0 32 | X 33 | E 34 | 35 | 36 | ZABAK 37 | ID 38 | 0002 39 | X 40 | ZABAK_ID 41 | 0 42 | X 43 | E 44 | 45 | 46 | ZABAK 47 | DESCRIPTION 48 | 0003 49 | ZABAK_DESCRIPTION 50 | 0 51 | E 52 | 53 | 54 | ZABAK 55 | FORMAT_TYPE 56 | 0004 57 | ZABAK_FORMAT_TYPE 58 | 0 59 | X 60 | F 61 | E 62 | 63 | 64 | ZABAK 65 | SOURCE_TYPE 66 | 0005 67 | ZABAK_SOURCE_TYPE 68 | 0 69 | X 70 | F 71 | E 72 | 73 | 74 | ZABAK 75 | CONTENT 76 | 0006 77 | ZABAK_CONTENT 78 | 0 79 | E 80 | 81 | 82 | ZABAK 83 | USE_SHM 84 | 0007 85 | ZABAK_USE_SHM 86 | 0 87 | X 88 | F 89 | E 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /src/core/zabak_content.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_CONTENT 7 | E 8 | TEXT255 9 | 55 10 | 10 11 | 15 12 | 20 13 | abaK Content 14 | Content 15 | Content 16 | Content 17 | Content 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/core/zabak_content_rfc.xslt.source.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 41 | -------------------------------------------------------------------------------- /src/core/zabak_content_rfc.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_CONTENT_RFC 7 | E 8 | abaK Content RFC serialization 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/core/zabak_copy.xslt.source.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/core/zabak_copy.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_COPY 7 | E 8 | abaK Copy generic data structures 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/core/zabak_core_api.pinf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | ZABAK_CORE_API 8 | abaK Core API 9 | 10 | 11 | 12 | ZABAK_CORE_API 13 | CLAS 14 | ZCL_ABAK_FACTORY 15 | 16 | 17 | ZABAK_CORE_API 18 | DTEL 19 | ZABAK_CONTEXT 20 | 21 | 22 | ZABAK_CORE_API 23 | DTEL 24 | ZABAK_FORMAT_TYPE 25 | 26 | 27 | ZABAK_CORE_API 28 | DTEL 29 | ZABAK_INDEX 30 | 31 | 32 | ZABAK_CORE_API 33 | DTEL 34 | ZABAK_SCOPE 35 | 36 | 37 | ZABAK_CORE_API 38 | DTEL 39 | ZABAK_SOURCE_TYPE 40 | 41 | 42 | ZABAK_CORE_API 43 | INTF 44 | ZIF_ABAK 45 | 46 | 47 | ZABAK_CORE_API 48 | INTF 49 | ZIF_ABAK_FORMAT 50 | 51 | 52 | ZABAK_CORE_API 53 | INTF 54 | ZIF_ABAK_SOURCE 55 | 56 | 57 | ZABAK_CORE_API 58 | TTYP 59 | ZABAK_RANGE_T 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/core/zabak_cx_abak.enho.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | HOOK_IMPL 6 | abaK root exception enhancement 7 | 8 | R3TR 9 | CLAS 10 | ZCX_ABAK 11 | CLAS 12 | ZCX_ABAK 13 | ZCX_ABAK======================CP 14 | 15 | 16 | 17 | ZCX_ABAK======================CP 18 | D 19 | \TY:ZCX_ABAK\ME:CONSTRUCTOR\SE:END\EI 20 | 21 | * Build previous exception from SYST 22 | build_from_syst( ). 23 | 24 | 25 | 26 | 27 | 28 | \TY:ZCX_ABAK\ME:CONSTRUCTOR\SE:END\EI 29 | 30 | 0 31 | 2 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/core/zabak_data.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DATA 7 | E 8 | INTTAB 9 | abaK Data used by ZIF_ABAK_DATA 10 | 1 11 | 12 | 13 | 14 | ZABAK_DATA 15 | T_K 16 | 0001 17 | ZABAK_XML_K_T 18 | 0 19 | TTYP 20 | TTYPL 21 | L 22 | 23 | 24 | ZABAK_DATA 25 | NAME 26 | 0002 27 | ZABAK_DESCRIPTION 28 | 0 29 | E 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/core/zabak_db.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DB 7 | E 8 | INTTAB 9 | X 10 | X 11 | abaK Database line 12 | 1 13 | 14 | 15 | 16 | ZABAK_DB 17 | .INCLUDE 18 | E 19 | 0001 20 | X 21 | 0 22 | ZABAK_DB_KEY 23 | S 24 | abaK Database key 25 | S 26 | 27 | 28 | ZABAK_DB 29 | .INCLUDE 30 | E 31 | 0007 32 | 0 33 | ZABAK_DB_FIELDS 34 | S 35 | abaK Database fields 36 | S 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/core/zabak_db_fields.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DB_FIELDS 7 | E 8 | INTTAB 9 | abaK Database fields 10 | 1 11 | 12 | 13 | 14 | ZABAK_DB_FIELDS 15 | UE_SIGN 16 | 0001 17 | BAPISIGN 18 | 0 19 | X 20 | F 21 | E 22 | 23 | 24 | ZABAK_DB_FIELDS 25 | UE_OPTION 26 | 0002 27 | BAPIOPTION 28 | 0 29 | X 30 | F 31 | E 32 | 33 | 34 | ZABAK_DB_FIELDS 35 | UE_LOW 36 | 0003 37 | ZABAK_LOW 38 | 0 39 | E 40 | 41 | 42 | ZABAK_DB_FIELDS 43 | UE_HIGH 44 | 0004 45 | ZABAK_HIGH 46 | 0 47 | E 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/core/zabak_db_key.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DB_KEY 7 | E 8 | INTTAB 9 | X 10 | abaK Database key 11 | 1 12 | 13 | 14 | 15 | ZABAK_DB_KEY 16 | MANDT 17 | 0001 18 | X 19 | MANDT 20 | 0 21 | E 22 | 23 | 24 | ZABAK_DB_KEY 25 | SCOPE 26 | 0002 27 | X 28 | ZABAK_SCOPE 29 | 0 30 | E 31 | 32 | 33 | ZABAK_DB_KEY 34 | FIELDNAME 35 | 0003 36 | X 37 | ZABAK_FIELDNAME 38 | 0 39 | E 40 | 41 | 42 | ZABAK_DB_KEY 43 | CONTEXT 44 | 0004 45 | X 46 | ZABAK_CONTEXT 47 | 0 48 | E 49 | 50 | 51 | ZABAK_DB_KEY 52 | IDX 53 | 0005 54 | X 55 | ZABAK_INDEX 56 | 0 57 | E 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/core/zabak_db_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DB_T 7 | E 8 | ZABAK_DB 9 | S 10 | STRU 11 | T 12 | K 13 | N 14 | 0005 15 | abaK Database table 16 | 17 | 18 | 19 | ZABAK_DB_T 20 | 0001 21 | 0001 22 | MANDT 23 | 24 | 25 | ZABAK_DB_T 26 | 0002 27 | 0002 28 | SCOPE 29 | 30 | 31 | ZABAK_DB_T 32 | 0003 33 | 0003 34 | FIELDNAME 35 | 36 | 37 | ZABAK_DB_T 38 | 0004 39 | 0004 40 | CONTEXT 41 | 42 | 43 | ZABAK_DB_T 44 | 0005 45 | 0005 46 | IDX 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/core/zabak_default.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DEFAULT 7 | E 8 | TRANSP 9 | X 10 | X 11 | abaK Default constants table (no transport request) 12 | X 13 | A 14 | 1 15 | 16 | 17 | ZABAK_DEFAULT 18 | A 19 | 0 20 | APPL0 21 | N 22 | 23 | 24 | 25 | ZABAK_DEFAULT 26 | .INCLUDE 27 | E 28 | 0001 29 | X 30 | 0 31 | ZABAK_DB_KEY 32 | X 33 | S 34 | abaK Database key 35 | S 36 | 37 | 38 | ZABAK_DEFAULT 39 | .INCLUDE 40 | E 41 | 0007 42 | 0 43 | ZABAK_DB_FIELDS 44 | S 45 | abaK Database fields 46 | S 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/core/zabak_default_c.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DEFAULT_C 7 | E 8 | TRANSP 9 | X 10 | X 11 | abaK Default constants table (with transport request) 12 | X 13 | C 14 | 1 15 | 16 | 17 | ZABAK_DEFAULT_C 18 | A 19 | 0 20 | APPL2 21 | N 22 | 23 | 24 | 25 | ZABAK_DEFAULT_C 26 | .INCLUDE 27 | E 28 | 0001 29 | X 30 | 0 31 | ZABAK_DB_KEY 32 | X 33 | S 34 | abaK Database key 35 | S 36 | 37 | 38 | ZABAK_DEFAULT_C 39 | .INCLUDE 40 | E 41 | 0007 42 | 0 43 | ZABAK_DB_FIELDS 44 | S 45 | abaK Database fields 46 | S 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/core/zabak_demo_xml.xslt.source.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/core/zabak_demo_xml.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DEMO_XML 7 | E 8 | abaK Demo XML 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/core/zabak_description.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DESCRIPTION 7 | E 8 | TEXT50 9 | 50 10 | 10 11 | 15 12 | 20 13 | abaK Description 14 | Description 15 | Descrption 16 | Description 17 | Description 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/core/zabak_fieldname.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_FIELDNAME 7 | E 8 | FDNAME 9 | 30 10 | 10 11 | 15 12 | 20 13 | abaK Fieldname 14 | Fieldname 15 | Fieldname 16 | Fieldname 17 | Fieldname 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/core/zabak_format_json.xslt.source.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /src/core/zabak_format_json.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_FORMAT_JSON 7 | E 8 | abaK source XML 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/core/zabak_format_type.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_FORMAT_TYPE 7 | E 8 | CHAR 9 | 000010 10 | 000010 11 | X 12 | abaK Format type 13 | 14 | 15 | 16 | ZABAK_FORMAT_TYPE 17 | 0001 18 | E 19 | CSV 20 | CSV 21 | 22 | 23 | ZABAK_FORMAT_TYPE 24 | 0002 25 | E 26 | JSON 27 | JSON 28 | 29 | 30 | ZABAK_FORMAT_TYPE 31 | 0003 32 | E 33 | XML 34 | XML 35 | 36 | 37 | ZABAK_FORMAT_TYPE 38 | 0004 39 | E 40 | INTERNAL 41 | Internal 42 | 43 | 44 | 45 | 1 46 | 2 47 | 3 48 | A 49 | F 50 | G 51 | I 52 | J 53 | L 54 | M 55 | N 56 | P 57 | R 58 | S 59 | T 60 | U 61 | W 62 | 63 | 64 | 65 | 1 66 | ABAK Source 67 | 68 | 69 | 2 70 | ABAK Source 71 | 72 | 73 | 3 74 | ABAK Source 75 | 76 | 77 | A 78 | ABAK Source 79 | 80 | 81 | F 82 | ABAK Source 83 | 84 | 85 | G 86 | ABAK Source 87 | 88 | 89 | I 90 | ABAK Source 91 | 92 | 93 | J 94 | ABAK Source 95 | 96 | 97 | L 98 | ABAK Source 99 | 100 | 101 | M 102 | ABAK Source 103 | 104 | 105 | N 106 | ABAK Source 107 | 108 | 109 | P 110 | ABAK Source 111 | 112 | 113 | R 114 | ABAK Source 115 | 116 | 117 | S 118 | ABAK Source 119 | 120 | 121 | T 122 | ABAK Source 123 | 124 | 125 | U 126 | ABAK Source 127 | 128 | 129 | W 130 | ABAK Source 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /src/core/zabak_format_xml.xslt.source.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/core/zabak_format_xml.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_FORMAT_XML 7 | E 8 | abaK source XML 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/core/zabak_id.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_ID 7 | E 8 | CHAR 9 | 000030 10 | 000030 11 | ZABAK 12 | abaK ID 13 | 14 | 15 | 1 16 | 2 17 | 3 18 | A 19 | F 20 | G 21 | I 22 | J 23 | L 24 | M 25 | N 26 | P 27 | R 28 | S 29 | T 30 | U 31 | W 32 | 33 | 34 | 35 | 1 36 | Global constants table ID 37 | 38 | 39 | 2 40 | Global constants table ID 41 | 42 | 43 | 3 44 | Global constants table ID 45 | 46 | 47 | A 48 | Global constants table ID 49 | 50 | 51 | F 52 | Global constants table ID 53 | 54 | 55 | G 56 | Global constants table ID 57 | 58 | 59 | I 60 | Global constants table ID 61 | 62 | 63 | J 64 | Global constants table ID 65 | 66 | 67 | L 68 | Global constants table ID 69 | 70 | 71 | M 72 | Global constants table ID 73 | 74 | 75 | N 76 | Global constants table ID 77 | 78 | 79 | P 80 | Global constants table ID 81 | 82 | 83 | R 84 | Global constants table ID 85 | 86 | 87 | S 88 | Global constants table ID 89 | 90 | 91 | T 92 | Global constants table ID 93 | 94 | 95 | U 96 | Global constants table ID 97 | 98 | 99 | W 100 | Global constants table ID 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /src/core/zabak_k.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_K 7 | E 8 | INTTAB 9 | abaK Constant line 10 | 1 11 | 12 | 13 | 14 | ZABAK_K 15 | SCOPE 16 | 0001 17 | X 18 | ZABAK_SCOPE 19 | 0 20 | E 21 | 22 | 23 | ZABAK_K 24 | FIELDNAME 25 | 0002 26 | X 27 | ZABAK_FIELDNAME 28 | 0 29 | E 30 | 31 | 32 | ZABAK_K 33 | CONTEXT 34 | 0003 35 | X 36 | ZABAK_CONTEXT 37 | 0 38 | E 39 | 40 | 41 | ZABAK_K 42 | T_KV 43 | 0004 44 | ZABAK_KV_T 45 | 0 46 | TTYP 47 | TTYPL 48 | L 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/core/zabak_k_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_K_T 7 | E 8 | ZABAK_K 9 | S 10 | STRU 11 | T 12 | K 13 | N 14 | 0003 15 | abaK Constant table 16 | 17 | 18 | 19 | ZABAK_K_T 20 | 0001 21 | 0001 22 | SCOPE 23 | 24 | 25 | ZABAK_K_T 26 | 0002 27 | 0002 28 | FIELDNAME 29 | 30 | 31 | ZABAK_K_T 32 | 0003 33 | 0003 34 | CONTEXT 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/core/zabak_kv.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_KV 7 | E 8 | INTTAB 9 | abaK Constant value 10 | 1 11 | 12 | 13 | 14 | ZABAK_KV 15 | SIGN 16 | 0001 17 | BAPISIGN 18 | 0 19 | X 20 | F 21 | E 22 | 23 | 24 | ZABAK_KV 25 | OPTION 26 | 0002 27 | BAPIOPTION 28 | 0 29 | X 30 | F 31 | E 32 | 33 | 34 | ZABAK_KV 35 | LOW 36 | 0003 37 | ZABAK_LOW 38 | 0 39 | E 40 | 41 | 42 | ZABAK_KV 43 | HIGH 44 | 0004 45 | ZABAK_HIGH 46 | 0 47 | E 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/core/zabak_kv_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_KV_T 7 | E 8 | ZABAK_KV 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | abaK Constant value table 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_maintf00.abap: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------* 2 | * view related FORM routines 3 | * generation date: 05.04.2019 at 13:53:16 4 | * view maintenance generator version: #001407# 5 | *---------------------------------------------------------------------* 6 | 7 | * base table related FORM-routines............. 8 | INCLUDE LSVIMFTX . 9 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_maintf00.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZABAK_MAINTF00 7 | X 8 | I 9 | E 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_mainti00.abap: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------* 2 | * view related PAI modules 3 | * generation date: 05.04.2019 at 13:53:16 4 | * view maintenance generator version: #001407# 5 | *---------------------------------------------------------------------* 6 | 7 | INCLUDE LSVIMITX . "base table related PAI modules 8 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_mainti00.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZABAK_MAINTI00 7 | X 8 | I 9 | E 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_maintt00.abap: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------* 2 | * view related data declarations 3 | * generation date: 05.04.2019 at 13:53:15 4 | * view maintenance generator version: #001407# 5 | *---------------------------------------------------------------------* 6 | *...processing: ZABAK...........................................* 7 | DATA: BEGIN OF STATUS_ZABAK . "state vector 8 | INCLUDE STRUCTURE VIMSTATUS. 9 | DATA: END OF STATUS_ZABAK . 10 | CONTROLS: TCTRL_ZABAK 11 | TYPE TABLEVIEW USING SCREEN '0001'. 12 | *...processing: ZABAK_DEFAULT...................................* 13 | DATA: BEGIN OF STATUS_ZABAK_DEFAULT . "state vector 14 | INCLUDE STRUCTURE VIMSTATUS. 15 | DATA: END OF STATUS_ZABAK_DEFAULT . 16 | CONTROLS: TCTRL_ZABAK_DEFAULT 17 | TYPE TABLEVIEW USING SCREEN '0002'. 18 | *.........table declarations:.................................* 19 | TABLES: *ZABAK . 20 | TABLES: *ZABAK_DEFAULT . 21 | TABLES: ZABAK . 22 | TABLES: ZABAK_DEFAULT . 23 | 24 | * general table data declarations.............. 25 | INCLUDE LSVIMTDT . 26 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_maintt00.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZABAK_MAINTT00 7 | I 8 | E 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_mainttop.abap: -------------------------------------------------------------------------------- 1 | * regenerated at 30.10.2018 10:57:39 2 | FUNCTION-POOL ZABAK_MAINT MESSAGE-ID SV. 3 | 4 | * INCLUDE LZABAK_MAINTD... " Local class definition 5 | INCLUDE LSVIMDAT . "general data decl. 6 | INCLUDE LZABAK_MAINTT00 . "view rel. data dcl. 7 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.lzabak_mainttop.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZABAK_MAINTTOP 7 | S 8 | D$ 9 | I 10 | S 11 | X 12 | D$S 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.saplzabak_maint.abap: -------------------------------------------------------------------------------- 1 | * regenerated at 30.10.2018 10:57:39 2 | ******************************************************************* 3 | * System-defined Include-files. * 4 | ******************************************************************* 5 | INCLUDE LZABAK_MAINTTOP. " Global Data 6 | INCLUDE LZABAK_MAINTUXX. " Function Modules 7 | 8 | ******************************************************************* 9 | * User-defined Include-files (if necessary). * 10 | ******************************************************************* 11 | * INCLUDE LZABAK_MAINTF... " Subroutines 12 | * INCLUDE LZABAK_MAINTO... " PBO-Modules 13 | * INCLUDE LZABAK_MAINTI... " PAI-Modules 14 | * INCLUDE LZABAK_MAINTE... " Events 15 | * INCLUDE LZABAK_MAINTP... " Local class implement. 16 | * INCLUDE LZABAK_MAINTT99. " ABAP Unit tests 17 | INCLUDE LZABAK_MAINTF00 . " subprograms 18 | INCLUDE LZABAK_MAINTI00 . " PAI modules 19 | INCLUDE LSVIMFXX . " subprograms 20 | INCLUDE LSVIMOXX . " PBO modules 21 | INCLUDE LSVIMIXX . " PAI modules 22 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.saplzabak_maint.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | SAPLZABAK_MAINT 7 | X 8 | S 9 | D$ 10 | F 11 | S 12 | E 13 | X 14 | D$S 15 | X 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.tableframe_zabak_maint.abap: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------* 2 | * program for: TABLEFRAME_ZABAK_MAINT 3 | * generation date: 05.04.2019 at 13:53:09 4 | * view maintenance generator version: #001407# 5 | *---------------------------------------------------------------------* 6 | FUNCTION TABLEFRAME_ZABAK_MAINT . 7 | 8 | PERFORM TABLEFRAME TABLES X_HEADER X_NAMTAB DBA_SELLIST DPL_SELLIST 9 | EXCL_CUA_FUNCT 10 | USING CORR_NUMBER VIEW_ACTION VIEW_NAME. 11 | 12 | ENDFUNCTION. 13 | -------------------------------------------------------------------------------- /src/core/zabak_maint.fugr.tableproc_zabak_maint.abap: -------------------------------------------------------------------------------- 1 | *---------------------------------------------------------------------* 2 | * program for: TABLEPROC_ZABAK_MAINT 3 | * generation date: 05.04.2019 at 13:53:14 4 | * view maintenance generator version: #001407# 5 | *---------------------------------------------------------------------* 6 | FUNCTION TABLEPROC_ZABAK_MAINT . 7 | 8 | PERFORM TABLEPROC. 9 | 10 | ENDFUNCTION. 11 | -------------------------------------------------------------------------------- /src/core/zabak_namevalue.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_NAMEVALUE 7 | E 8 | INTTAB 9 | abaK Name+value 10 | 1 11 | 12 | 13 | 14 | ZABAK_NAMEVALUE 15 | NAME 16 | E 17 | 0001 18 | 0 19 | g 20 | 000008 21 | STRG 22 | STRG 23 | 24 | 25 | ZABAK_NAMEVALUE 26 | VALUE 27 | E 28 | 0002 29 | 0 30 | g 31 | 000008 32 | STRG 33 | STRG 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/core/zabak_namevalue_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_NAMEVALUE_T 7 | E 8 | ZABAK_NAMEVALUE 9 | S 10 | STRU 11 | S 12 | K 13 | U 14 | 0001 15 | abaK Name+value table 16 | 17 | 18 | 19 | ZABAK_NAMEVALUE_T 20 | 0001 21 | 0001 22 | NAME 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/core/zabak_range.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_RANGE 7 | E 8 | INTTAB 9 | abaK Range line 10 | 1 11 | 12 | 13 | 14 | ZABAK_RANGE 15 | SIGN 16 | 0001 17 | DDSIGN 18 | 0 19 | X 20 | F 21 | E 22 | 23 | 24 | ZABAK_RANGE 25 | OPTION 26 | 0002 27 | DDOPTION 28 | 0 29 | X 30 | F 31 | E 32 | 33 | 34 | ZABAK_RANGE 35 | LOW 36 | 0003 37 | ZABAK_LOW 38 | 0 39 | E 40 | 41 | 42 | ZABAK_RANGE 43 | HIGH 44 | 0004 45 | ZABAK_LOW 46 | 0 47 | E 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/core/zabak_range_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_RANGE_T 7 | E 8 | ZABAK_RANGE 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | abaK Range table 15 | R 16 | ZABAK_LOW 17 | CHAR 18 | 000200 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/core/zabak_source_type.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_SOURCE_TYPE 7 | E 8 | CHAR 9 | 000010 10 | 000010 11 | X 12 | abaK Source type 13 | 14 | 15 | 16 | ZABAK_SOURCE_TYPE 17 | 0001 18 | E 19 | FILE 20 | File 21 | 22 | 23 | ZABAK_SOURCE_TYPE 24 | 0002 25 | E 26 | URL 27 | URL 28 | 29 | 30 | ZABAK_SOURCE_TYPE 31 | 0003 32 | E 33 | INLINE 34 | Inline 35 | 36 | 37 | ZABAK_SOURCE_TYPE 38 | 0004 39 | E 40 | SO10 41 | Standard text (SO10) 42 | 43 | 44 | ZABAK_SOURCE_TYPE 45 | 0005 46 | E 47 | RFC 48 | RFC 49 | 50 | 51 | ZABAK_SOURCE_TYPE 52 | 0006 53 | E 54 | DB 55 | Database 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /src/core/zabak_source_type.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_SOURCE_TYPE 7 | E 8 | ZABAK_SOURCE_TYPE 9 | 20 10 | 10 11 | 15 12 | 20 13 | abaK Source type 14 | Source type 15 | SourceType 16 | Source type 17 | Source type 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/core/zabak_use_shm.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_USE_SHM 7 | E 8 | FLAG 9 | 18 10 | 10 11 | 18 12 | 20 13 | abaK Use Shared Objects 14 | Use Shared Objects 15 | UseShrdObj 16 | Use Shared Objects 17 | Use Shared Objects 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/core/zabak_value.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_VALUE 7 | E 8 | CHAR 9 | 000200 10 | 000200 11 | X 12 | abaK Value 13 | 14 | 15 | 1 16 | 2 17 | 3 18 | A 19 | F 20 | G 21 | I 22 | J 23 | L 24 | M 25 | N 26 | P 27 | R 28 | S 29 | T 30 | U 31 | W 32 | 33 | 34 | 35 | 1 36 | Global constants value 37 | 38 | 39 | 2 40 | Global constants value 41 | 42 | 43 | 3 44 | Global constants value 45 | 46 | 47 | A 48 | Global constants value 49 | 50 | 51 | F 52 | Global constants value 53 | 54 | 55 | G 56 | Global constants value 57 | 58 | 59 | I 60 | Global constants value 61 | 62 | 63 | J 64 | Global constants value 65 | 66 | 67 | L 68 | Global constants value 69 | 70 | 71 | M 72 | Global constants value 73 | 74 | 75 | N 76 | Global constants value 77 | 78 | 79 | P 80 | Global constants value 81 | 82 | 83 | R 84 | Global constants value 85 | 86 | 87 | S 88 | Global constants value 89 | 90 | 91 | T 92 | Global constants value 93 | 94 | 95 | U 96 | Global constants value 97 | 98 | 99 | W 100 | Global constants value 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /src/core/zabak_xml_k.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_XML_K 7 | E 8 | INTTAB 9 | abaK XML constant line 10 | 1 11 | 12 | 13 | 14 | ZABAK_XML_K 15 | SCOPE 16 | 0001 17 | X 18 | ZABAK_SCOPE 19 | 0 20 | E 21 | 22 | 23 | ZABAK_XML_K 24 | FIELDNAME 25 | 0002 26 | X 27 | ZABAK_FIELDNAME 28 | 0 29 | E 30 | 31 | 32 | ZABAK_XML_K 33 | CONTEXT 34 | 0003 35 | X 36 | ZABAK_CONTEXT 37 | 0 38 | E 39 | 40 | 41 | ZABAK_XML_K 42 | VALUE 43 | 0004 44 | ZABAK_LOW 45 | 0 46 | E 47 | 48 | 49 | ZABAK_XML_K 50 | T_KV 51 | 0005 52 | ZABAK_KV_T 53 | 0 54 | TTYP 55 | TTYPL 56 | L 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /src/core/zabak_xml_k_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_XML_K_T 7 | E 8 | ZABAK_XML_K 9 | S 10 | STRU 11 | T 12 | K 13 | N 14 | 0003 15 | abaK XML constant table 16 | 17 | 18 | 19 | ZABAK_XML_K_T 20 | 0001 21 | 0001 22 | SCOPE 23 | 24 | 25 | ZABAK_XML_K_T 26 | 0002 27 | 0002 28 | FIELDNAME 29 | 30 | 31 | ZABAK_XML_K_T 32 | 0003 33 | 0003 34 | CONTEXT 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data.clas.locals_imp.abap: -------------------------------------------------------------------------------- 1 | * Mock class to be able to instantiate _DATA in unit tests (since it is abstract) 2 | CLASS lcl_data_for_utests DEFINITION 3 | FINAL 4 | INHERITING FROM zcl_abak_data. 5 | 6 | PUBLIC SECTION. 7 | METHODS constructor 8 | IMPORTING it_k TYPE zabak_k_t. 9 | 10 | PROTECTED SECTION. 11 | METHODS load_data_aux REDEFINITION. 12 | METHODS invalidate_aux REDEFINITION. 13 | 14 | PRIVATE SECTION. 15 | DATA: gt_k TYPE zabak_k_t. 16 | ENDCLASS. 17 | 18 | CLASS lcl_data_for_utests IMPLEMENTATION. 19 | METHOD constructor. 20 | super->constructor( ). 21 | gt_k = it_k. 22 | ENDMETHOD. 23 | 24 | METHOD load_data_aux. 25 | rt_k[] = gt_k[]. 26 | ENDMETHOD. 27 | 28 | METHOD invalidate_aux. 29 | ENDMETHOD. 30 | 31 | ENDCLASS. 32 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_DATA 7 | E 8 | abaK Data 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_DATA 19 | INVALIDATE_AUX 20 | E 21 | (abstract) 22 | 23 | 24 | ZCL_ABAK_DATA 25 | LOAD_DATA_AUX 26 | E 27 | (abstract) 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_factory.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abak_data_factory DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | METHODS get_standard_instance 9 | IMPORTING 10 | !i_format_type TYPE zabak_format_type 11 | !i_source_type TYPE zabak_source_type 12 | !i_content TYPE string 13 | !i_use_shm TYPE zabak_use_shm OPTIONAL 14 | !i_bypass_cache TYPE flag OPTIONAL 15 | RETURNING 16 | value(ro_instance) TYPE REF TO zif_abak_data 17 | RAISING 18 | zcx_abak . 19 | METHODS get_custom_instance 20 | IMPORTING 21 | !io_format TYPE REF TO zif_abak_format 22 | !io_source TYPE REF TO zif_abak_source 23 | RETURNING 24 | value(ro_instance) TYPE REF TO zif_abak_data 25 | RAISING 26 | zcx_abak . 27 | PROTECTED SECTION. 28 | PRIVATE SECTION. 29 | ENDCLASS. 30 | 31 | 32 | 33 | CLASS ZCL_ABAK_DATA_FACTORY IMPLEMENTATION. 34 | 35 | 36 | METHOD get_custom_instance. 37 | CREATE OBJECT ro_instance TYPE zcl_abak_data_normal 38 | EXPORTING 39 | io_format = io_format 40 | io_source = io_source. 41 | ENDMETHOD. 42 | 43 | 44 | METHOD get_standard_instance. 45 | DATA: o_source_factory TYPE REF TO zcl_abak_source_factory, 46 | o_format_factory TYPE REF TO zcl_abak_format_factory. 47 | 48 | IF i_format_type IS INITIAL OR i_source_type IS INITIAL OR i_content IS INITIAL. 49 | RAISE EXCEPTION TYPE zcx_abak 50 | EXPORTING 51 | textid = zcx_abak=>invalid_parameters. 52 | ENDIF. 53 | 54 | IF i_bypass_cache IS INITIAL. 55 | ro_instance = lcl_cache=>get( i_use_shm = i_use_shm 56 | i_format_type = i_format_type 57 | i_source_type = i_source_type 58 | i_content = i_content ). 59 | IF ro_instance IS BOUND. 60 | RETURN. 61 | ENDIF. 62 | ENDIF. 63 | 64 | 65 | IF i_use_shm = abap_true. 66 | CREATE OBJECT ro_instance TYPE zcl_abak_data_shm 67 | EXPORTING 68 | i_format_type = i_format_type 69 | i_source_type = i_source_type 70 | i_content = i_content. 71 | ELSE. 72 | CREATE OBJECT o_source_factory. 73 | CREATE OBJECT o_format_factory. 74 | CREATE OBJECT ro_instance TYPE zcl_abak_data_normal 75 | EXPORTING 76 | io_format = o_format_factory->get_instance( i_format_type ) 77 | io_source = o_source_factory->get_instance( i_source_type = i_source_type 78 | i_content = i_content ). 79 | ENDIF. 80 | 81 | IF i_bypass_cache IS INITIAL. 82 | lcl_cache=>add( i_use_shm = i_use_shm 83 | i_format_type = i_format_type 84 | i_source_type = i_source_type 85 | i_content = i_content 86 | io_instance = ro_instance ). 87 | ENDIF. 88 | 89 | ENDMETHOD. 90 | ENDCLASS. 91 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_factory.clas.locals_imp.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for the definition and implementation of 2 | *"* local helper classes, interface definitions and type 3 | *"* declarations 4 | CLASS lcl_cache DEFINITION FINAL. 5 | PUBLIC SECTION. 6 | 7 | CLASS-METHODS get 8 | IMPORTING 9 | i_use_shm TYPE flag 10 | i_format_type TYPE zabak_format_type 11 | i_source_type TYPE zabak_source_type 12 | i_content TYPE string 13 | RETURNING value(ro_instance) TYPE REF TO zif_abak_data. 14 | 15 | CLASS-METHODS add 16 | IMPORTING 17 | i_use_shm TYPE flag 18 | i_format_type TYPE zabak_format_type 19 | i_source_type TYPE zabak_source_type 20 | i_content TYPE string 21 | io_instance TYPE REF TO zif_abak_data 22 | RAISING 23 | zcx_abak. 24 | 25 | PRIVATE SECTION. 26 | TYPES: 27 | BEGIN OF ty_s_instance, 28 | use_shm TYPE flag, 29 | format_type TYPE zabak_format_type, 30 | source_type TYPE zabak_source_type, 31 | content TYPE string, 32 | o_instance TYPE REF TO zif_abak_data, 33 | END OF ty_s_instance . 34 | 35 | TYPES: 36 | ty_t_instance 37 | TYPE SORTED TABLE OF ty_s_instance 38 | WITH UNIQUE KEY use_shm format_type source_type content. 39 | 40 | CLASS-DATA gt_instance TYPE ty_t_instance . 41 | ENDCLASS. 42 | 43 | CLASS lcl_cache IMPLEMENTATION. 44 | METHOD get. 45 | FIELD-SYMBOLS: LIKE LINE OF gt_instance. 46 | 47 | READ TABLE gt_instance ASSIGNING 48 | WITH KEY use_shm = i_use_shm 49 | format_type = i_format_type 50 | source_type = i_source_type 51 | content = i_content. 52 | IF sy-subrc = 0. 53 | ro_instance = -o_instance. 54 | ENDIF. 55 | ENDMETHOD. 56 | 57 | METHOD add. 58 | DATA: s_instance LIKE LINE OF gt_instance. 59 | 60 | s_instance-use_shm = i_use_shm. 61 | s_instance-format_type = i_format_type. 62 | s_instance-source_type = i_source_type. 63 | s_instance-content = i_content. 64 | s_instance-o_instance = io_instance. 65 | INSERT s_instance INTO TABLE gt_instance. 66 | IF sy-subrc <> 0. 67 | RAISE EXCEPTION TYPE zcx_abak 68 | EXPORTING 69 | textid = zcx_abak=>unexpected_error. 70 | ENDIF. 71 | ENDMETHOD. 72 | ENDCLASS. 73 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_factory.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_data_factory, 11 | o_data TYPE REF TO zif_abak_data. 12 | 13 | METHODS: setup. 14 | METHODS: check_class 15 | IMPORTING 16 | i_classname TYPE string. 17 | METHODS: standard_normal FOR TESTING RAISING zcx_abak. 18 | METHODS: standard_sho FOR TESTING RAISING zcx_abak. 19 | METHODS: custom FOR TESTING RAISING zcx_abak. 20 | METHODS: cache FOR TESTING RAISING zcx_abak. 21 | METHODS: bypass_cache FOR TESTING RAISING zcx_abak. 22 | ENDCLASS. "lcl_Unittest 23 | 24 | 25 | CLASS lcl_unittest IMPLEMENTATION. 26 | 27 | METHOD setup. 28 | CREATE OBJECT f_cut. 29 | ENDMETHOD. 30 | 31 | METHOD check_class. 32 | cl_abap_unit_assert=>assert_equals( exp = i_classname 33 | act = cl_abap_objectdescr=>describe_by_object_ref( o_data )->get_relative_name( ) ). 34 | ENDMETHOD. 35 | 36 | METHOD standard_normal. 37 | o_data = f_cut->get_standard_instance( 38 | i_format_type = zif_abak_consts=>format_type-xml 39 | i_source_type = zif_abak_consts=>source_type-inline 40 | i_content = 'dummy' ). 41 | check_class( 'ZCL_ABAK_DATA_NORMAL' ). 42 | ENDMETHOD. 43 | 44 | METHOD standard_sho. 45 | o_data = f_cut->get_standard_instance( 46 | i_format_type = zif_abak_consts=>format_type-xml 47 | i_source_type = zif_abak_consts=>source_type-inline 48 | i_content = 'dummy' 49 | i_use_shm = abap_true ). 50 | check_class( 'ZCL_ABAK_DATA_SHM' ). 51 | ENDMETHOD. 52 | 53 | METHOD custom. 54 | DATA: o_format_factory TYPE REF TO zcl_abak_format_factory, 55 | o_source_factory TYPE REF TO zcl_abak_source_factory. 56 | 57 | CREATE OBJECT o_format_factory. 58 | CREATE OBJECT o_source_factory. 59 | o_data = f_cut->get_custom_instance( 60 | io_format = o_format_factory->get_instance( zif_abak_consts=>format_type-xml ) 61 | io_source = o_source_factory->get_instance( i_source_type = zif_abak_consts=>source_type-inline 62 | i_content = 'dummy' ) ). 63 | check_class( 'ZCL_ABAK_DATA_NORMAL' ). 64 | ENDMETHOD. 65 | 66 | METHOD cache. 67 | DATA: o_data2 TYPE REF TO zif_abak_data. 68 | 69 | o_data = f_cut->get_standard_instance( 70 | i_format_type = zif_abak_consts=>format_type-xml 71 | i_source_type = zif_abak_consts=>source_type-inline 72 | i_content = 'dummy' ). 73 | 74 | o_data2 = f_cut->get_standard_instance( 75 | i_format_type = zif_abak_consts=>format_type-xml 76 | i_source_type = zif_abak_consts=>source_type-inline 77 | i_content = 'dummy' 78 | i_bypass_cache = abap_false ). 79 | 80 | cl_abap_unit_assert=>assert_equals( exp = o_data 81 | act = o_data2 ). 82 | ENDMETHOD. 83 | 84 | METHOD bypass_cache. 85 | DATA: o_data2 TYPE REF TO zif_abak_data. 86 | 87 | o_data = f_cut->get_standard_instance( 88 | i_format_type = zif_abak_consts=>format_type-xml 89 | i_source_type = zif_abak_consts=>source_type-inline 90 | i_content = 'dummy' ). 91 | 92 | o_data2 = f_cut->get_standard_instance( 93 | i_format_type = zif_abak_consts=>format_type-xml 94 | i_source_type = zif_abak_consts=>source_type-inline 95 | i_content = 'dummy' 96 | i_bypass_cache = abap_true ). 97 | 98 | IF o_data = o_data2. 99 | cl_abap_unit_assert=>fail( msg = 'Instances should be different' ). 100 | ENDIF. 101 | 102 | ENDMETHOD. 103 | 104 | ENDCLASS. 105 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_factory.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_DATA_FACTORY 7 | E 8 | abaK Data factory 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_normal.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_DATA_NORMAL definition 2 | public 3 | inheriting from ZCL_ABAK_DATA 4 | final 5 | create public 6 | 7 | global friends ZCL_ABAK_FACTORY . 8 | 9 | public section. 10 | 11 | methods CONSTRUCTOR 12 | importing 13 | !IO_FORMAT type ref to ZIF_ABAK_FORMAT 14 | !IO_SOURCE type ref to zif_abak_source 15 | raising 16 | ZCX_ABAK . 17 | protected section. 18 | 19 | methods INVALIDATE_AUX 20 | redefinition . 21 | methods LOAD_DATA_AUX 22 | redefinition . 23 | PRIVATE SECTION. 24 | 25 | DATA go_format TYPE REF TO zif_abak_format . 26 | DATA go_source TYPE REF TO zif_abak_source . 27 | ENDCLASS. 28 | 29 | 30 | 31 | CLASS ZCL_ABAK_DATA_NORMAL IMPLEMENTATION. 32 | 33 | 34 | METHOD constructor. 35 | 36 | super->constructor( ). 37 | 38 | IF io_format IS NOT BOUND OR IO_SOURCE IS NOT BOUND. 39 | RAISE EXCEPTION TYPE zcx_abak 40 | EXPORTING 41 | textid = zcx_abak=>invalid_parameters. 42 | ENDIF. 43 | 44 | go_format = io_format. 45 | go_source = IO_SOURCE. 46 | 47 | ENDMETHOD. 48 | 49 | 50 | METHOD invalidate_aux. 51 | go_source->invalidate( ). 52 | ENDMETHOD. 53 | 54 | 55 | METHOD load_data_aux. 56 | rt_k = go_format->convert( go_source->get( ) ). 57 | ENDMETHOD. 58 | ENDCLASS. 59 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_normal.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | * INHERITING FROM zcl_abak_unit_tests 4 | DURATION SHORT 5 | RISK LEVEL HARMLESS 6 | FINAL. 7 | 8 | PRIVATE SECTION. 9 | 10 | DATA: 11 | f_cut TYPE REF TO zcl_abak_data_normal. 12 | 13 | METHODS: setup RAISING zcx_abak. 14 | METHODS: read_valid FOR TESTING RAISING zcx_abak. 15 | ENDCLASS. "lcl_Unittest 16 | 17 | 18 | CLASS lcl_unittest IMPLEMENTATION. 19 | 20 | METHOD setup. 21 | DATA: o_tools TYPE REF TO zcl_abak_tools, 22 | o_format TYPE REF TO zcl_abak_format_xml, 23 | o_source TYPE REF TO zcl_abak_source_inline. 24 | 25 | CREATE OBJECT o_tools. 26 | 27 | CREATE OBJECT o_format. 28 | 29 | CREATE OBJECT o_source 30 | EXPORTING 31 | i_content = o_tools->get_demo_xml( ). 32 | 33 | CREATE OBJECT f_cut 34 | EXPORTING 35 | io_format = o_format 36 | io_source = o_source. 37 | ENDMETHOD. 38 | 39 | METHOD read_valid. 40 | 41 | cl_abap_unit_assert=>assert_differs( 42 | exp = 0 43 | act = lines( f_cut->zif_abak_data~read( i_scope = 'GLOBAL' 44 | i_fieldname = 'BUKRS' 45 | i_context = space ) ) 46 | msg = 'Resulting table should not be empty' ). 47 | 48 | ENDMETHOD. 49 | 50 | ENDCLASS. "lcl_Unittest 51 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_normal.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_DATA_NORMAL 7 | E 8 | abaK Data normal 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_DATA_NORMAL 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_shm.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_data_shm. "class under test 11 | 12 | METHODS: setup RAISING zcx_abak. 13 | METHODS: read_valid FOR TESTING RAISING zcx_abak. 14 | ENDCLASS. "lcl_Unittest 15 | 16 | 17 | CLASS lcl_unittest IMPLEMENTATION. 18 | 19 | METHOD setup. 20 | DATA: o_tools TYPE REF TO zcl_abak_tools. 21 | 22 | CREATE OBJECT o_tools. 23 | 24 | CREATE OBJECT f_cut 25 | EXPORTING 26 | i_format_type = zif_abak_consts=>format_type-xml 27 | i_source_type = zif_abak_consts=>source_type-inline 28 | i_content = o_tools->get_demo_xml( ). 29 | ENDMETHOD. 30 | 31 | METHOD read_valid. 32 | 33 | cl_abap_unit_assert=>assert_differs( 34 | exp = 0 35 | act = lines( f_cut->zif_abak_data~read( i_scope = space 36 | i_fieldname = 'BUKRS' 37 | i_context = space ) ) 38 | msg = 'Resulting table should not be empty' ). 39 | 40 | ENDMETHOD. 41 | 42 | ENDCLASS. "lcl_Unittest 43 | -------------------------------------------------------------------------------- /src/core/zcl_abak_data_shm.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_DATA_SHM 7 | E 8 | abaK Data normal 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_DATA_SHM 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | ZCL_ABAK_DATA_SHM 25 | G_SOURCE_TYPE 26 | E 27 | abaK Source type 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/core/zcl_abak_factory.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_FACTORY 7 | E 8 | abaK Factory 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/core/zcl_abak_k_table.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_K_TABLE 7 | E 8 | abaK K Table 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ABAK_K_TABLE 17 | GT_K 18 | E 19 | abaK Constant table 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/core/zcl_abak_params.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_PARAMS 7 | E 8 | abaK Parameters 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_PARAMS 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/core/zcl_abak_params_definition.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | DATA: 9 | f_cut TYPE REF TO zcl_abak_params_definition, 10 | t_param TYPE zabak_namevalue_t. 11 | 12 | METHODS add 13 | IMPORTING 14 | i_name TYPE string 15 | i_value TYPE string. 16 | METHODS no_params FOR TESTING RAISING zcx_abak. 17 | METHODS single_param FOR TESTING RAISING zcx_abak. 18 | METHODS two_params FOR TESTING RAISING zcx_abak. 19 | METHODS obligatory_missing FOR TESTING. 20 | METHODS non_obligatory_missing FOR TESTING RAISING zcx_abak. 21 | METHODS invalid_param FOR TESTING. 22 | METHODS length_exceeded FOR TESTING. 23 | METHODS length_not_exceeded FOR TESTING RAISING zcx_abak. 24 | 25 | ENDCLASS. "lcl_Unittest 26 | 27 | 28 | CLASS lcl_unittest IMPLEMENTATION. 29 | 30 | METHOD add. 31 | DATA: s_param LIKE LINE OF t_param. 32 | s_param-name = i_name. 33 | s_param-value = i_value. 34 | INSERT s_param INTO TABLE t_param. 35 | ENDMETHOD. 36 | 37 | METHOD no_params. 38 | CREATE OBJECT f_cut 39 | EXPORTING 40 | i_definition = space. 41 | ENDMETHOD. 42 | 43 | METHOD single_param. 44 | 45 | CREATE OBJECT f_cut 46 | EXPORTING 47 | i_definition = '+PARAM1'. 48 | 49 | add( i_name = 'PARAM1' i_value = '123' ). 50 | 51 | f_cut->check_parameters( t_param ). 52 | 53 | ENDMETHOD. 54 | 55 | METHOD two_params. 56 | CREATE OBJECT f_cut 57 | EXPORTING 58 | i_definition = 'PARAM1 PARAM2'. 59 | 60 | add( i_name = 'PARAM1' i_value = '123' ). 61 | add( i_name = 'PARAM2' i_value = '456' ). 62 | 63 | f_cut->check_parameters( t_param ). 64 | 65 | ENDMETHOD. 66 | 67 | METHOD invalid_param. 68 | TRY. 69 | CREATE OBJECT f_cut 70 | EXPORTING 71 | i_definition = 'VALID'. 72 | 73 | add( i_name = 'INVALID' i_value = '123' ). 74 | 75 | f_cut->check_parameters( t_param ). 76 | 77 | cl_abap_unit_assert=>fail( 'Should have failed with INVALID parameter '). 78 | CATCH zcx_abak. 79 | RETURN. 80 | ENDTRY. 81 | 82 | ENDMETHOD. 83 | 84 | METHOD obligatory_missing. 85 | TRY. 86 | CREATE OBJECT f_cut 87 | EXPORTING 88 | i_definition = '+OBLIGATORY VALID'. 89 | 90 | add( i_name = 'VALID' i_value = '123' ). 91 | 92 | f_cut->check_parameters( t_param ). 93 | 94 | cl_abap_unit_assert=>fail( 'Obligatory parameter should have been detected'). 95 | CATCH zcx_abak. 96 | RETURN. 97 | ENDTRY. 98 | 99 | ENDMETHOD. 100 | 101 | METHOD non_obligatory_missing. 102 | CREATE OBJECT f_cut 103 | EXPORTING 104 | i_definition = 'NON_OBLIGATORY VALID'. 105 | 106 | add( i_name = 'VALID' i_value = '123' ). 107 | 108 | f_cut->check_parameters( t_param ). 109 | 110 | ENDMETHOD. 111 | 112 | METHOD length_exceeded. 113 | TRY. 114 | CREATE OBJECT f_cut 115 | EXPORTING 116 | i_definition = 'PARAM1 PARAM2 PARAM3(5)'. 117 | 118 | add( i_name = 'PARAM3' i_value = '123456' ). 119 | 120 | f_cut->check_parameters( t_param ). 121 | 122 | cl_abap_unit_assert=>fail( 'Max length of 5 should have been detected'). 123 | 124 | CATCH zcx_abak. 125 | RETURN. 126 | ENDTRY. 127 | 128 | ENDMETHOD. 129 | 130 | METHOD length_not_exceeded. 131 | CREATE OBJECT f_cut 132 | EXPORTING 133 | i_definition = 'PARAM1 PARAM2 PARAM3(5)'. 134 | 135 | add( i_name = 'PARAM3' i_value = '12345' ). 136 | 137 | f_cut->check_parameters( t_param ). 138 | 139 | ENDMETHOD. 140 | 141 | ENDCLASS. "lcl_Unittest 142 | -------------------------------------------------------------------------------- /src/core/zcl_abak_params_definition.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_PARAMS_DEFINITION 7 | E 8 | abaK Parameters 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_PARAMS_DEFINITION 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/core/zcl_abak_rfc.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_RFC definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | interface ZIF_ABAK_CONSTS load . 8 | 9 | methods GET_DATA 10 | importing 11 | !I_ID type ZABAK_ID 12 | returning 13 | value(R_SERIALIZED) type STRING 14 | raising 15 | ZCX_ABAK . 16 | PROTECTED SECTION. 17 | private section. 18 | 19 | methods K_TO_XML_K 20 | importing 21 | !IT_K type ZABAK_K_T 22 | returning 23 | value(RT_XML_K_T) type ZABAK_XML_K_T . 24 | ENDCLASS. 25 | 26 | 27 | 28 | CLASS ZCL_ABAK_RFC IMPLEMENTATION. 29 | 30 | 31 | METHOD get_data. 32 | 33 | DATA: s_zabak TYPE zabak, 34 | content TYPE string, 35 | o_data TYPE REF TO zif_abak_data, 36 | o_data_factory TYPE REF TO zcl_abak_data_factory, 37 | t_xml_k TYPE zabak_xml_k_t. 38 | 39 | SELECT SINGLE * FROM zabak INTO s_zabak WHERE id = i_id. 40 | IF sy-subrc <> 0. 41 | RAISE EXCEPTION TYPE zcx_abak. " TODO 42 | ENDIF. 43 | 44 | IF s_zabak-format_type IS INITIAL OR s_zabak-source_type IS INITIAL OR s_zabak-content IS INITIAL. 45 | RAISE EXCEPTION TYPE zcx_abak 46 | EXPORTING 47 | textid = zcx_abak=>invalid_parameters. 48 | ENDIF. 49 | 50 | content = s_zabak-content. 51 | 52 | CREATE OBJECT o_data_factory. 53 | o_data = o_data_factory->get_standard_instance( i_format_type = s_zabak-format_type 54 | i_source_type = s_zabak-source_type 55 | i_content = content ). 56 | 57 | t_xml_k = k_to_xml_k( o_data->get_data( ) ). 58 | CALL TRANSFORMATION zabak_content_rfc 59 | SOURCE constants = t_xml_k 60 | RESULT XML r_serialized. 61 | 62 | ENDMETHOD. 63 | 64 | 65 | METHOD k_to_xml_k. 66 | 67 | DATA: s_xml_k LIKE LINE OF rt_xml_k_t. 68 | 69 | FIELD-SYMBOLS: LIKE LINE OF it_k. 70 | 71 | LOOP AT it_k ASSIGNING . 72 | MOVE-CORRESPONDING TO s_xml_k. 73 | INSERT s_xml_k INTO TABLE rt_xml_k_t. 74 | ENDLOOP. 75 | 76 | ENDMETHOD. 77 | ENDCLASS. 78 | -------------------------------------------------------------------------------- /src/core/zcl_abak_rfc.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_RFC 7 | E 8 | abaK RFC Tool 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/core/zcl_abak_shm_area.shma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SHM_AREA 7 | abaK database shared memory area 8 | ZCL_ABAK_SHM_ROOT 9 | X 10 | 109200001 11 | 159200000 12 | 1208200200 13 | 1107197100 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/core/zcl_abak_shm_root.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abak_shm_root DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC 5 | SHARED MEMORY ENABLED . 6 | 7 | PUBLIC SECTION. 8 | 9 | METHODS constructor 10 | IMPORTING 11 | !i_format_type TYPE zabak_format_type 12 | !i_source_type TYPE zabak_source_type 13 | !i_content TYPE string 14 | RAISING 15 | zcx_abak . 16 | METHODS get_data 17 | RETURNING 18 | value(rt_k) TYPE zabak_k_t 19 | RAISING 20 | zcx_abak . 21 | PROTECTED SECTION. 22 | PRIVATE SECTION. 23 | 24 | DATA g_format_type TYPE zabak_format_type . 25 | DATA g_source_type TYPE zabak_source_type . 26 | DATA g_content TYPE string . 27 | DATA gt_k TYPE zabak_k_t . 28 | DATA g_loaded TYPE flag . 29 | 30 | METHODS load_data 31 | RAISING 32 | zcx_abak . 33 | ENDCLASS. 34 | 35 | 36 | 37 | CLASS ZCL_ABAK_SHM_ROOT IMPLEMENTATION. 38 | 39 | 40 | METHOD constructor. 41 | 42 | g_format_type = i_format_type. 43 | g_source_type = i_source_type. 44 | g_content = i_content. 45 | 46 | load_data( ). 47 | 48 | ENDMETHOD. 49 | 50 | 51 | METHOD get_data. 52 | 53 | LOG-POINT ID zabak SUBKEY 'shm_root.get_data' FIELDS g_format_type g_source_type g_content. 54 | 55 | load_data( ). 56 | 57 | rt_k = gt_k. 58 | 59 | ENDMETHOD. "#EC CI_VALPAR 60 | 61 | 62 | METHOD load_data. 63 | DATA: o_data TYPE REF TO zif_abak_data, 64 | o_data_factory TYPE REF TO zcl_abak_data_factory. 65 | 66 | IF g_loaded IS INITIAL. 67 | CREATE OBJECT o_data_factory. 68 | o_data = o_data_factory->get_standard_instance( i_format_type = g_format_type 69 | i_source_type = g_source_type 70 | i_content = g_content ). 71 | 72 | gt_k = o_data->get_data( ). 73 | g_loaded = abap_true. 74 | ENDIF. 75 | 76 | ENDMETHOD. 77 | ENDCLASS. 78 | -------------------------------------------------------------------------------- /src/core/zcl_abak_shm_root.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SHM_ROOT 7 | E 8 | abaK Source database 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_SHM_ROOT 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | ZCL_ABAK_SHM_ROOT 25 | GT_K 26 | E 27 | ABAK Data table 28 | 29 | 30 | ZCL_ABAK_SHM_ROOT 31 | G_LOADED 32 | E 33 | General Flag 34 | 35 | 36 | ZCL_ABAK_SHM_ROOT 37 | G_SOURCE_TYPE 38 | E 39 | abaK Source type 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/core/zcl_abak_source.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_SOURCE definition 2 | public 3 | abstract 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces zif_abak_source 9 | abstract methods GET_TYPE . 10 | protected section. 11 | 12 | methods LOAD 13 | abstract 14 | returning 15 | value(R_CONTENT) type STRING 16 | raising 17 | ZCX_ABAK . 18 | private section. 19 | 20 | data G_CONTENT type STRING . 21 | data G_LOADED type FLAG . 22 | ENDCLASS. 23 | 24 | 25 | 26 | CLASS ZCL_ABAK_SOURCE IMPLEMENTATION. 27 | 28 | 29 | METHOD zif_abak_source~get. 30 | 31 | IF g_loaded IS INITIAL. 32 | g_content = load( ). 33 | g_loaded = abap_true. 34 | ENDIF. 35 | 36 | r_content = g_content. 37 | 38 | ENDMETHOD. 39 | 40 | 41 | METHOD zif_abak_source~invalidate. 42 | CLEAR g_loaded. 43 | ENDMETHOD. 44 | ENDCLASS. 45 | -------------------------------------------------------------------------------- /src/core/zcl_abak_source.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE 7 | E 8 | abaK Raw text from URL 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ABAK_SOURCE 17 | LOAD 18 | E 19 | (abstract) 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/core/zcl_abak_tools.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_TOOLS definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | methods CHECK_AGAINST_REGEX 9 | importing 10 | !I_REGEX type STRING 11 | !I_VALUE type STRING 12 | raising 13 | ZCX_ABAK . 14 | methods GET_DEMO_XML 15 | returning 16 | value(R_XML) type STRING 17 | raising 18 | ZCX_ABAK . 19 | protected section. 20 | private section. 21 | ENDCLASS. 22 | 23 | 24 | 25 | CLASS ZCL_ABAK_TOOLS IMPLEMENTATION. 26 | 27 | 28 | METHOD check_against_regex. 29 | DATA: o_matcher TYPE REF TO cl_abap_matcher, 30 | o_exp TYPE REF TO cx_root. 31 | 32 | TRY. 33 | o_matcher = cl_abap_matcher=>create( pattern = i_regex 34 | text = i_value 35 | ignore_case = abap_true ). 36 | 37 | IF o_matcher->match( ) IS INITIAL. 38 | RAISE EXCEPTION TYPE zcx_abak. " TODO 39 | ENDIF. 40 | 41 | CATCH cx_sy_regex cx_sy_matcher INTO o_exp. 42 | RAISE EXCEPTION TYPE zcx_abak 43 | EXPORTING 44 | previous = o_exp. 45 | ENDTRY. 46 | ENDMETHOD. 47 | 48 | 49 | METHOD get_demo_xml. 50 | * Even though storing constants in a separate file is better than hard coding them 51 | * directly in the code, it would still be difficult for a functional person to maintain it. 52 | * This demo uses a XSLT to store the XML file just for simplicity sake. If you want to store 53 | * your constants in XML format make sure they are in a place which is both safe and yet easy 54 | * to maintain according to the project needs and your company standards. 55 | 56 | * Please bear in mind that with this example we are not advocating that constants should be 57 | * hard coded in the program. On the contrary. That defeats the whole purpose of this tool. 58 | * This is just a simpler way to package the demo data. 59 | 60 | r_xml = ||. 61 | 62 | CALL TRANSFORMATION zabak_demo_xml 63 | SOURCE XML r_xml 64 | RESULT XML r_xml. 65 | 66 | ENDMETHOD. 67 | ENDCLASS. 68 | -------------------------------------------------------------------------------- /src/core/zcl_abak_tools.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_TOOLS 7 | E 8 | abaK Tools 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/core/zcx_abak.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ABAK definition 2 | public 3 | inheriting from CX_STATIC_CHECK 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces IF_T100_MESSAGE . 9 | 10 | constants: 11 | begin of INVALID_PARAMETERS, 12 | msgid type symsgid value 'ZABAK', 13 | msgno type symsgno value '000', 14 | attr1 type scx_attrname value '', 15 | attr2 type scx_attrname value '', 16 | attr3 type scx_attrname value '', 17 | attr4 type scx_attrname value '', 18 | end of INVALID_PARAMETERS . 19 | constants: 20 | begin of UNEXPECTED_ERROR, 21 | msgid type symsgid value 'ZABAK', 22 | msgno type symsgno value '008', 23 | attr1 type scx_attrname value '', 24 | attr2 type scx_attrname value '', 25 | attr3 type scx_attrname value '', 26 | attr4 type scx_attrname value '', 27 | end of UNEXPECTED_ERROR . 28 | constants: 29 | begin of NOT_IMPLEMENTED, 30 | msgid type symsgid value 'ZABAK', 31 | msgno type symsgno value '011', 32 | attr1 type scx_attrname value '', 33 | attr2 type scx_attrname value '', 34 | attr3 type scx_attrname value '', 35 | attr4 type scx_attrname value '', 36 | end of NOT_IMPLEMENTED . 37 | data PREVIOUS_FROM_SYST type FLAG . 38 | 39 | methods CONSTRUCTOR 40 | importing 41 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 42 | !PREVIOUS like PREVIOUS optional 43 | !PREVIOUS_FROM_SYST type FLAG optional . 44 | 45 | methods IF_MESSAGE~GET_LONGTEXT 46 | redefinition . 47 | methods IF_MESSAGE~GET_TEXT 48 | redefinition . 49 | protected section. 50 | private section. 51 | 52 | methods BUILD_FROM_SYST . 53 | ENDCLASS. 54 | 55 | 56 | 57 | CLASS ZCX_ABAK IMPLEMENTATION. 58 | 59 | 60 | method BUILD_FROM_SYST. 61 | 62 | DATA: o_exp TYPE REF TO lcx_t100_syst. 63 | IF me->previous IS NOT BOUND AND me->previous_from_syst = abap_true. 64 | TRY . 65 | RAISE EXCEPTION TYPE lcx_t100_syst. 66 | CATCH lcx_t100_syst INTO o_exp. 67 | me->previous = o_exp. 68 | ENDTRY. 69 | ENDIF. 70 | 71 | endmethod. 72 | 73 | 74 | method CONSTRUCTOR. 75 | CALL METHOD SUPER->CONSTRUCTOR 76 | EXPORTING 77 | PREVIOUS = PREVIOUS 78 | . 79 | me->PREVIOUS_FROM_SYST = PREVIOUS_FROM_SYST . 80 | clear me->textid. 81 | if textid is initial. 82 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 83 | else. 84 | IF_T100_MESSAGE~T100KEY = TEXTID. 85 | endif. 86 | endmethod. 87 | 88 | 89 | method IF_MESSAGE~GET_LONGTEXT. 90 | * The default behaviour returns the long text of this instance. 91 | * We redefine it to recursively find the chained exceptions 92 | * and fetch the long text from the last one 93 | 94 | IF me->previous IS BOUND. 95 | result = me->previous->get_longtext( preserve_newlines ). 96 | ELSE. 97 | result = super->if_message~get_longtext( preserve_newlines ). 98 | ENDIF. 99 | 100 | endmethod. 101 | 102 | 103 | method IF_MESSAGE~GET_TEXT. 104 | * The default behaviour returns the text of this instance. 105 | * We redefine it to recursively find the chained exceptions 106 | * and fetch the text from the last one 107 | 108 | IF me->previous IS BOUND. 109 | result = me->previous->get_text( ). 110 | ELSE. 111 | result = super->if_message~get_text( ). 112 | ENDIF. 113 | 114 | endmethod. 115 | ENDCLASS. 116 | -------------------------------------------------------------------------------- /src/core/zcx_abak.clas.locals_imp.abap: -------------------------------------------------------------------------------- 1 | * Build exception instance from SYST message fields 2 | * Inspiration: http://help.sap.com/abapdocu_740/en/abenmessage_interface_abexa.htm 3 | 4 | class lcx_t100_syst definition inheriting from cx_dynamic_check final. 5 | public section. 6 | interfaces if_t100_message. 7 | methods constructor. 8 | data msgv1 type symsgv. 9 | data msgv2 type symsgv. 10 | data msgv3 type symsgv. 11 | data msgv4 type symsgv. 12 | endclass. "cx_t100 DEFINITION 13 | 14 | *----------------------------------------------------------------------* 15 | * CLASS cx_t100 IMPLEMENTATION 16 | *----------------------------------------------------------------------* 17 | * 18 | *----------------------------------------------------------------------* 19 | class lcx_t100_syst implementation. 20 | method constructor. 21 | super->constructor( ). 22 | me->msgv1 = sy-msgv1. 23 | me->msgv2 = sy-msgv2. 24 | me->msgv3 = sy-msgv3. 25 | me->msgv4 = sy-msgv4. 26 | if_t100_message~t100key-msgid = sy-msgid. 27 | if_t100_message~t100key-msgno = sy-msgno. 28 | if_t100_message~t100key-attr1 = 'MSGV1'. 29 | if_t100_message~t100key-attr2 = 'MSGV2'. 30 | if_t100_message~t100key-attr3 = 'MSGV3'. 31 | if_t100_message~t100key-attr4 = 'MSGV4'. 32 | endmethod. "constructor 33 | endclass. "cx_t100 IMPLEMENTATION 34 | -------------------------------------------------------------------------------- /src/core/zcx_abak_data.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_DATA 7 | E 8 | abaK Data exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCX_ABAK_DATA 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | ZCX_ABAK_DATA 24 | HIGH 25 | E 26 | ABAK High value 27 | 28 | 29 | ZCX_ABAK_DATA 30 | LOW 31 | E 32 | ABAK Low value 33 | 34 | 35 | ZCX_ABAK_DATA 36 | OPTION 37 | E 38 | Selection operator OPTION for range tables 39 | 40 | 41 | ZCX_ABAK_DATA 42 | SIGN 43 | E 44 | Inclusion/exclusion criterion SIGN for range tables 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/core/zcx_abak_engine.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcx_abak_engine DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcx_abak 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | CONSTANTS: 10 | BEGIN OF value_not_found, 11 | msgid TYPE symsgid VALUE 'ZABAK', 12 | msgno TYPE symsgno VALUE '009', 13 | attr1 TYPE scx_attrname VALUE 'SCOPE', 14 | attr2 TYPE scx_attrname VALUE 'FIELDNAME', 15 | attr3 TYPE scx_attrname VALUE 'CONTEXT', 16 | attr4 TYPE scx_attrname VALUE '', 17 | END OF value_not_found . 18 | DATA scope TYPE zabak_scope . 19 | DATA fieldname TYPE fieldname . 20 | DATA context TYPE zabak_context . 21 | 22 | METHODS constructor 23 | IMPORTING 24 | !textid LIKE if_t100_message=>t100key OPTIONAL 25 | !previous LIKE previous OPTIONAL 26 | !previous_from_syst TYPE flag OPTIONAL 27 | !scope TYPE zabak_scope OPTIONAL 28 | !fieldname TYPE fieldname OPTIONAL 29 | !context TYPE zabak_context OPTIONAL . 30 | PROTECTED SECTION. 31 | PRIVATE SECTION. 32 | ENDCLASS. 33 | 34 | 35 | 36 | CLASS zcx_abak_engine IMPLEMENTATION. 37 | 38 | 39 | METHOD constructor ##ADT_SUPPRESS_GENERATION. 40 | CALL METHOD super->constructor 41 | EXPORTING 42 | previous = previous 43 | previous_from_syst = previous_from_syst 44 | . 45 | me->scope = scope . 46 | me->fieldname = fieldname . 47 | me->context = context . 48 | CLEAR me->textid. 49 | IF textid IS INITIAL. 50 | if_t100_message~t100key = if_t100_message=>default_textid. 51 | ELSE. 52 | if_t100_message~t100key = textid. 53 | ENDIF. 54 | ENDMETHOD. 55 | ENDCLASS. 56 | -------------------------------------------------------------------------------- /src/core/zcx_abak_engine.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_ENGINE 7 | E 8 | abaK Engine exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCX_ABAK_ENGINE 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | ZCX_ABAK_ENGINE 24 | CONTEXT 25 | E 26 | abaK context 27 | 28 | 29 | ZCX_ABAK_ENGINE 30 | FIELDNAME 31 | E 32 | Field name (for set) 33 | 34 | 35 | ZCX_ABAK_ENGINE 36 | SCOPE 37 | E 38 | abaK Scope 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/core/zcx_abak_factory.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ABAK_FACTORY definition 2 | public 3 | inheriting from ZCX_ABAK 4 | final 5 | create public . 6 | 7 | public section. 8 | 9 | constants: 10 | begin of ID_NOT_FOUND, 11 | msgid type symsgid value 'ZABAK', 12 | msgno type symsgno value '012', 13 | attr1 type scx_attrname value 'ID', 14 | attr2 type scx_attrname value '', 15 | attr3 type scx_attrname value '', 16 | attr4 type scx_attrname value '', 17 | end of ID_NOT_FOUND . 18 | data ID type ZABAK_ID . 19 | 20 | methods CONSTRUCTOR 21 | importing 22 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 23 | !PREVIOUS like PREVIOUS optional 24 | !PREVIOUS_FROM_SYST type FLAG optional 25 | !ID type ZABAK_ID optional . 26 | protected section. 27 | private section. 28 | ENDCLASS. 29 | 30 | 31 | 32 | CLASS ZCX_ABAK_FACTORY IMPLEMENTATION. 33 | 34 | 35 | method CONSTRUCTOR. 36 | CALL METHOD SUPER->CONSTRUCTOR 37 | EXPORTING 38 | PREVIOUS = PREVIOUS 39 | PREVIOUS_FROM_SYST = PREVIOUS_FROM_SYST 40 | . 41 | me->ID = ID . 42 | clear me->textid. 43 | if textid is initial. 44 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 45 | else. 46 | IF_T100_MESSAGE~T100KEY = TEXTID. 47 | endif. 48 | endmethod. 49 | ENDCLASS. 50 | -------------------------------------------------------------------------------- /src/core/zcx_abak_factory.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_FACTORY 7 | E 8 | abaK Factory exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCX_ABAK_FACTORY 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | ZCX_ABAK_FACTORY 24 | ID 25 | E 26 | abaK ID 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/core/zcx_abak_params.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ABAK_PARAMS definition 2 | public 3 | inheriting from ZCX_ABAK 4 | final 5 | create public . 6 | 7 | public section. 8 | 9 | constants: 10 | begin of DUPLICATE, 11 | msgid type symsgid value 'ZABAK', 12 | msgno type symsgno value '013', 13 | attr1 type scx_attrname value 'NAME', 14 | attr2 type scx_attrname value '', 15 | attr3 type scx_attrname value '', 16 | attr4 type scx_attrname value '', 17 | end of DUPLICATE . 18 | data NAME type STRING . 19 | 20 | methods CONSTRUCTOR 21 | importing 22 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 23 | !PREVIOUS like PREVIOUS optional 24 | !PREVIOUS_FROM_SYST type FLAG optional 25 | !NAME type STRING optional . 26 | protected section. 27 | private section. 28 | ENDCLASS. 29 | 30 | 31 | 32 | CLASS ZCX_ABAK_PARAMS IMPLEMENTATION. 33 | 34 | 35 | method CONSTRUCTOR. 36 | CALL METHOD SUPER->CONSTRUCTOR 37 | EXPORTING 38 | PREVIOUS = PREVIOUS 39 | PREVIOUS_FROM_SYST = PREVIOUS_FROM_SYST 40 | . 41 | me->NAME = NAME . 42 | clear me->textid. 43 | if textid is initial. 44 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 45 | else. 46 | IF_T100_MESSAGE~T100KEY = TEXTID. 47 | endif. 48 | endmethod. 49 | ENDCLASS. 50 | -------------------------------------------------------------------------------- /src/core/zcx_abak_params.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_PARAMS 7 | E 8 | abaK Params exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCX_ABAK_PARAMS 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/core/zif_abak.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_ABAK 2 | public . 3 | 4 | 5 | methods GET_VALUE 6 | importing 7 | !I_SCOPE type ZABAK_SCOPE optional 8 | !I_FIELDNAME type ZABAK_FIELDNAME 9 | !I_CONTEXT type ANY default ' ' 10 | returning 11 | value(R_VALUE) type ZABAK_LOW 12 | raising 13 | ZCX_ABAK . 14 | methods GET_VALUE_IF_EXISTS 15 | importing 16 | !I_SCOPE type ZABAK_SCOPE optional 17 | !I_FIELDNAME type ZABAK_FIELDNAME 18 | !I_CONTEXT type ANY default ' ' 19 | returning 20 | value(R_VALUE) type ZABAK_LOW . 21 | methods GET_RANGE 22 | importing 23 | !I_SCOPE type ZABAK_SCOPE optional 24 | !I_FIELDNAME type ZABAK_FIELDNAME 25 | !I_CONTEXT type ANY default ' ' 26 | returning 27 | value(RR_RANGE) type ZABAK_RANGE_T 28 | raising 29 | ZCX_ABAK . 30 | methods GET_RANGE_IF_EXISTS 31 | importing 32 | !I_SCOPE type ZABAK_SCOPE optional 33 | !I_FIELDNAME type ZABAK_FIELDNAME 34 | !I_CONTEXT type ANY default ' ' 35 | returning 36 | value(RR_RANGE) type ZABAK_RANGE_T . 37 | methods CHECK_VALUE 38 | importing 39 | !I_SCOPE type ZABAK_SCOPE optional 40 | !I_FIELDNAME type ZABAK_FIELDNAME 41 | !I_CONTEXT type ANY optional 42 | !I_VALUE type ANY 43 | returning 44 | value(R_RESULT) type FLAG 45 | raising 46 | ZCX_ABAK . 47 | methods CHECK_VALUE_IF_EXISTS 48 | importing 49 | !I_SCOPE type ZABAK_SCOPE optional 50 | !I_FIELDNAME type ZABAK_FIELDNAME 51 | !I_CONTEXT type ANY default ' ' 52 | !I_VALUE type ANY 53 | returning 54 | value(R_RESULT) type FLAG . 55 | methods INVALIDATE 56 | raising 57 | ZCX_ABAK . 58 | endinterface. 59 | -------------------------------------------------------------------------------- /src/core/zif_abak.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ABAK 7 | E 8 | abaK Engine interface 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/core/zif_abak_consts.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_ABAK_CONSTS 2 | public . 3 | 4 | 5 | constants VERSION type STRING value '0.23b'. "#EC NOTEXT 6 | constants: 7 | BEGIN OF source_type, 8 | database TYPE zabak_source_type VALUE 'DB', 9 | inline TYPE zabak_source_type VALUE 'INLINE', 10 | file TYPE zabak_source_type VALUE 'FILE', 11 | mime type zabak_source_type value 'MIME', 12 | rfc TYPE zabak_source_type VALUE 'RFC', 13 | standard_text TYPE zabak_source_type VALUE 'SO10', 14 | url TYPE zabak_source_type VALUE 'URL', 15 | END OF source_type . 16 | constants: 17 | BEGIN OF format_type, 18 | internal TYPE zabak_format_type VALUE 'INTERNAL', 19 | xml TYPE zabak_format_type VALUE 'XML', 20 | json TYPE zabak_format_type VALUE 'JSON', 21 | csv TYPE zabak_format_type VALUE 'CSV', 22 | END OF format_type . 23 | endinterface. 24 | -------------------------------------------------------------------------------- /src/core/zif_abak_consts.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ABAK_CONSTS 7 | E 8 | abaK Constants 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/core/zif_abak_data.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_ABAK_DATA 2 | public . 3 | 4 | 5 | methods READ 6 | importing 7 | !I_SCOPE type ZABAK_SCOPE 8 | !I_FIELDNAME type ZABAK_FIELDNAME 9 | !I_CONTEXT type ZABAK_CONTEXT 10 | returning 11 | value(RT_KV) type ZABAK_KV_T 12 | raising 13 | ZCX_ABAK . 14 | methods INVALIDATE 15 | raising 16 | ZCX_ABAK . 17 | methods GET_DATA 18 | returning 19 | value(RT_K) type ZABAK_K_T 20 | raising 21 | ZCX_ABAK . 22 | endinterface. 23 | -------------------------------------------------------------------------------- /src/core/zif_abak_data.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ABAK_DATA 7 | E 8 | abaK Data interface 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/core/zif_abak_format.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_ABAK_FORMAT 2 | public . 3 | 4 | 5 | methods CONVERT 6 | importing 7 | !I_DATA type STRING 8 | returning 9 | value(RT_K) type ZABAK_K_T 10 | raising 11 | ZCX_ABAK . 12 | methods GET_TYPE 13 | returning 14 | value(R_FORMAT_TYPE) type ZABAK_FORMAT_TYPE . 15 | endinterface. 16 | -------------------------------------------------------------------------------- /src/core/zif_abak_format.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ABAK_FORMAT 7 | E 8 | abaK Source interface 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/core/zif_abak_params.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_ABAK_PARAMS 2 | public . 3 | 4 | 5 | methods GET 6 | importing 7 | !I_NAME type STRING 8 | returning 9 | value(R_VALUE) type STRING 10 | raising 11 | ZCX_ABAK . 12 | endinterface. 13 | -------------------------------------------------------------------------------- /src/core/zif_abak_params.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ABAK_PARAMS 7 | E 8 | abak Parameters interface 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/core/zif_abak_source.intf.abap: -------------------------------------------------------------------------------- 1 | interface ZIF_ABAK_SOURCE 2 | public . 3 | 4 | 5 | methods GET 6 | returning 7 | value(R_CONTENT) type STRING 8 | raising 9 | ZCX_ABAK . 10 | methods GET_TYPE 11 | returning 12 | value(R_TYPE) type ZABAK_SOURCE_TYPE . 13 | methods INVALIDATE 14 | raising 15 | ZCX_ABAK . 16 | endinterface. 17 | -------------------------------------------------------------------------------- /src/core/zif_abak_source.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ABAK_SOURCE 7 | E 8 | abaK Source interface 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/formats/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | abaK Formats 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/formats/zabak_formats_api.pinf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | ZABAK_FORMATS_API 8 | abaK Formats API 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_csv.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_FORMAT_CSV definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces ZIF_ABAK_FORMAT . 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !I_DELIMITER type CHAR1 default '"' 13 | !I_SEPARATOR type CHAR1 default ',' . 14 | protected section. 15 | private section. 16 | 17 | types: 18 | ty_t_csv TYPE STANDARD TABLE OF string WITH KEY table_line . 19 | 20 | data GO_CONVERTER type ref to CL_RSDA_CSV_CONVERTER . 21 | 22 | methods SPLIT_INTO_LINES 23 | importing 24 | !I_CSV type STRING 25 | returning 26 | value(RT_CSV) type TY_T_CSV . 27 | methods CONVERT_CSV_2_DB 28 | importing 29 | !IT_CSV type TY_T_CSV 30 | returning 31 | value(RT_DB) type ZABAK_DB_T 32 | raising 33 | ZCX_ABAK . 34 | ENDCLASS. 35 | 36 | 37 | 38 | CLASS ZCL_ABAK_FORMAT_CSV IMPLEMENTATION. 39 | 40 | 41 | METHOD constructor. 42 | super->constructor( ). 43 | go_converter = cl_rsda_csv_converter=>create( i_delimiter = i_delimiter 44 | i_separator = i_separator ). 45 | ENDMETHOD. 46 | 47 | 48 | METHOD CONVERT_CSV_2_DB. 49 | 50 | DATA: s_db LIKE LINE OF rt_db, 51 | s_csv like line of it_csv. 52 | 53 | * It didn't have to be, but we'll use ZABAK_DB structure since it already exists 54 | LOOP AT it_csv into s_csv. 55 | s_csv = |000,{ s_csv }|. " Add MANDT to comply with the ZABAK_DB structure 56 | go_converter->csv_to_structure( EXPORTING i_data = s_csv 57 | IMPORTING e_s_data = s_db ). 58 | INSERT s_db INTO TABLE rt_db. 59 | ENDLOOP. 60 | 61 | ENDMETHOD. "#EC CI_VALPAR 62 | 63 | 64 | METHOD split_into_lines. 65 | SPLIT i_csv AT cl_abap_char_utilities=>cr_lf INTO TABLE rt_csv IN CHARACTER MODE. 66 | ENDMETHOD. 67 | 68 | 69 | METHOD zif_abak_format~convert. 70 | 71 | DATA: t_db TYPE zabak_db_t, 72 | o_k_table TYPE REF TO zcl_abak_k_table. 73 | 74 | LOG-POINT ID zabak SUBKEY 'format_csv.convert' FIELDS i_data. 75 | 76 | t_db = convert_csv_2_db( split_into_lines( i_data ) ). 77 | CREATE OBJECT o_k_table. 78 | o_k_table->add_db_t( t_db ). 79 | rt_k = o_k_table->get_k_t( ). 80 | 81 | ENDMETHOD. 82 | 83 | 84 | METHOD ZIF_ABAK_FORMAT~GET_TYPE. 85 | r_format_type = zif_abak_consts=>format_type-csv. 86 | ENDMETHOD. 87 | ENDCLASS. 88 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_csv.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_format_csv. 11 | 12 | METHODS: setup. 13 | METHODS: convert FOR TESTING RAISING zcx_abak. 14 | METHODS: get_type FOR TESTING RAISING zcx_abak. 15 | ENDCLASS. "lcl_Unittest 16 | 17 | 18 | CLASS lcl_unittest IMPLEMENTATION. 19 | 20 | METHOD setup. 21 | CREATE OBJECT f_cut. 22 | ENDMETHOD. 23 | 24 | METHOD convert. 25 | DATA: t_k TYPE zabak_k_t. 26 | FIELD-SYMBOLS: LIKE LINE OF t_k. 27 | 28 | t_k = f_cut->zif_abak_format~convert( 29 | i_data = |GLOBAL, BUKRS, , , I, EQ, 1234{ cl_abap_char_utilities=>cr_lf }GLOBAL, WAERS, , 1, I, EQ, EUR{ cl_abap_char_utilities=>cr_lf }GLOBAL, WAERS, , 2, I, EQ, USD| ). 30 | 31 | cl_abap_unit_assert=>assert_equals( exp = 2 32 | act = lines( t_k ) ). 33 | 34 | READ TABLE t_k ASSIGNING INDEX 2. 35 | 36 | cl_abap_unit_assert=>assert_equals( exp = 2 37 | act = lines( -t_kv ) ). 38 | ENDMETHOD. 39 | 40 | METHOD get_type. 41 | cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>format_type-csv 42 | act = f_cut->zif_abak_format~get_type( ) ). 43 | ENDMETHOD. 44 | 45 | ENDCLASS. "lcl_Unittest 46 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_csv.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_FORMAT_CSV 7 | E 8 | abaK Format CSV 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_FORMAT_CSV 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | ZCL_ABAK_FORMAT_CSV 25 | GO_CONVERTER 26 | E 27 | CSV Converter 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_factory.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_FORMAT_FACTORY definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | methods GET_INSTANCE 9 | importing 10 | !I_FORMAT_TYPE type ZABAK_FORMAT_TYPE 11 | returning 12 | value(RO_INSTANCE) type ref to ZIF_ABAK_FORMAT 13 | raising 14 | ZCX_ABAK . 15 | PROTECTED SECTION. 16 | private section. 17 | ENDCLASS. 18 | 19 | 20 | 21 | CLASS ZCL_ABAK_FORMAT_FACTORY IMPLEMENTATION. 22 | 23 | 24 | METHOD get_instance. 25 | 26 | CASE i_format_type. 27 | 28 | WHEN zif_abak_consts=>format_type-xml. 29 | CREATE OBJECT ro_instance TYPE zcl_abak_format_xml. 30 | 31 | WHEN zif_abak_consts=>format_type-json. 32 | CREATE OBJECT ro_instance TYPE zcl_abak_format_json. 33 | 34 | WHEN zif_abak_consts=>format_type-csv. 35 | CREATE OBJECT ro_instance TYPE zcl_abak_format_csv. 36 | 37 | WHEN zif_abak_consts=>format_type-internal. 38 | CREATE OBJECT ro_instance TYPE zcl_abak_format_internal. 39 | 40 | WHEN OTHERS. 41 | RAISE EXCEPTION TYPE zcx_abak 42 | EXPORTING 43 | textid = zcx_abak=>invalid_parameters. 44 | 45 | ENDCASE. 46 | 47 | ENDMETHOD. 48 | ENDCLASS. 49 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_factory.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_format_factory, 11 | o_format TYPE REF TO zif_abak_format. 12 | 13 | METHODS: setup. 14 | METHODS: check_class 15 | IMPORTING 16 | i_classname TYPE string. 17 | METHODS: csv FOR TESTING RAISING zcx_abak. 18 | METHODS: internal FOR TESTING RAISING zcx_abak. 19 | METHODS: json FOR TESTING RAISING zcx_abak. 20 | METHODS: xml FOR TESTING RAISING zcx_abak. 21 | METHODS: invalid FOR TESTING. 22 | ENDCLASS. "lcl_Unittest 23 | 24 | 25 | CLASS lcl_unittest IMPLEMENTATION. 26 | 27 | METHOD setup. 28 | CREATE OBJECT f_cut. 29 | ENDMETHOD. 30 | 31 | METHOD check_class. 32 | cl_abap_unit_assert=>assert_equals( exp = i_classname 33 | act = cl_abap_objectdescr=>describe_by_object_ref( o_format )->get_relative_name( ) ). 34 | endmethod. 35 | 36 | method csv. 37 | o_format = f_cut->get_instance( zif_abak_consts=>format_type-csv ). 38 | check_class( 'ZCL_ABAK_FORMAT_CSV' ). 39 | endmethod. 40 | 41 | method internal. 42 | o_format = f_cut->get_instance( zif_abak_consts=>format_type-internal ). 43 | check_class( 'ZCL_ABAK_FORMAT_INTERNAL' ). 44 | endmethod. 45 | 46 | method json. 47 | o_format = f_cut->get_instance( zif_abak_consts=>format_type-json ). 48 | check_class( 'ZCL_ABAK_FORMAT_JSON' ). 49 | endmethod. 50 | 51 | method xml. 52 | o_format = f_cut->get_instance( zif_abak_consts=>format_type-xml ). 53 | check_class( 'ZCL_ABAK_FORMAT_XML' ). 54 | endmethod. 55 | 56 | METHOD invalid. 57 | TRY. 58 | o_format = f_cut->get_instance( i_format_type = 'INVALID' ). 59 | cl_abap_unit_assert=>fail( msg = 'Invalid content type' ). 60 | CATCH zcx_abak. 61 | RETURN. 62 | ENDTRY. 63 | ENDMETHOD. 64 | ENDCLASS. 65 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_factory.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_FORMAT_FACTORY 7 | E 8 | abaK Format Factory 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_internal.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_FORMAT_INTERNAL definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces ZIF_ABAK_FORMAT . 9 | protected section. 10 | private section. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_ABAK_FORMAT_INTERNAL IMPLEMENTATION. 16 | 17 | 18 | METHOD zif_abak_format~convert. 19 | * I_DATA is expected to contain a serialized internal table of type ZABAK_K_T 20 | 21 | CALL TRANSFORMATION zabak_copy 22 | SOURCE XML i_data 23 | RESULT root = rt_k. 24 | 25 | ENDMETHOD. 26 | 27 | 28 | METHOD zif_abak_format~get_type. 29 | r_format_type = zif_abak_consts=>format_type-internal. 30 | ENDMETHOD. 31 | ENDCLASS. 32 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_internal.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_FORMAT_INTERNAL 7 | E 8 | abaK Format Internal 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_json.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_FORMAT_JSON definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces ZIF_ABAK_FORMAT . 9 | protected section. 10 | private section. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_ABAK_FORMAT_JSON IMPLEMENTATION. 16 | 17 | 18 | METHOD zif_abak_format~convert. 19 | DATA: o_exp TYPE REF TO cx_st_error, 20 | t_xml_k TYPE zabak_xml_k_t, 21 | o_k_table TYPE REF TO zcl_abak_k_table. 22 | 23 | TRY. 24 | CALL TRANSFORMATION zabak_format_json 25 | SOURCE XML i_data 26 | RESULT constants = t_xml_k. 27 | 28 | CREATE OBJECT o_k_table. 29 | o_k_table->add_xml_k_t( t_xml_k ). 30 | rt_k = o_k_table->get_k_t( ). 31 | 32 | CATCH cx_st_error INTO o_exp. 33 | RAISE EXCEPTION TYPE zcx_abak 34 | EXPORTING 35 | previous = o_exp. 36 | ENDTRY. 37 | 38 | ENDMETHOD. 39 | 40 | 41 | METHOD ZIF_ABAK_FORMAT~GET_TYPE. 42 | r_format_type = zif_abak_consts=>format_type-json. 43 | ENDMETHOD. 44 | ENDCLASS. 45 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_json.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_format_json, 11 | t_k TYPE zabak_k_t. 12 | 13 | METHODS: setup RAISING zcx_abak. 14 | METHODS: get_inline_value FOR TESTING RAISING zcx_abak. 15 | METHODS: get_value FOR TESTING RAISING zcx_abak. 16 | METHODS: get_range_line FOR TESTING RAISING zcx_abak. 17 | METHODS: get_type FOR TESTING RAISING zcx_abak. 18 | ENDCLASS. "lcl_Unittest 19 | 20 | 21 | CLASS lcl_unittest IMPLEMENTATION. 22 | 23 | METHOD setup. 24 | CREATE OBJECT f_cut. 25 | ENDMETHOD. 26 | 27 | METHOD get_inline_value. 28 | FIELD-SYMBOLS: LIKE LINE OF t_k, 29 | LIKE LINE OF -t_kv. 30 | 31 | t_k = f_cut->zif_abak_format~convert( i_data = `{ "abak": {"k": [{ "scope": "a", "fieldname": "bukrs", "value": "4321" }]}}` ). 32 | 33 | READ TABLE t_k ASSIGNING INDEX 1. "#EC CI_SUBRC 34 | READ TABLE -t_kv ASSIGNING INDEX 1. "#EC CI_SUBRC 35 | 36 | cl_abap_unit_assert=>assert_equals( exp = '4321' 37 | act = -low ). 38 | 39 | ENDMETHOD. 40 | 41 | METHOD get_value. 42 | 43 | FIELD-SYMBOLS: LIKE LINE OF t_k, 44 | LIKE LINE OF -t_kv. 45 | 46 | t_k = f_cut->zif_abak_format~convert( i_data = `{ "abak": {"k": [{ "scope": "a", "fieldname": "bukrs", "v": [{"low": "1234"}] }]}}` ). 47 | 48 | READ TABLE t_k ASSIGNING INDEX 1. "#EC CI_SUBRC 49 | READ TABLE -t_kv ASSIGNING INDEX 1. "#EC CI_SUBRC 50 | 51 | cl_abap_unit_assert=>assert_equals( exp = '1234' 52 | act = -low ). 53 | 54 | ENDMETHOD. 55 | 56 | METHOD get_range_line. 57 | 58 | FIELD-SYMBOLS: LIKE LINE OF t_k, 59 | LIKE LINE OF -t_kv. 60 | 61 | t_k = f_cut->zif_abak_format~convert( i_data = `{ "abak": {"k": [{ "scope": "a", "fieldname": "bukrs", "v": [{"sign": "I", "option": "BT", "low": "1234", "high": "9999"}] }]}}` ). 62 | 63 | READ TABLE t_k ASSIGNING INDEX 1. "#EC CI_SUBRC 64 | READ TABLE -t_kv ASSIGNING INDEX 1. "#EC CI_SUBRC 65 | 66 | cl_abap_unit_assert=>assert_equals( exp = '1234' 67 | act = -low ). 68 | cl_abap_unit_assert=>assert_equals( exp = '9999' 69 | act = -high ). 70 | cl_abap_unit_assert=>assert_equals( exp = 'I' 71 | act = -sign ). 72 | cl_abap_unit_assert=>assert_equals( exp = 'BT' 73 | act = -option ). 74 | 75 | ENDMETHOD. 76 | 77 | METHOD get_type. 78 | cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>format_type-json 79 | act = f_cut->zif_abak_format~get_type( ) ). 80 | ENDMETHOD. 81 | 82 | ENDCLASS. "lcl_Unittest 83 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_json.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_FORMAT_JSON 7 | E 8 | abaK Format JSON 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_xml.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_FORMAT_XML definition 2 | public 3 | final 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces ZIF_ABAK_FORMAT . 9 | protected section. 10 | private section. 11 | ENDCLASS. 12 | 13 | 14 | 15 | CLASS ZCL_ABAK_FORMAT_XML IMPLEMENTATION. 16 | 17 | 18 | METHOD zif_abak_format~convert. 19 | DATA: o_exp TYPE REF TO cx_st_error, 20 | t_xml_k TYPE zabak_xml_k_t, 21 | o_k_table TYPE REF TO zcl_abak_k_table. 22 | 23 | TRY. 24 | CALL TRANSFORMATION zabak_format_xml 25 | SOURCE XML i_data 26 | RESULT constants = t_xml_k. 27 | 28 | CREATE OBJECT o_k_table. 29 | o_k_table->add_xml_k_t( t_xml_k ). 30 | rt_k = o_k_table->get_k_t( ). 31 | 32 | CATCH cx_st_error INTO o_exp. 33 | RAISE EXCEPTION TYPE zcx_abak 34 | EXPORTING 35 | previous = o_exp. 36 | ENDTRY. 37 | 38 | ENDMETHOD. 39 | 40 | 41 | METHOD ZIF_ABAK_FORMAT~GET_TYPE. 42 | r_format_type = zif_abak_consts=>format_type-xml. 43 | ENDMETHOD. 44 | ENDCLASS. 45 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_xml.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_format_xml, 11 | t_k TYPE zabak_k_t. 12 | 13 | METHODS: setup RAISING zcx_abak. 14 | METHODS: get_inline_value FOR TESTING RAISING zcx_abak. 15 | METHODS: get_value FOR TESTING RAISING zcx_abak. 16 | METHODS: get_range_line FOR TESTING RAISING zcx_abak. 17 | METHODS: get_type FOR TESTING RAISING zcx_abak. 18 | ENDCLASS. "lcl_Unittest 19 | 20 | 21 | CLASS lcl_unittest IMPLEMENTATION. 22 | 23 | METHOD setup. 24 | CREATE OBJECT f_cut. 25 | ENDMETHOD. 26 | 27 | METHOD get_inline_value. 28 | 29 | FIELD-SYMBOLS: LIKE LINE OF t_k, 30 | LIKE LINE OF -t_kv. 31 | 32 | t_k = f_cut->zif_abak_format~convert( i_data = || ). 33 | 34 | READ TABLE t_k ASSIGNING INDEX 1. "#EC CI_SUBRC 35 | READ TABLE -t_kv ASSIGNING INDEX 1. "#EC CI_SUBRC 36 | 37 | cl_abap_unit_assert=>assert_equals( exp = '4321' 38 | act = -low ). 39 | 40 | ENDMETHOD. 41 | 42 | METHOD get_value. 43 | 44 | FIELD-SYMBOLS: LIKE LINE OF t_k, 45 | LIKE LINE OF -t_kv. 46 | 47 | t_k = f_cut->zif_abak_format~convert( i_data = || ). 48 | 49 | READ TABLE t_k ASSIGNING INDEX 1. "#EC CI_SUBRC 50 | READ TABLE -t_kv ASSIGNING INDEX 1. "#EC CI_SUBRC 51 | 52 | cl_abap_unit_assert=>assert_equals( exp = '1234' 53 | act = -low ). 54 | 55 | ENDMETHOD. 56 | 57 | METHOD get_range_line. 58 | 59 | FIELD-SYMBOLS: LIKE LINE OF t_k, 60 | LIKE LINE OF -t_kv. 61 | 62 | t_k = f_cut->zif_abak_format~convert( i_data = || ). 63 | 64 | READ TABLE t_k ASSIGNING INDEX 1. "#EC CI_SUBRC 65 | READ TABLE -t_kv ASSIGNING INDEX 1. "#EC CI_SUBRC 66 | 67 | cl_abap_unit_assert=>assert_equals( exp = '1234' 68 | act = -low ). 69 | cl_abap_unit_assert=>assert_equals( exp = '9999' 70 | act = -high ). 71 | cl_abap_unit_assert=>assert_equals( exp = 'I' 72 | act = -sign ). 73 | cl_abap_unit_assert=>assert_equals( exp = 'BT' 74 | act = -option ). 75 | ENDMETHOD. 76 | 77 | METHOD get_type. 78 | cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>format_type-xml 79 | act = f_cut->zif_abak_format~get_type( ) ). 80 | ENDMETHOD. 81 | 82 | ENDCLASS. "lcl_Unittest 83 | -------------------------------------------------------------------------------- /src/formats/zcl_abak_format_xml.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_FORMAT_XML 7 | E 8 | abaK Format XML 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | abaK Generic constants tool 7 | X 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/sources/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | abaK Sources 7 | X 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/sources/zabak_sources_api.pinf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | ZABAK_SOURCES_API 8 | abaK Sources API 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_database.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_source_database. 11 | 12 | METHODS: check_table_invalid FOR TESTING. 13 | METHODS: get_type FOR TESTING RAISING zcx_abak. 14 | ENDCLASS. "lcl_Unittest 15 | 16 | 17 | CLASS lcl_unittest IMPLEMENTATION. 18 | 19 | METHOD check_table_invalid. 20 | TRY. 21 | CREATE OBJECT f_cut 22 | EXPORTING 23 | i_tablename = 'INVALID'. 24 | 25 | cl_abap_unit_assert=>fail( msg = 'Table is invalid so exception should have happened' ). 26 | 27 | CATCH zcx_abak. 28 | RETURN. 29 | ENDTRY. 30 | ENDMETHOD. 31 | 32 | METHOD get_type. 33 | CREATE OBJECT f_cut 34 | EXPORTING 35 | i_tablename = 'ZABAK_DEFAULT'. 36 | 37 | cl_abap_unit_assert=>assert_equals( 38 | exp = zif_abak_consts=>source_type-database 39 | act = f_cut->zif_abak_source~get_type( ) ). 40 | ENDMETHOD. 41 | 42 | ENDCLASS. "lcl_Unittest 43 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_database.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_DATABASE 7 | E 8 | abaK Content database 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_SOURCE_DATABASE 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | ZCL_ABAK_SOURCE_DATABASE 25 | G_TABLENAME 26 | E 27 | Table Name 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_factory.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO ZCL_ABAK_SOURCE_FACTORY, 11 | o_content TYPE REF TO zif_abak_source. 12 | 13 | METHODS: setup. 14 | METHODS: check_class 15 | IMPORTING 16 | i_classname TYPE string. 17 | METHODS: inline FOR TESTING RAISING zcx_abak. 18 | METHODS: database FOR TESTING RAISING zcx_abak. 19 | METHODS: file FOR TESTING RAISING zcx_abak. 20 | METHODS: rfc FOR TESTING RAISING zcx_abak. 21 | METHODS: standard_text FOR TESTING RAISING zcx_abak. 22 | METHODS: url FOR TESTING RAISING zcx_abak. 23 | METHODS: invalid FOR TESTING. 24 | ENDCLASS. "lcl_Unittest 25 | 26 | 27 | CLASS lcl_unittest IMPLEMENTATION. 28 | 29 | METHOD setup. 30 | CREATE OBJECT f_cut. 31 | ENDMETHOD. 32 | 33 | METHOD check_class. 34 | cl_abap_unit_assert=>assert_equals( exp = i_classname 35 | act = cl_abap_objectdescr=>describe_by_object_ref( o_content )->get_relative_name( ) ). 36 | endmethod. 37 | 38 | method inline. 39 | o_content = f_cut->get_instance( i_source_type = zif_abak_consts=>source_type-inline 40 | i_content = 'dummy' ). 41 | check_class( 'ZCL_ABAK_SOURCE_INLINE' ). 42 | ENDMETHOD. 43 | 44 | METHOD database. 45 | o_content = f_cut->get_instance( i_source_type = zif_abak_consts=>source_type-database 46 | i_content = 'ZABAK_DEFAULT' ). 47 | check_class( 'ZCL_ABAK_SOURCE_DATABASE' ). 48 | ENDMETHOD. 49 | 50 | METHOD file. 51 | o_content = f_cut->get_instance( i_source_type = zif_abak_consts=>source_type-file 52 | i_content = 'dummy' ). 53 | check_class( 'ZCL_ABAK_SOURCE_FILE' ). 54 | ENDMETHOD. 55 | 56 | METHOD rfc. 57 | o_content = f_cut->get_instance( i_source_type = zif_abak_consts=>source_type-rfc 58 | i_content = 'RFCDEST=dummy ID=dummy' ). 59 | check_class( 'ZCL_ABAK_SOURCE_RFC' ). 60 | ENDMETHOD. 61 | 62 | METHOD standard_text. 63 | o_content = f_cut->get_instance( i_source_type = zif_abak_consts=>source_type-standard_text 64 | i_content = 'NAME=dummy' ). 65 | 66 | check_class( 'ZCL_ABAK_SOURCE_SO10' ). 67 | ENDMETHOD. 68 | 69 | METHOD url. 70 | o_content = f_cut->get_instance( i_source_type = zif_abak_consts=>source_type-url 71 | i_content = 'http://abapinho.com/dummy.txt' ). 72 | check_class( 'ZCL_ABAK_SOURCE_URL' ). 73 | ENDMETHOD. 74 | 75 | METHOD invalid. 76 | TRY. 77 | o_content = f_cut->get_instance( i_source_type = 'INVALID' 78 | i_content = 'dummy' ). 79 | 80 | cl_abap_unit_assert=>fail( msg = 'Invalid content type' ). 81 | 82 | CATCH zcx_abak. 83 | RETURN. 84 | ENDTRY. 85 | ENDMETHOD. 86 | 87 | ENDCLASS. 88 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_factory.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_FACTORY 7 | E 8 | abaK Location Factory 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_file.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_SOURCE_FILE definition 2 | public 3 | inheriting from zcl_abak_source 4 | final 5 | create public . 6 | 7 | public section. 8 | 9 | methods CONSTRUCTOR 10 | importing 11 | !I_FILEPATH type STRING 12 | raising 13 | ZCX_ABAK . 14 | 15 | methods zif_abak_source~GET_TYPE 16 | redefinition . 17 | protected section. 18 | 19 | methods LOAD 20 | redefinition . 21 | private section. 22 | 23 | data G_FILEPATH type STRING . 24 | ENDCLASS. 25 | 26 | 27 | 28 | CLASS ZCL_ABAK_SOURCE_FILE IMPLEMENTATION. 29 | 30 | 31 | METHOD constructor. 32 | 33 | super->constructor( ). 34 | 35 | g_filepath = i_filepath. 36 | 37 | ENDMETHOD. 38 | 39 | 40 | METHOD load. 41 | DATA: o_exp TYPE REF TO cx_root. 42 | 43 | TRY. 44 | LOG-POINT ID zabak SUBKEY 'content_file.load' FIELDS g_filepath. 45 | 46 | OPEN DATASET g_filepath FOR INPUT IN TEXT MODE ENCODING DEFAULT. 47 | IF sy-subrc <> 0. 48 | RAISE EXCEPTION TYPE zcx_abak_source_file 49 | EXPORTING 50 | textid = zcx_abak_source_file=>error_opening_file 51 | filepath = g_filepath. 52 | ENDIF. 53 | 54 | READ DATASET g_filepath INTO r_content. 55 | 56 | CLOSE DATASET g_filepath. 57 | 58 | CATCH cx_sy_file_open 59 | cx_sy_codepage_converter_init 60 | cx_sy_conversion_codepage 61 | cx_sy_file_authority 62 | cx_sy_pipes_not_supported 63 | cx_sy_too_many_files INTO o_exp. 64 | RAISE EXCEPTION TYPE zcx_abak 65 | EXPORTING 66 | previous = o_exp. 67 | ENDTRY. 68 | ENDMETHOD. 69 | 70 | 71 | METHOD zif_abak_source~get_type. 72 | r_type = zif_abak_consts=>source_type-file. 73 | ENDMETHOD. 74 | ENDCLASS. 75 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_file.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO ZCL_ABAK_SOURCE_FILE. 11 | 12 | methods: get_type for testing raising zcx_abak. 13 | 14 | ENDCLASS. "lcl_Unittest 15 | 16 | 17 | CLASS lcl_unittest IMPLEMENTATION. 18 | 19 | METHOD get_type. 20 | CREATE OBJECT f_cut 21 | EXPORTING 22 | i_filepath = '/tmp/some_constants.txt'. 23 | 24 | cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>source_type-file 25 | act = f_cut->zif_abak_source~get_type( ) ). 26 | ENDMETHOD. 27 | 28 | ENDCLASS. 29 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_file.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_FILE 7 | E 8 | abaK Content from URL 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_SOURCE_FILE 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_inline.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abak_source_inline DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_abak_source 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | METHODS constructor 10 | IMPORTING 11 | !i_content TYPE string 12 | RAISING 13 | zcx_abak . 14 | 15 | METHODS zif_abak_source~get_type 16 | REDEFINITION . 17 | PROTECTED SECTION. 18 | 19 | METHODS load 20 | REDEFINITION . 21 | PRIVATE SECTION. 22 | 23 | DATA g_content TYPE string . 24 | ENDCLASS. 25 | 26 | 27 | 28 | CLASS ZCL_ABAK_SOURCE_INLINE IMPLEMENTATION. 29 | 30 | 31 | METHOD constructor. 32 | 33 | super->constructor( ). 34 | 35 | g_content = i_content. 36 | 37 | ENDMETHOD. 38 | 39 | 40 | METHOD load. 41 | 42 | LOG-POINT ID zabak SUBKEY 'content_inline.load' FIELDS g_content. 43 | 44 | r_content = g_content. 45 | 46 | ENDMETHOD. 47 | 48 | 49 | METHOD zif_abak_source~get_type. 50 | r_type = zif_abak_consts=>source_type-inline. 51 | ENDMETHOD. 52 | ENDCLASS. 53 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_inline.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_source_inline. 11 | 12 | METHODS: setup RAISING zcx_abak. 13 | METHODS: read FOR TESTING RAISING zcx_abak. 14 | METHODS: get_type FOR TESTING RAISING zcx_abak. 15 | 16 | ENDCLASS. "lcl_Unittest 17 | 18 | 19 | CLASS lcl_unittest IMPLEMENTATION. 20 | 21 | METHOD setup. 22 | CREATE OBJECT f_cut 23 | EXPORTING 24 | i_content = 'Something'. 25 | ENDMETHOD. 26 | 27 | METHOD read. 28 | cl_abap_unit_assert=>assert_equals( exp = 'Something' 29 | act = f_cut->zif_abak_source~get( ) ). 30 | ENDMETHOD. 31 | 32 | METHOD get_type. 33 | cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>source_type-inline 34 | act = f_cut->zif_abak_source~get_type( ) ). 35 | ENDMETHOD. 36 | 37 | ENDCLASS. 38 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_inline.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_INLINE 7 | E 8 | abaK Content inline 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_SOURCE_INLINE 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_mime.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abak_source_mime DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_abak_source 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | METHODS constructor 10 | IMPORTING 11 | !i_url TYPE string 12 | RAISING 13 | zcx_abak . 14 | 15 | METHODS zif_abak_source~get_type 16 | REDEFINITION . 17 | PROTECTED SECTION. 18 | 19 | METHODS load 20 | REDEFINITION . 21 | PRIVATE SECTION. 22 | 23 | DATA g_url TYPE string . 24 | ENDCLASS. 25 | 26 | 27 | 28 | CLASS ZCL_ABAK_SOURCE_MIME IMPLEMENTATION. 29 | 30 | 31 | METHOD constructor. 32 | 33 | super->constructor( ). 34 | 35 | g_url = i_url. 36 | 37 | ENDMETHOD. 38 | 39 | 40 | METHOD load. 41 | DATA: 42 | o_mime_repository TYPE REF TO if_mr_api, 43 | xcontent TYPE xstring. 44 | 45 | LOG-POINT ID zabak SUBKEY 'content_mime.load' FIELDS g_url. 46 | 47 | o_mime_repository = cl_mime_repository_api=>get_api( ). 48 | 49 | o_mime_repository->get( 50 | EXPORTING 51 | i_url = g_url 52 | IMPORTING 53 | e_content = xcontent 54 | EXCEPTIONS 55 | parameter_missing = 1 56 | error_occured = 2 57 | not_found = 3 58 | permission_failure = 4 59 | OTHERS = 5 ). 60 | IF sy-subrc <> 0. 61 | RAISE EXCEPTION TYPE zcx_abak 62 | EXPORTING 63 | previous_from_syst = abap_true. 64 | ENDIF. 65 | 66 | r_content = cl_bcs_convert=>xstring_to_string( iv_xstr = xcontent 67 | iv_cp = '4210' ). " TODO fixed UTF-8 for PCL Printers 68 | 69 | ENDMETHOD. 70 | 71 | 72 | METHOD zif_abak_source~get_type. 73 | r_type = zif_abak_consts=>source_type-mime. 74 | ENDMETHOD. 75 | ENDCLASS. 76 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_mime.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | **"* use this source file for your ABAP unit test classes 2 | *CLASS lcl_unittest DEFINITION FOR TESTING 3 | * INHERITING FROM zcl_abak_unit_tests 4 | * DURATION SHORT 5 | * RISK LEVEL HARMLESS 6 | * FINAL. 7 | * 8 | * PRIVATE SECTION. 9 | * 10 | * DATA: 11 | * f_cut TYPE REF TO zcl_abak_source_inline. 12 | * 13 | * METHODS: setup RAISING zcx_abak. 14 | * METHODS: read FOR TESTING RAISING zcx_abak. 15 | * methods: get_type for testing raising zcx_abak. 16 | * 17 | *ENDCLASS. "lcl_Unittest 18 | * 19 | * 20 | *CLASS lcl_unittest IMPLEMENTATION. 21 | * 22 | * METHOD setup. 23 | * CREATE OBJECT f_cut 24 | * EXPORTING 25 | * i_content = 'Something'. 26 | * ENDMETHOD. 27 | * 28 | * METHOD read. 29 | * cl_abap_unit_assert=>assert_equals( exp = 'Something' 30 | * act = f_cut->zif_abak_source~get( ) ). 31 | * ENDMETHOD. 32 | * 33 | * METHOD get_type. 34 | * cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>source_type-inline 35 | * act = f_cut->zif_abak_source~get_type( ) ). 36 | * ENDMETHOD. 37 | * 38 | *ENDCLASS. 39 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_mime.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_MIME 7 | E 8 | abaK Content inline 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_SOURCE_MIME 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_rfc.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ABAK_SOURCE_RFC definition 2 | public 3 | inheriting from zcl_abak_source 4 | final 5 | create public . 6 | 7 | public section. 8 | interface ZIF_ABAK_CONSTS load . 9 | 10 | methods CONSTRUCTOR 11 | importing 12 | !I_ID type ZABAK_ID 13 | !I_RFCDEST type RFCDEST 14 | raising 15 | ZCX_ABAK . 16 | 17 | methods ZIF_ABAK_SOURCE~GET_TYPE 18 | redefinition . 19 | protected section. 20 | 21 | methods LOAD 22 | redefinition . 23 | PRIVATE SECTION. 24 | 25 | DATA g_id TYPE zabak_id . 26 | DATA g_rfcdest TYPE rfcdest . 27 | ENDCLASS. 28 | 29 | 30 | 31 | CLASS ZCL_ABAK_SOURCE_RFC IMPLEMENTATION. 32 | 33 | 34 | METHOD constructor. 35 | 36 | IF i_id IS INITIAL. 37 | RAISE EXCEPTION TYPE zcx_abak 38 | EXPORTING 39 | textid = zcx_abak=>invalid_parameters. 40 | ENDIF. 41 | 42 | super->constructor( ). 43 | 44 | g_id = i_id. 45 | g_rfcdest = i_rfcdest. 46 | 47 | ENDMETHOD. 48 | 49 | 50 | METHOD load. 51 | 52 | CALL FUNCTION 'Z_ABAK_ZABAK_RFC_GET' 53 | DESTINATION g_rfcdest 54 | EXPORTING 55 | i_id = g_id 56 | IMPORTING 57 | e_serialized_data = r_content 58 | EXCEPTIONS 59 | error = 1 60 | OTHERS = 2. 61 | IF sy-subrc <> 0. 62 | RAISE EXCEPTION TYPE zcx_abak. " TODO 63 | ENDIF. 64 | 65 | 66 | ENDMETHOD. 67 | 68 | 69 | METHOD zif_abak_source~get_type. 70 | r_type = zif_abak_consts=>source_type-rfc. 71 | ENDMETHOD. 72 | ENDCLASS. 73 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_rfc.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | DATA: 9 | f_cut TYPE REF TO zcl_abak_source_rfc. 10 | 11 | METHODS: empty_id FOR TESTING. 12 | ENDCLASS. "lcl_Unittest 13 | 14 | 15 | CLASS lcl_unittest IMPLEMENTATION. 16 | 17 | METHOD empty_id. 18 | TRY. 19 | CREATE OBJECT f_cut 20 | EXPORTING 21 | i_id = space 22 | i_rfcdest = space. 23 | 24 | cl_abap_unit_assert=>fail( msg = 'Empty ID should have raised exception' ). 25 | 26 | CATCH zcx_abak. 27 | RETURN. 28 | ENDTRY. 29 | ENDMETHOD. 30 | 31 | ENDCLASS. "lcl_Unittest 32 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_rfc.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_RFC 7 | E 8 | abaK Content RFC 9 | 1 10 | X 11 | X 12 | X 13 | K 14 | X 15 | 16 | 17 | 18 | ZCL_ABAK_SOURCE_RFC 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | ZCL_ABAK_SOURCE_RFC 25 | G_ID 26 | E 27 | abaK ID 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_so10.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_abak_source_so10 DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_abak_source 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | METHODS constructor 10 | IMPORTING 11 | !i_name TYPE tdobname 12 | !i_id TYPE tdid 13 | !i_spras TYPE spras 14 | RAISING 15 | zcx_abak . 16 | 17 | METHODS zif_abak_source~get_type 18 | REDEFINITION . 19 | PROTECTED SECTION. 20 | 21 | METHODS load 22 | REDEFINITION . 23 | PRIVATE SECTION. 24 | 25 | DATA g_name TYPE tdobname . 26 | DATA g_id TYPE tdid . 27 | DATA g_spras TYPE spras . 28 | ENDCLASS. 29 | 30 | 31 | 32 | CLASS ZCL_ABAK_SOURCE_SO10 IMPLEMENTATION. 33 | 34 | 35 | METHOD constructor. 36 | 37 | IF i_name IS INITIAL OR i_id IS INITIAL OR i_spras IS INITIAL. 38 | RAISE EXCEPTION TYPE zcx_abak 39 | EXPORTING 40 | textid = zcx_abak=>invalid_parameters. 41 | ENDIF. 42 | 43 | super->constructor( ). 44 | 45 | g_name = i_name. 46 | g_id = i_id. 47 | g_spras = i_spras. 48 | 49 | ENDMETHOD. 50 | 51 | 52 | METHOD load. 53 | 54 | DATA: t_line TYPE STANDARD TABLE OF tline. 55 | 56 | FIELD-SYMBOLS: LIKE LINE OF t_line. 57 | 58 | LOG-POINT ID zabak SUBKEY 'content_so10.load' FIELDS g_id g_spras g_name. 59 | 60 | CALL FUNCTION 'READ_TEXT' 61 | EXPORTING 62 | id = g_id 63 | language = g_spras 64 | name = g_name 65 | object = 'TEXT' 66 | TABLES 67 | lines = t_line 68 | EXCEPTIONS 69 | id = 1 70 | language = 2 71 | name = 3 72 | not_found = 4 73 | object = 5 74 | reference_check = 6 75 | wrong_access_to_archive = 7 76 | OTHERS = 8. 77 | IF sy-subrc <> 0. 78 | RAISE EXCEPTION TYPE zcx_abak 79 | EXPORTING 80 | previous_from_syst = abap_true. 81 | ENDIF. 82 | 83 | LOOP AT t_line ASSIGNING . 84 | IF sy-tabix = 1. 85 | r_content = . 86 | ELSE. 87 | r_content = |{ r_content }\n{ -tdline }|. 88 | ENDIF. 89 | ENDLOOP. 90 | 91 | SHIFT r_content LEFT DELETING LEADING space. 92 | 93 | ENDMETHOD. 94 | 95 | 96 | METHOD zif_abak_source~get_type. 97 | r_type = zif_abak_consts=>source_type-standard_text. 98 | ENDMETHOD. 99 | ENDCLASS. 100 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_so10.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_SO10 7 | E 8 | abaK Raw text from URL 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_SOURCE_SO10 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_url.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_unittest DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: 10 | f_cut TYPE REF TO zcl_abak_source_url. 11 | 12 | METHODS: invalid_url FOR TESTING. 13 | METHODS: get_type FOR TESTING RAISING zcx_abak. 14 | ENDCLASS. "lcl_Unittest 15 | 16 | 17 | CLASS lcl_unittest IMPLEMENTATION. 18 | 19 | METHOD get_type. 20 | CREATE OBJECT f_cut 21 | EXPORTING 22 | i_url = 'https://somewhere.com/constants.txt'. 23 | cl_abap_unit_assert=>assert_equals( exp = zif_abak_consts=>source_type-url 24 | act = f_cut->zif_abak_source~get_type( ) ). 25 | ENDMETHOD. 26 | 27 | METHOD invalid_url. 28 | TRY. 29 | CREATE OBJECT f_cut 30 | EXPORTING 31 | i_url = 'xxx://somewhere.com/constants.txt'. 32 | cl_abap_unit_assert=>fail( msg = 'Invalid url not detected' ). 33 | CATCH zcx_abak. 34 | RETURN. 35 | ENDTRY. 36 | 37 | TRY. 38 | CREATE OBJECT f_cut 39 | EXPORTING 40 | i_url = 'http://'. 41 | cl_abap_unit_assert=>fail( msg = 'Invalid url not detected' ). 42 | CATCH zcx_abak. 43 | RETURN. 44 | ENDTRY. 45 | 46 | TRY. 47 | CREATE OBJECT f_cut 48 | EXPORTING 49 | i_url = 'http://.com/test.txt'. 50 | cl_abap_unit_assert=>fail( msg = 'Invalid url not detected' ). 51 | CATCH zcx_abak. 52 | RETURN. 53 | ENDTRY. 54 | 55 | TRY. 56 | CREATE OBJECT f_cut 57 | EXPORTING 58 | i_url = 'http://domain.thisistoolong/test.txt'. 59 | cl_abap_unit_assert=>fail( msg = 'Invalid url not detected' ). 60 | CATCH zcx_abak. 61 | RETURN. 62 | ENDTRY. 63 | 64 | TRY. 65 | CREATE OBJECT f_cut 66 | EXPORTING 67 | i_url = 'http://domain.com/folder\file.txt'. 68 | cl_abap_unit_assert=>fail( msg = 'Invalid url not detected' ). 69 | CATCH zcx_abak. 70 | RETURN. 71 | ENDTRY. 72 | 73 | ENDMETHOD. 74 | 75 | ENDCLASS. 76 | -------------------------------------------------------------------------------- /src/sources/zcl_abak_source_url.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_SOURCE_URL 7 | E 8 | abaK Content from URL 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCL_ABAK_SOURCE_URL 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/sources/zcx_abak_source_database.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ABAK_SOURCE_DATABASE definition 2 | public 3 | inheriting from ZCX_ABAK 4 | final 5 | create public . 6 | 7 | public section. 8 | 9 | constants: 10 | begin of INVALID_TABLE_FORMAT, 11 | msgid type symsgid value 'ZABAK', 12 | msgno type symsgno value '007', 13 | attr1 type scx_attrname value 'TABLENAME', 14 | attr2 type scx_attrname value '', 15 | attr3 type scx_attrname value '', 16 | attr4 type scx_attrname value '', 17 | end of INVALID_TABLE_FORMAT . 18 | data TABLENAME type TABNAME . 19 | 20 | methods CONSTRUCTOR 21 | importing 22 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 23 | !PREVIOUS like PREVIOUS optional 24 | !PREVIOUS_FROM_SYST type FLAG optional 25 | !TABLENAME type TABNAME optional . 26 | protected section. 27 | private section. 28 | ENDCLASS. 29 | 30 | 31 | 32 | CLASS ZCX_ABAK_SOURCE_DATABASE IMPLEMENTATION. 33 | 34 | 35 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 36 | CALL METHOD SUPER->CONSTRUCTOR 37 | EXPORTING 38 | PREVIOUS = PREVIOUS 39 | PREVIOUS_FROM_SYST = PREVIOUS_FROM_SYST 40 | . 41 | me->TABLENAME = TABLENAME . 42 | clear me->textid. 43 | if textid is initial. 44 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 45 | else. 46 | IF_T100_MESSAGE~T100KEY = TEXTID. 47 | endif. 48 | endmethod. 49 | ENDCLASS. 50 | -------------------------------------------------------------------------------- /src/sources/zcx_abak_source_database.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_SOURCE_DATABASE 7 | E 8 | abaK Source database exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | ZCX_ABAK_SOURCE_DATABASE 18 | CONSTRUCTOR 19 | E 20 | CONSTRUCTOR 21 | 22 | 23 | ZCX_ABAK_SOURCE_DATABASE 24 | TABLENAME 25 | E 26 | Table Name 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/sources/zcx_abak_source_file.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ABAK_SOURCE_FILE definition 2 | public 3 | inheriting from ZCX_ABAK 4 | create public . 5 | 6 | public section. 7 | 8 | constants: 9 | begin of ERROR_OPENING_FILE, 10 | msgid type symsgid value 'ZABAK', 11 | msgno type symsgno value '001', 12 | attr1 type scx_attrname value 'FILEPATH', 13 | attr2 type scx_attrname value '', 14 | attr3 type scx_attrname value '', 15 | attr4 type scx_attrname value '', 16 | end of ERROR_OPENING_FILE . 17 | data FILEPATH type STRING . 18 | 19 | methods CONSTRUCTOR 20 | importing 21 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 22 | !PREVIOUS like PREVIOUS optional 23 | !PREVIOUS_FROM_SYST type FLAG optional 24 | !FILEPATH type STRING optional . 25 | protected section. 26 | private section. 27 | ENDCLASS. 28 | 29 | 30 | 31 | CLASS ZCX_ABAK_SOURCE_FILE IMPLEMENTATION. 32 | 33 | 34 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 35 | CALL METHOD SUPER->CONSTRUCTOR 36 | EXPORTING 37 | PREVIOUS = PREVIOUS 38 | PREVIOUS_FROM_SYST = PREVIOUS_FROM_SYST 39 | . 40 | me->FILEPATH = FILEPATH . 41 | clear me->textid. 42 | if textid is initial. 43 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 44 | else. 45 | IF_T100_MESSAGE~T100KEY = TEXTID. 46 | endif. 47 | endmethod. 48 | ENDCLASS. 49 | -------------------------------------------------------------------------------- /src/sources/zcx_abak_source_file.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_SOURCE_FILE 7 | E 8 | abaK Source file exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | K 15 | 16 | 17 | 18 | ZCX_ABAK_SOURCE_FILE 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/sources/zcx_abak_source_url.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ABAK_SOURCE_URL definition 2 | public 3 | inheriting from ZCX_ABAK 4 | create public . 5 | 6 | public section. 7 | 8 | constants: 9 | begin of HTTP_ERROR, 10 | msgid type symsgid value 'ZABAK', 11 | msgno type symsgno value '010', 12 | attr1 type scx_attrname value 'CODE', 13 | attr2 type scx_attrname value 'REASON', 14 | attr3 type scx_attrname value 'URL', 15 | attr4 type scx_attrname value '', 16 | end of HTTP_ERROR . 17 | data CODE type I . 18 | data REASON type STRING . 19 | data URL type STRING . 20 | 21 | methods CONSTRUCTOR 22 | importing 23 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 24 | !PREVIOUS like PREVIOUS optional 25 | !PREVIOUS_FROM_SYST type FLAG optional 26 | !CODE type I optional 27 | !REASON type STRING optional 28 | !URL type STRING optional . 29 | protected section. 30 | private section. 31 | ENDCLASS. 32 | 33 | 34 | 35 | CLASS ZCX_ABAK_SOURCE_URL IMPLEMENTATION. 36 | 37 | 38 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 39 | CALL METHOD SUPER->CONSTRUCTOR 40 | EXPORTING 41 | PREVIOUS = PREVIOUS 42 | PREVIOUS_FROM_SYST = PREVIOUS_FROM_SYST 43 | . 44 | me->CODE = CODE . 45 | me->REASON = REASON . 46 | me->URL = URL . 47 | clear me->textid. 48 | if textid is initial. 49 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 50 | else. 51 | IF_T100_MESSAGE~T100KEY = TEXTID. 52 | endif. 53 | endmethod. 54 | ENDCLASS. 55 | -------------------------------------------------------------------------------- /src/sources/zcx_abak_source_url.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ABAK_SOURCE_URL 7 | E 8 | abaK Source file exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | K 15 | 16 | 17 | 18 | ZCX_ABAK_SOURCE_URL 19 | CONSTRUCTOR 20 | E 21 | CONSTRUCTOR 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/utils/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | abaK Utils 7 | X 8 | 9 | 10 | 11 | ZABAK_CORE_API 12 | NONE 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/utils/zabak_demo.prog.abap: -------------------------------------------------------------------------------- 1 | REPORT zabak_demo. 2 | 3 | * See https://github.com/abapinho/abaK 4 | 5 | ******************************************************************************** 6 | * MIT License 7 | * 8 | * Copyright (c) 2018 Nuno Godinho 9 | * 10 | * Permission is hereby granted, free of charge, to any person obtaining a copy 11 | * of this software and associated documentation files (the "Software"), to deal 12 | * in the Software without restriction, including without limitation the rights 13 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | * copies of the Software, and to permit persons to whom the Software is 15 | * furnished to do so, subject to the following conditions: 16 | * 17 | * The above copyright notice and this permission notice shall be included in all 18 | * copies or substantial portions of the Software. 19 | * 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | * SOFTWARE. 27 | ******************************************************************************** 28 | 29 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-sou. 30 | PARAMETERS p_db RADIOBUTTON GROUP g. 31 | PARAMETERS p_zabak RADIOBUTTON GROUP g. 32 | PARAMETERS p_xml RADIOBUTTON GROUP g. 33 | SELECTION-SCREEN END OF BLOCK b1. 34 | 35 | DATA: go_exp TYPE REF TO zcx_abak, 36 | go_demo TYPE REF TO zcl_abak_demo, 37 | which_demo TYPE string, 38 | txt TYPE string. 39 | 40 | INITIALIZATION. 41 | sy-title = |{ sy-title } (v{ zif_abak_consts=>version })|. 42 | 43 | START-OF-SELECTION. 44 | 45 | CASE abap_true. 46 | WHEN p_db. 47 | which_demo = 'DB'. 48 | WHEN p_zabak. 49 | which_demo = 'ZABAK'. 50 | WHEN p_xml. 51 | which_demo = 'XML'. 52 | ENDCASE. 53 | 54 | TRY. 55 | CREATE OBJECT go_demo 56 | EXPORTING 57 | i_which_demo = which_demo. 58 | 59 | go_demo->get_our_company( ). 60 | SKIP. 61 | go_demo->is_account_type_valid( ). 62 | SKIP. 63 | go_demo->get_customer_for_context( ). 64 | SKIP. 65 | go_demo->is_currency_valid( ). 66 | SKIP. 67 | go_demo->validate_amount( ). 68 | 69 | CATCH zcx_abak INTO go_exp. 70 | txt = go_exp->get_text( ). 71 | WRITE: / 'Error:', txt. 72 | ENDTRY. 73 | -------------------------------------------------------------------------------- /src/utils/zabak_demo.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DEMO 7 | 1 8 | * 9 | K 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | SOU 18 | Select source 19 | 13 20 | 21 | 22 | R 23 | abaK demo 24 | 9 25 | 26 | 27 | S 28 | P_DB 29 | Database 30 | 16 31 | 32 | 33 | S 34 | P_SET 35 | Set (GS03) 36 | 18 37 | 38 | 39 | S 40 | P_XML 41 | XML 42 | 11 43 | 44 | 45 | S 46 | P_ZABAK 47 | ZABAK (ID=DEMO: Database) 48 | 33 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/utils/zabak_demo.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DEMO 7 | E 8 | TRANSP 9 | X 10 | X 11 | abaK Demo constants table 12 | X 13 | A 14 | 1 15 | 16 | 17 | ZABAK_DEMO 18 | A 19 | 0 20 | APPL0 21 | N 22 | 23 | 24 | 25 | ZABAK_DEMO 26 | .INCLUDE 27 | E 28 | 0001 29 | X 30 | 0 31 | ZABAK_DB_KEY 32 | X 33 | S 34 | abaK Database key 35 | S 36 | 37 | 38 | ZABAK_DEMO 39 | .INCLUDE 40 | E 41 | 0007 42 | 0 43 | ZABAK_DB_FIELDS 44 | S 45 | abaK Database fields 46 | S 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/utils/zabak_usage.prog.abap: -------------------------------------------------------------------------------- 1 | REPORT zabak_usage. 2 | 3 | * See https://github.com/abapinho/abaK 4 | 5 | ******************************************************************************** 6 | * MIT License 7 | * 8 | * Copyright (c) 2018 Nuno Godinho 9 | * 10 | * Permission is hereby granted, free of charge, to any person obtaining a copy 11 | * of this software and associated documentation files (the "Software"), to deal 12 | * in the Software without restriction, including without limitation the rights 13 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | * copies of the Software, and to permit persons to whom the Software is 15 | * furnished to do so, subject to the following conditions: 16 | * 17 | * The above copyright notice and this permission notice shall be included in all 18 | * copies or substantial portions of the Software. 19 | * 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | * SOFTWARE. 27 | ******************************************************************************** 28 | 29 | DATA: go_usage TYPE REF TO zcl_abak_usage. 30 | 31 | INITIALIZATION. 32 | PERFORM append_version_to_title. 33 | 34 | START-OF-SELECTION. 35 | CREATE OBJECT go_usage. 36 | 37 | PERFORM list_subclasses. 38 | SKIP. 39 | PERFORM list_zabak. 40 | SKIP. 41 | PERFORM list_where_used. 42 | 43 | FORM append_version_to_title. 44 | sy-title = |{ sy-title } (v{ zif_abak_consts=>version })|. 45 | ENDFORM. 46 | 47 | FORM list_subclasses. 48 | DATA: t_class TYPE seo_class_names, 49 | class LIKE LINE OF t_class. 50 | 51 | WRITE / 'Content classes (implementing ZIF_ABAK_SOURCE):'. 52 | t_class = go_usage->get_subclasses( 'ZIF_ABAK_SOURCE' ). 53 | SORT t_class. 54 | LOOP AT t_class INTO class. 55 | WRITE: /4 class INTENSIFIED OFF. 56 | ENDLOOP. 57 | 58 | SKIP. 59 | 60 | WRITE / 'Format classes (implementing ZIF_ABAK_FORMAT):'. 61 | t_class = go_usage->get_subclasses( 'ZIF_ABAK_FORMAT' ). 62 | SORT t_class. 63 | LOOP AT t_class INTO class. 64 | WRITE: /4 class INTENSIFIED OFF. 65 | ENDLOOP. 66 | 67 | ENDFORM. 68 | 69 | FORM list_where_used. 70 | DATA: t_tadir TYPE tt_tadir, 71 | exp_abak TYPE REF TO zcx_abak, 72 | text TYPE string. 73 | 74 | FIELD-SYMBOLS: LIKE LINE OF t_tadir. 75 | 76 | WRITE : / 'abaK usage (objects using class ZCL_ABAK_FACTORY outside the abaK package):'. 77 | FORMAT INTENSIFIED OFF. 78 | TRY. 79 | t_tadir = go_usage->get_where_used( ). 80 | LOOP AT t_tadir ASSIGNING . 81 | WRITE: /4 -object, -obj_name, -devclass. 82 | ENDLOOP. 83 | IF sy-subrc <> 0. 84 | WRITE: /4 'No objects found'. 85 | ENDIF. 86 | CATCH zcx_abak INTO exp_abak. 87 | text = exp_abak->get_text( ). 88 | WRITE text. 89 | ENDTRY. 90 | FORMAT INTENSIFIED ON. 91 | ENDFORM. 92 | 93 | FORM list_zabak. 94 | DATA: t_zabak TYPE zcl_abak_usage=>ty_zabak_t. 95 | FIELD-SYMBOLS: LIKE LINE OF t_zabak. 96 | 97 | WRITE : / 'ZABAK records:'. 98 | FORMAT INTENSIFIED OFF. 99 | t_zabak = go_usage->get_zabak( ). 100 | LOOP AT t_zabak ASSIGNING . 101 | CLEAR -mandt. 102 | WRITE / . 103 | ENDLOOP. 104 | IF sy-subrc <> 0. 105 | WRITE / 'Empty'. 106 | ENDIF. 107 | FORMAT INTENSIFIED ON. 108 | ENDFORM. 109 | -------------------------------------------------------------------------------- /src/utils/zabak_usage.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_USAGE 7 | 1 8 | * 9 | K 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | R 17 | abaK Usage 18 | 10 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/utils/zcl_abak_demo.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_DEMO 7 | E 8 | abaK Demo 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ABAK_DEMO 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | ZCL_ABAK_DEMO 23 | GC_DEMO_TABLENAME 24 | E 25 | Table Name 26 | 27 | 28 | ZCL_ABAK_DEMO 29 | GO_ABAK 30 | E 31 | ABAK Engine interface 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/utils/zcl_abak_usage.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ABAK_USAGE 7 | E 8 | abaK Demo 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zabak s.tobj.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK 7 | S 8 | X 9 | CUST 10 | 2 11 | 3 12 | 13 | 14 | E 15 | ZABAK 16 | S 17 | abaK Registered constants instances 18 | 19 | 20 | 21 | ZABAK 22 | S 23 | ZABAK 24 | X 25 | X 26 | 27 | 28 | 29 | 30 | ZABAK 31 | &NC& 32 | 33 | 34 | ZABAK 35 | ZABAK_MAINT 36 | $ABAK 37 | 1 38 | 0001 39 | X 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/zabak_api.pinf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | ZABAK_API 8 | abaK API 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/zabak_defaults.tobj.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAK_DEFAULT 7 | S 8 | X 9 | APPL 10 | 3 11 | 12 | 13 | E 14 | ZABAK_DEFAULT 15 | S 16 | abaK Default constants table (no transport request) 17 | 18 | 19 | 20 | ZABAK_DEFAULT 21 | S 22 | ZABAK_DEFAULT 23 | X 24 | X 25 | 26 | 27 | 28 | 29 | ZABAK_DEFAULT 30 | &NC& 31 | 32 | 33 | ZABAK_DEFAULT 34 | ZABAK_MAINT 35 | $ABAK 36 | 1 37 | 0002 38 | X 39 | X 40 | 41 | 42 | 43 | 44 | 45 | --------------------------------------------------------------------------------