├── .abapgit.xml ├── .gitlab-ci.yml ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── abaplint.json ├── docs ├── abap-openapi-ui-1.png ├── abap-openapi-ui-2.png ├── abap-openapi-ui-3.png └── tvc-banner.jpg ├── package.json └── src ├── 0679467e42241ee9aebf294db91d50c1.smim.xml ├── 0679467e42241ee9aebf556b9248f11a.smim.swagger-ui-bundle.js ├── 0679467e42241ee9aebf556b9248f11a.smim.xml ├── 0679467e42241ee9aebf57c405afb11a.smim.swagger-ui-standalone-preset.js ├── 0679467e42241ee9aebf57c405afb11a.smim.xml ├── 0679467e42241ee9aebf73dbbf1f1149.smim.swagger-ui.css ├── 0679467e42241ee9aebf73dbbf1f1149.smim.xml ├── 0679467e42241eecac8c2ab7fab39de0.smim.favicon-16x16.png ├── 0679467e42241eecac8c2ab7fab39de0.smim.xml ├── 0679467e42241eecac8c375a687bfe0b.smim.favicon-32x32.png ├── 0679467e42241eecac8c375a687bfe0b.smim.xml ├── 0679467e42241eecac8c37b891a4fe0b.smim.swagger-ui.css.map ├── 0679467e42241eecac8c37b891a4fe0b.smim.xml ├── 0679467e42241eecac8c37f077989e0b.smim.swagger-ui.js ├── 0679467e42241eecac8c37f077989e0b.smim.xml ├── 0679467e42241eecac8c3832215b5e0b.smim.swagger-ui.js.map ├── 0679467e42241eecac8c3832215b5e0b.smim.xml ├── 0679467e42241eecac8c38af212cfe0e.smim.swagger-ui-bundle.js.map ├── 0679467e42241eecac8c38af212cfe0e.smim.xml ├── 0679467e42241eecac8c38f97b5ebe0e.smim.swagger-ui-es-bundle.js ├── 0679467e42241eecac8c38f97b5ebe0e.smim.xml ├── 0679467e42241eecac8c391d7ad95e0e.smim.swagger-ui-es-bundle.js.map ├── 0679467e42241eecac8c391d7ad95e0e.smim.xml ├── 0679467e42241eecac8c3968442dbe0e.smim.swagger-ui-es-bundle-core.js ├── 0679467e42241eecac8c3968442dbe0e.smim.xml ├── 0679467e42241eecac8c399fd526de0e.smim.swagger-ui-es-bundle-core.js.map ├── 0679467e42241eecac8c399fd526de0e.smim.xml ├── 0679467e42241eecac8c39fb0785fe0e.smim.swagger-ui-standalone-preset.js.map ├── 0679467e42241eecac8c39fb0785fe0e.smim.xml ├── package.devc.xml ├── zcl_gw_openapi.clas.abap ├── zcl_gw_openapi.clas.xml ├── zcl_gw_openapi_meta_base.clas.abap ├── zcl_gw_openapi_meta_base.clas.xml ├── zcl_gw_openapi_metadata_v2.clas.abap ├── zcl_gw_openapi_metadata_v2.clas.xml ├── zcl_gw_openapi_metadata_v4.clas.abap ├── zcl_gw_openapi_metadata_v4.clas.xml ├── zgw_odatav2_to_v4.xslt.source.xml ├── zgw_odatav2_to_v4.xslt.xml ├── zgw_odatav4_to_openapi.xslt.source.xml ├── zgw_odatav4_to_openapi.xslt.xml ├── zgw_openapi 6afd6e4b01323acc2190a4972.sicf.xml ├── zgw_openapi.prog.abap ├── zgw_openapi.prog.xml ├── zgw_openapi.tran.xml ├── zgw_openapi.wapa.index.html ├── zgw_openapi.wapa.openapi.json ├── zgw_openapi.wapa.xml ├── zgw_openapi_class.prog.abap ├── zgw_openapi_class.prog.xml ├── zgw_openapi_test ├── package.devc.xml ├── tsd30020 dea7665865be5d346c37d3412.sicf.xml ├── zcl_gw_openapi_test_dpc_ext.clas.abap ├── zcl_gw_openapi_test_dpc_ext.clas.xml ├── zcl_gw_openapi_test_mpc_ext.clas.abap ├── zcl_gw_openapi_test_mpc_ext.clas.xml ├── zcl_zgw_openapi_test_dpc.clas.abap ├── zcl_zgw_openapi_test_dpc.clas.xml ├── zcl_zgw_openapi_test_dpc_ext.clas.abap ├── zcl_zgw_openapi_test_dpc_ext.clas.xml ├── zcl_zgw_openapi_test_mpc.clas.abap ├── zcl_zgw_openapi_test_mpc.clas.xml ├── zcl_zgw_openapi_test_mpc_ext.clas.abap ├── zcl_zgw_openapi_test_mpc_ext.clas.xml ├── zgw_openapi_test.iwpr.xml ├── zgw_openapi_test_mdl 0001.iwmo.xml ├── zgw_openapi_test_mdl_0001_be.iwom.xml ├── zgw_openapi_test_srv 0001.iwsv.xml └── zgw_openapi_test_srv_0001.iwsg.xml ├── zgw_openapi_top.prog.abap ├── zgw_openapi_top.prog.xml ├── zif_gw_openapi.intf.abap ├── zif_gw_openapi.intf.xml ├── zif_gw_openapi_metadata.intf.abap └── zif_gw_openapi_metadata.intf.xml /.abapgit.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | E 6 | /src/ 7 | FULL 8 | 9 | /.gitignore 10 | /LICENSE 11 | /README.md 12 | /CONTRIBUTING.md 13 | /package.json 14 | /.travis.yml 15 | /.gitlab-ci.yml 16 | /abaplint.json 17 | /azure-pipelines.yml 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | # This file is a template, and might need editing before it works on your project. 2 | # Official framework image. Look for the different tagged releases at: 3 | # https://hub.docker.com/r/library/node/tags/ 4 | image: node:latest 5 | 6 | # Pick zero or more services to be used on all builds. 7 | # Only needed when using a docker container to run your tests in. 8 | # Check out: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-a-service 9 | #services: 10 | # - mysql:latest 11 | # - redis:latest 12 | # - postgres:latest 13 | 14 | # This folder is cached between builds 15 | # http://docs.gitlab.com/ce/ci/yaml/README.html#cache 16 | cache: 17 | paths: 18 | - node_modules/ 19 | 20 | stages: 21 | - test 22 | 23 | abaplint: 24 | stage: test 25 | before_script: 26 | - npm install -g abaplint 27 | script: 28 | - abaplint -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # General Guidelines 2 | 3 | * Before starting any significant development, open an issue and propose your solution first. A discussion can save a lot of unnecessary work. It also helps others know that this is being worked on. 4 | * It is in your best interest to keep the commits/PRs as small as possible and solve one thing at a time. The smaller your change is, the easier it is to review and it will be more likely to get accepted. 5 | * Commit often, whenever something is working, and is a step in the right direction do a commit or PR. This way other contributors can see the changes, and it will minimize the risk of merge conflicts. 6 | * If you don't have the time or knowledge to fix the problem yourself, you can still make it move along faster by providing an accurate description. 7 | 8 | # Bug Reports 9 | Guidelines for bug reports: 10 | 11 | 1. **Use the Gitlab issue search** — check if the issue has already been reported. 12 | 2. **Check if the issue has been fixed** — try to reproduce it using the latest master or development branch in the repository. 13 | 3. **Demonstrate the problem** — provide clear steps that can be reproduced. 14 | 15 | A good bug report should not leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment? What steps will reproduce the issue? What would you expect to be the outcome? All these details will help to fix any potential bugs. 16 | 17 | # Development Guidelines 18 | **Prefixing** 19 | 20 | Variables are prefixed using the standard setting in [abapOpenChecks Naming Conventions](http://docs.abapopenchecks.org/checks/69/). 21 | 22 | **Downport** 23 | 24 | ABAP OpenAPI UI is targeted for version 740 (sp05), so the code should only contain expressions/statements that works on 740 (sp05). 25 | [abaplint](https://github.com/abaplint/abaplint) will automatically check every PR for language syntax that is not available on 740 (sp05). 26 | 27 | **Pretty Printer** 28 | 29 | Use pretty printer, keywords upper case + indentation, [abapOpenChecks](http://docs.abapopenchecks.org/checks/06/) can be used for checking this. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Geert-Jan Klaps 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 | # ABAP OpenAPI UI 2 | OpenAPI / Swagger UI integration for SAP NetWeaver Gateway 3 | 4 | ![abap-open-api-1](docs/abap-openapi-ui-1.png) 5 | ![abap-open-api-2](docs/abap-openapi-ui-2.png) 6 | ![abap-open-api-3](docs/abap-openapi-ui-3.png) 7 | 8 | # Installation 9 | 1. Install this repository using [abapGit](https://github.com/larshp/abapGit) 10 | 2. Run transaction ZGW_OPENAPI 11 | 12 | # FAQ 13 | For questions, bugs or feature requests please create an [issue](https://gitlab.com/geertjanklaps/abap-openapi-ui/issues) 14 | 15 | # Contributing 16 | Check the contributing / development guidelines [here](CONTRIBUTING.md) 17 | 18 | # Credits 19 | ABAP OpenAPI UI is based on 2 open source projects: 20 | * [Swagger UI](https://github.com/swagger-api/swagger-ui) 21 | * [Odata-OpenAPI](https://github.com/oasis-tcs/odata-openapi) 22 | 23 | The ABAP OpenAPI UI code is automatically checked and validated by [abaplint](https://github.com/abaplint/abaplint). 24 | 25 | This personal project was started (and is still being maintained) on a development system provided by TheValueChain: 26 | 27 | [![tvc-logo](docs/tvc-banner.jpg)](https://www.thevaluechain.eu) 28 | -------------------------------------------------------------------------------- /abaplint.json: -------------------------------------------------------------------------------- 1 | { 2 | "global": { 3 | "files": "/src/**/*.*", 4 | "skipGeneratedGatewayClasses": true, 5 | "skipGeneratedPersistentClasses": true, 6 | "skipGeneratedFunctionGroups": true 7 | }, 8 | "dependencies": [ 9 | { 10 | "url": "https://github.com/abaplint/deps", 11 | "folder": "/deps", 12 | "files": "/src/**/*.*" 13 | } 14 | ], 15 | "syntax": { 16 | "version": "v740sp05", 17 | "errorNamespace": "^(Z|Y)", 18 | "globalConstants": ["/iwbep/cl_v4_url_util"], 19 | "globalMacros": [] 20 | }, 21 | "rules": { 22 | "7bit_ascii": { 23 | "exclude": [], 24 | "reason": "" 25 | }, 26 | "allowed_object_types": { 27 | "exclude": [], 28 | "reason": "", 29 | "allowed": [] 30 | }, 31 | "ambiguous_statement": { 32 | "exclude": [], 33 | "reason": "" 34 | }, 35 | "avoid_use": { 36 | "exclude": [], 37 | "reason": "", 38 | "break": true, 39 | "defaultKey": true, 40 | "define": true, 41 | "endselect": true, 42 | "execSQL": true, 43 | "kernelCall": true, 44 | "communication": true, 45 | "statics": true, 46 | "systemCall": true 47 | }, 48 | "begin_end_names": { 49 | "exclude": [], 50 | "reason": "" 51 | }, 52 | "chain_mainly_declarations": { 53 | "exclude": [], 54 | "reason": "" 55 | }, 56 | "check_abstract": { 57 | "exclude": [], 58 | "reason": "" 59 | }, 60 | "check_comments": { 61 | "exclude": [], 62 | "reason": "", 63 | "allowEndOfLine": false 64 | }, 65 | "check_ddic": { 66 | "exclude": [], 67 | "reason": "" 68 | }, 69 | "check_include": { 70 | "exclude": [], 71 | "reason": "" 72 | }, 73 | "check_no_handler_pragma": { 74 | "exclude": [], 75 | "reason": "" 76 | }, 77 | "check_syntax": { 78 | "exclude": [], 79 | "reason": "" 80 | }, 81 | "check_text_elements": { 82 | "exclude": [], 83 | "reason": "" 84 | }, 85 | "check_transformation_exists": { 86 | "exclude": [], 87 | "reason": "" 88 | }, 89 | "class_attribute_names": { 90 | "exclude": [], 91 | "reason": "", 92 | "patternKind": "required", 93 | "ignoreNames": [], 94 | "ignorePatterns": [], 95 | "ignoreExceptions": true, 96 | "statics": "^G._.+$", 97 | "instance": "^M._.+$" 98 | }, 99 | "cloud_types": { 100 | "exclude": [], 101 | "reason": "" 102 | }, 103 | "colon_missing_space": { 104 | "exclude": [], 105 | "reason": "" 106 | }, 107 | "commented_code": { 108 | "allowIncludeInFugr": false, 109 | "exclude": ["src/zcl_gw_openapi_metadata_v2.clas.abap","src/zcl_gw_openapi_metadata_v4.clas.abap"], 110 | "reason": "ToDo" 111 | }, 112 | "constructor_visibility_public": { 113 | "exclude": [], 114 | "reason": "" 115 | }, 116 | "contains_tab": { 117 | "exclude": [], 118 | "reason": "" 119 | }, 120 | "definitions_top": { 121 | "exclude": ["src/zcl_gw_openapi_metadata_v4.clas.abap"], 122 | "reason": "ToDo" 123 | }, 124 | "description_empty": { 125 | "exclude": [], 126 | "reason": "" 127 | }, 128 | "double_space": { 129 | "exclude": [], 130 | "reason": "", 131 | "keywords": true, 132 | "startParen": true, 133 | "endParen": true, 134 | "afterColon": true 135 | }, 136 | "empty_line_in_statement": { 137 | "exclude": [], 138 | "reason": "", 139 | "allowChained": false 140 | }, 141 | "empty_statement": { 142 | "exclude": [], 143 | "reason": "" 144 | }, 145 | "empty_structure": { 146 | "exclude": [], 147 | "reason": "", 148 | "loop": true, 149 | "if": true, 150 | "while": true, 151 | "case": true, 152 | "select": true, 153 | "do": true, 154 | "at": true 155 | }, 156 | "exit_or_check": { 157 | "exclude": [], 158 | "reason": "" 159 | }, 160 | "exporting": { 161 | "exclude": [], 162 | "reason": "" 163 | }, 164 | "form_no_dash": { 165 | "exclude": [], 166 | "reason": "" 167 | }, 168 | "form_tables_obsolete": { 169 | "exclude": [], 170 | "reason": "" 171 | }, 172 | "fully_type_constants": { 173 | "exclude": [], 174 | "reason": "", 175 | "checkData": true 176 | }, 177 | "functional_writing": { 178 | "exclude": [], 179 | "reason": "", 180 | "ignoreExceptions": true 181 | }, 182 | "global_class": { 183 | "exclude": [], 184 | "reason": "" 185 | }, 186 | "identical_form_names": { 187 | "exclude": [], 188 | "reason": "" 189 | }, 190 | "if_in_if": { 191 | "exclude": [], 192 | "reason": "" 193 | }, 194 | "implement_methods": { 195 | "exclude": [], 196 | "reason": "" 197 | }, 198 | "in_statement_indentation": { 199 | "exclude": [], 200 | "reason": "", 201 | "ignoreExceptions": true 202 | }, 203 | "indentation": { 204 | "exclude": [], 205 | "reason": "", 206 | "ignoreExceptions": true, 207 | "alignTryCatch": false, 208 | "globalClassSkipFirst": false, 209 | "ignoreGlobalClassDefinition": false, 210 | "ignoreGlobalInterface": false 211 | }, 212 | "inline_data_old_versions": { 213 | "exclude": [], 214 | "reason": "" 215 | }, 216 | "keep_single_parameter_on_one_line": { 217 | "exclude": [], 218 | "reason": "", 219 | "length": 120 220 | }, 221 | "keyword_case": { 222 | "exclude": ["src/zcl_gw_openapi.clas.abap"], 223 | "reason": "Generated", 224 | "style": "upper", 225 | "ignoreExceptions": true, 226 | "ignoreLowerClassImplmentationStatement": true, 227 | "ignoreGlobalClassDefinition": false, 228 | "ignoreGlobalInterface": false, 229 | "ignoreFunctionModuleName": false 230 | }, 231 | "line_length": { 232 | "exclude": [], 233 | "reason": "", 234 | "length": 120 235 | }, 236 | "line_only_punc": { 237 | "exclude": [], 238 | "reason": "", 239 | "ignoreExceptions": true 240 | }, 241 | "local_class_naming": { 242 | "exclude": [], 243 | "reason": "", 244 | "patternKind": "required", 245 | "ignoreNames": [], 246 | "ignorePatterns": [], 247 | "local": "^LCL_.+$", 248 | "exception": "^LCX_.+$", 249 | "test": "^LTCL_.+$" 250 | }, 251 | "local_testclass_location": { 252 | "exclude": [], 253 | "reason": "" 254 | }, 255 | "local_variable_names": { 256 | "exclude": ["src/zcl_gw_openapi_metadata_v4.clas.abap"], 257 | "reason": "ToDo", 258 | "patternKind": "required", 259 | "ignoreNames": [], 260 | "ignorePatterns": [], 261 | "expectedData": "^L._.+$", 262 | "expectedConstant": "^LC_.+$", 263 | "expectedFS": "^$" 264 | }, 265 | "main_file_contents": { 266 | "exclude": [], 267 | "reason": "" 268 | }, 269 | "max_one_statement": { 270 | "exclude": [], 271 | "reason": "" 272 | }, 273 | "message_exists": { 274 | "exclude": [], 275 | "reason": "" 276 | }, 277 | "method_length": { 278 | "exclude": [], 279 | "reason": "", 280 | "statements": 100, 281 | "errorWhenEmpty": true, 282 | "ignoreTestClasses": false 283 | }, 284 | "method_parameter_names": { 285 | "exclude": [], 286 | "reason": "", 287 | "patternKind": "required", 288 | "ignoreNames": [], 289 | "ignorePatterns": [], 290 | "ignoreExceptions": true, 291 | "importing": "^I._.+$", 292 | "returning": "^R._.+$", 293 | "changing": "^C._.+$", 294 | "exporting": "^E._.+$" 295 | }, 296 | "mix_returning": { 297 | "exclude": [], 298 | "reason": "" 299 | }, 300 | "msag_consistency": { 301 | "exclude": [], 302 | "reason": "" 303 | }, 304 | "nesting": { 305 | "exclude": [], 306 | "reason": "", 307 | "depth": 5 308 | }, 309 | "newline_between_methods": { 310 | "exclude": [], 311 | "reason": "", 312 | "count": 3, 313 | "logic": "less" 314 | }, 315 | "no_public_attributes": { 316 | "exclude": [], 317 | "reason": "", 318 | "allowReadOnly": false 319 | }, 320 | "object_naming": { 321 | "exclude": [], 322 | "reason": "", 323 | "patternKind": "required", 324 | "ignoreNames": [], 325 | "ignorePatterns": [], 326 | "clas": "^ZC(L|X)\\_", 327 | "intf": "^ZIF\\_", 328 | "prog": "^Z", 329 | "fugr": "^Z", 330 | "tabl": "^Z", 331 | "ttyp": "^Z", 332 | "dtel": "^Z", 333 | "doma": "^Z", 334 | "msag": "^Z", 335 | "tran": "^Z", 336 | "enqu": "^EZ", 337 | "auth": "^Z", 338 | "pinf": "^Z", 339 | "idoc": "^Z", 340 | "xslt": "^Z" 341 | }, 342 | "obsolete_statement": { 343 | "exclude": [], 344 | "reason": "", 345 | "refresh": true, 346 | "compute": true, 347 | "add": true, 348 | "subtract": true, 349 | "multiply": true, 350 | "move": true, 351 | "divide": true, 352 | "requested": true, 353 | "occurs": true 354 | }, 355 | "parser_error": { 356 | "exclude": [], 357 | "reason": "" 358 | }, 359 | "prefer_returning_to_exporting": { 360 | "exclude": [], 361 | "reason": "" 362 | }, 363 | "preferred_compare_operator": { 364 | "exclude": [], 365 | "reason": "", 366 | "badOperators": [ 367 | "EQ", 368 | "><", 369 | "NE", 370 | "GE", 371 | "GT", 372 | "LT", 373 | "LE" 374 | ] 375 | }, 376 | "prefix_is_current_class": { 377 | "omitMeInstanceCalls": false, 378 | "exclude": [], 379 | "reason": "" 380 | }, 381 | "release_idoc": { 382 | "exclude": [], 383 | "reason": "" 384 | }, 385 | "rfc_error_handling": { 386 | "exclude": [], 387 | "reason": "" 388 | }, 389 | "selection_screen_naming": { 390 | "exclude": [], 391 | "reason": "", 392 | "patternKind": "required", 393 | "ignoreNames": [], 394 | "ignorePatterns": [], 395 | "parameter": "^P_.+$", 396 | "selectOption": "^S_.+$" 397 | }, 398 | "sequential_blank": { 399 | "exclude": [], 400 | "reason": "", 401 | "lines": 4 402 | }, 403 | "short_case": { 404 | "exclude": [], 405 | "reason": "", 406 | "length": 1, 407 | "allow": [] 408 | }, 409 | "sicf_consistency": { 410 | "exclude": [], 411 | "reason": "" 412 | }, 413 | "space_before_colon": { 414 | "exclude": [], 415 | "reason": "" 416 | }, 417 | "space_before_dot": { 418 | "exclude": [], 419 | "reason": "", 420 | "ignoreGlobalDefinition": true, 421 | "ignoreExceptions": true 422 | }, 423 | "sql_escape_host_variables": { 424 | "exclude": [], 425 | "reason": "" 426 | }, 427 | "start_at_tab": { 428 | "exclude": [], 429 | "reason": "" 430 | }, 431 | "superclass_final": { 432 | "exclude": [], 433 | "reason": "" 434 | }, 435 | "tabl_enhancement_category": { 436 | "exclude": [], 437 | "reason": "" 438 | }, 439 | "type_begin_single_include": { 440 | "exclude": [], 441 | "reason": "" 442 | }, 443 | "type_form_parameters": { 444 | "exclude": [], 445 | "reason": "" 446 | }, 447 | "types_naming": { 448 | "exclude": [], 449 | "reason": "", 450 | "pattern": "^TY_.+$" 451 | }, 452 | "unreachable_code": { 453 | "exclude": [], 454 | "reason": "" 455 | }, 456 | "use_new": { 457 | "exclude": [], 458 | "reason": "" 459 | }, 460 | "when_others_last": { 461 | "exclude": [], 462 | "reason": "" 463 | }, 464 | "whitespace_end": { 465 | "exclude": [], 466 | "reason": "" 467 | }, 468 | "xml_consistency": { 469 | "exclude": [], 470 | "reason": "" 471 | } 472 | } 473 | } -------------------------------------------------------------------------------- /docs/abap-openapi-ui-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geert-janklaps/abap-openapi-ui/d5eadc31010272358c27937e8f2d3697dae4c05d/docs/abap-openapi-ui-1.png -------------------------------------------------------------------------------- /docs/abap-openapi-ui-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geert-janklaps/abap-openapi-ui/d5eadc31010272358c27937e8f2d3697dae4c05d/docs/abap-openapi-ui-2.png -------------------------------------------------------------------------------- /docs/abap-openapi-ui-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geert-janklaps/abap-openapi-ui/d5eadc31010272358c27937e8f2d3697dae4c05d/docs/abap-openapi-ui-3.png -------------------------------------------------------------------------------- /docs/tvc-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geert-janklaps/abap-openapi-ui/d5eadc31010272358c27937e8f2d3697dae4c05d/docs/tvc-banner.jpg -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ABAP-OpenAPI-UI", 3 | "version": "1.0.0", 4 | "description": "OpenAPI integration for SAP NetWeaver Gateway", 5 | "scripts": { 6 | "test": "abaplint src/*" 7 | }, 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://gitlab.com/geertjanklaps/abap-openapi-ui.git" 11 | }, 12 | "homepage": "https://gitlab.com/geertjanklaps/abap-openapi-ui", 13 | "devDependencies": { 14 | "abaplint": "latest" 15 | } 16 | } -------------------------------------------------------------------------------- /src/0679467e42241ee9aebf294db91d50c1.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI 6 | X 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241ee9aebf556b9248f11a.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-bundle.js 6 | M_TEXT_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241ee9aebf57c405afb11a.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-standalone-preset.js 6 | M_TEXT_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241ee9aebf73dbbf1f1149.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui.css 6 | M_TEXT_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c2ab7fab39de0.smim.favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geert-janklaps/abap-openapi-ui/d5eadc31010272358c27937e8f2d3697dae4c05d/src/0679467e42241eecac8c2ab7fab39de0.smim.favicon-16x16.png -------------------------------------------------------------------------------- /src/0679467e42241eecac8c2ab7fab39de0.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/favicon-16x16.png 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c375a687bfe0b.smim.favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geert-janklaps/abap-openapi-ui/d5eadc31010272358c27937e8f2d3697dae4c05d/src/0679467e42241eecac8c375a687bfe0b.smim.favicon-32x32.png -------------------------------------------------------------------------------- /src/0679467e42241eecac8c375a687bfe0b.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/favicon-32x32.png 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c37b891a4fe0b.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui.css.map 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c37f077989e0b.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui.js 6 | M_TEXT_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c3832215b5e0b.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui.js.map 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c38af212cfe0e.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-bundle.js.map 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c38f97b5ebe0e.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-es-bundle.js 6 | M_TEXT_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c391d7ad95e0e.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-es-bundle.js.map 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c3968442dbe0e.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-es-bundle-core.js 6 | M_TEXT_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c399fd526de0e.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-es-bundle-core.js.map 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/0679467e42241eecac8c39fb0785fe0e.smim.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /SAP/BC/BSP/SAP/ZGW_OPENAPI/swagger-ui-standalone-preset.js.map 6 | M_APP_L 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | SAP Netweaver Gateway OpenAPI integration 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_gw_openapi DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PRIVATE . 5 | 6 | PUBLIC SECTION. 7 | 8 | INTERFACES zif_gw_openapi . 9 | 10 | METHODS constructor 11 | IMPORTING 12 | !iv_repository TYPE /iwbep/v4_med_repository_id OPTIONAL 13 | !iv_group_id TYPE /iwbep/v4_med_group_id OPTIONAL 14 | !iv_service TYPE /iwfnd/med_mdl_service_grp_id 15 | !iv_version TYPE /iwbep/v4_med_service_version DEFAULT '0001' 16 | !iv_base_url TYPE string OPTIONAL . 17 | CLASS-METHODS launch_bsp 18 | IMPORTING 19 | !iv_external_service TYPE /iwfnd/med_mdl_service_grp_id 20 | !iv_version TYPE /iwfnd/med_mdl_version DEFAULT '0001' 21 | !iv_repository TYPE /iwbep/v4_med_repository_id OPTIONAL 22 | !iv_group_id TYPE /iwbep/v4_med_group_id OPTIONAL 23 | !iv_json TYPE xfeld OPTIONAL . 24 | CLASS-METHODS factory 25 | IMPORTING 26 | !iv_repository TYPE /iwbep/v4_med_repository_id OPTIONAL 27 | !iv_group_id TYPE /iwbep/v4_med_group_id OPTIONAL 28 | !iv_service TYPE /iwfnd/med_mdl_service_grp_id 29 | !iv_version TYPE /iwbep/v4_med_service_version DEFAULT '0001' 30 | !iv_base_url TYPE string OPTIONAL 31 | RETURNING 32 | VALUE(ri_openapi) TYPE REF TO zif_gw_openapi . 33 | PROTECTED SECTION. 34 | PRIVATE SECTION. 35 | 36 | DATA mi_metadata_handler TYPE REF TO zif_gw_openapi_metadata . 37 | ENDCLASS. 38 | 39 | 40 | 41 | CLASS ZCL_GW_OPENAPI IMPLEMENTATION. 42 | 43 | 44 | METHOD constructor. 45 | 46 | * If repository and group id are initial => OData V2 service 47 | IF iv_repository IS INITIAL AND iv_group_id IS INITIAL. 48 | me->mi_metadata_handler = zcl_gw_openapi_metadata_v2=>factory( 49 | iv_external_service = iv_service 50 | iv_version = iv_version 51 | iv_base_url = iv_base_url ). 52 | ELSE. 53 | * Repository and group id are not initial => OData V4 service 54 | me->mi_metadata_handler = zcl_gw_openapi_metadata_v4=>factory( 55 | iv_repository = iv_repository 56 | iv_group_id = iv_group_id 57 | iv_service = CONV /iwbep/v4_med_service_id( iv_service ) 58 | iv_version = iv_version 59 | iv_base_url = iv_base_url ). 60 | ENDIF. 61 | 62 | ENDMETHOD. 63 | 64 | 65 | METHOD factory. 66 | 67 | * Return new instance of OpenAPI interface 68 | ri_openapi ?= NEW zcl_gw_openapi( 69 | iv_repository = iv_repository 70 | iv_group_id = iv_group_id 71 | iv_service = iv_service 72 | iv_version = iv_version 73 | iv_base_url = iv_base_url ). 74 | 75 | ENDMETHOD. 76 | 77 | 78 | METHOD launch_bsp. 79 | DATA: lv_url TYPE string, 80 | lv_url_1 TYPE agr_url2, 81 | lv_appl TYPE string, 82 | lv_page TYPE string, 83 | lt_params TYPE tihttpnvp, 84 | lv_answer TYPE string, 85 | lv_valueout TYPE string, 86 | lv_is_syst_client_valid TYPE abap_bool VALUE abap_false. 87 | 88 | WHILE lv_is_syst_client_valid = abap_false. 89 | 90 | CLEAR: lv_answer, lv_valueout. 91 | 92 | CALL FUNCTION 'POPUP_TO_GET_VALUE' 93 | EXPORTING 94 | fieldname = 'MANDT' 95 | tabname = 'T000' 96 | titel = 'Enter System Client' 97 | valuein = sy-mandt 98 | IMPORTING 99 | answer = lv_answer 100 | valueout = lv_valueout 101 | EXCEPTIONS 102 | fieldname_not_found = 1 103 | OTHERS = 2. 104 | 105 | IF sy-subrc <> 0. 106 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 107 | ENDIF. 108 | 109 | IF lv_answer = 'C'. 110 | RETURN. 111 | ENDIF. 112 | 113 | SELECT SINGLE @abap_true 114 | FROM t000 115 | INTO @lv_is_syst_client_valid 116 | WHERE mandt = @lv_valueout. 117 | 118 | IF lv_is_syst_client_valid = abap_false. 119 | MESSAGE `Client does not exist. Let's try again?!` TYPE 'I' DISPLAY LIKE 'I'. 120 | ENDIF. 121 | 122 | ENDWHILE. 123 | 124 | * Set parameters for BSP application 125 | lt_params = VALUE #( ( name = 'service' value = iv_external_service ) 126 | ( name = 'version' value = iv_version ) 127 | ( name = 'repository' value = iv_repository ) 128 | ( name = 'group' value = iv_group_id ) 129 | ( name = 'sap-client' value = lv_valueout ) 130 | ( name = 'sap-language' value = sy-langu ) ). 131 | 132 | * Set page 133 | IF iv_json = abap_false. 134 | lv_page = 'index.html'. 135 | ELSE. 136 | lv_page = 'openapi.json'. 137 | ENDIF. 138 | 139 | * Generate URL for BSP application 140 | cl_http_ext_webapp=>create_url_for_bsp_application( 141 | EXPORTING 142 | bsp_application = 'ZGW_OPENAPI' 143 | bsp_start_page = lv_page 144 | bsp_start_parameters = lt_params 145 | IMPORTING 146 | abs_url = lv_url ). 147 | 148 | * Launch BSP application 149 | lv_url_1 = lv_url. 150 | 151 | CALL FUNCTION 'CALL_BROWSER' 152 | EXPORTING 153 | url = lv_url_1 154 | * BROWSER_TYPE = 155 | * CONTEXTSTRING = 156 | EXCEPTIONS 157 | frontend_not_supported = 1 158 | frontend_error = 2 159 | prog_not_found = 3 160 | no_batch = 4 161 | unspecified_error = 5 162 | OTHERS = 6. 163 | 164 | ENDMETHOD. 165 | 166 | 167 | METHOD zif_gw_openapi~get_json. 168 | 169 | * Get JSON data 170 | me->mi_metadata_handler->get_json( 171 | IMPORTING 172 | ev_json = ev_json 173 | ev_json_string = ev_json_string ). 174 | 175 | ENDMETHOD. 176 | ENDCLASS. 177 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_GW_OPENAPI 7 | E 8 | SAP NetWeaver Gateway OpenAPI integration 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_GW_OPENAPI 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | ZCL_GW_OPENAPI 23 | FACTORY 24 | E 25 | OpenAPI Factory Method 26 | 27 | 28 | ZCL_GW_OPENAPI 29 | LAUNCH_BSP 30 | E 31 | Launch BSP application for OData service 32 | 33 | 34 | ZCL_GW_OPENAPI 35 | MI_METADATA_HANDLER 36 | E 37 | SAP NetWeaver Gateway OpenAPI Metadata reader 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi_meta_base.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_gw_openapi_meta_base DEFINITION 2 | PUBLIC 3 | CREATE PROTECTED . 4 | 5 | PUBLIC SECTION. 6 | PROTECTED SECTION. 7 | 8 | DATA mv_repository TYPE /iwbep/v4_med_repository_id . 9 | DATA mv_group_id TYPE /iwbep/v4_med_group_id . 10 | DATA mv_external_service TYPE /iwfnd/med_mdl_service_grp_id . 11 | DATA mv_version TYPE /iwfnd/med_mdl_version . 12 | DATA mv_base_url TYPE string . 13 | DATA mv_scheme TYPE string . 14 | DATA mv_host TYPE string . 15 | DATA mv_path TYPE string . 16 | DATA mv_description TYPE string . 17 | 18 | METHODS convert_odatav2_to_odatav4 19 | IMPORTING 20 | !iv_metadata_v2 TYPE xstring 21 | RETURNING 22 | VALUE(rv_metadata_v4) TYPE xstring . 23 | METHODS convert_odatav4_to_json 24 | IMPORTING 25 | !iv_metadata_v4 TYPE xstring 26 | RETURNING 27 | VALUE(rv_json) TYPE xstring . 28 | PRIVATE SECTION. 29 | ENDCLASS. 30 | 31 | 32 | 33 | CLASS ZCL_GW_OPENAPI_META_BASE IMPLEMENTATION. 34 | 35 | 36 | METHOD convert_odatav2_to_odatav4. 37 | 38 | * Convert OData V2 to V4 metadata document 39 | CALL TRANSFORMATION zgw_odatav2_to_v4 40 | SOURCE XML iv_metadata_v2 41 | RESULT XML rv_metadata_v4. 42 | 43 | ENDMETHOD. 44 | 45 | 46 | METHOD convert_odatav4_to_json. 47 | DATA: lt_parameters TYPE abap_trans_parmbind_tab. 48 | 49 | * Set transformation parameters 50 | DATA(lv_version) = me->mv_version. 51 | SHIFT lv_version LEFT DELETING LEADING '0'. 52 | lv_version = 'V' && lv_version. 53 | 54 | lt_parameters = VALUE #( ( name = 'openapi-version' value = '3.0.0' ) 55 | ( name = 'odata-version' value = '4.0' ) 56 | ( name = 'scheme' value = me->mv_scheme ) 57 | ( name = 'host' value = me->mv_host ) 58 | ( name = 'basePath' value = '/' && me->mv_path ) 59 | ( name = 'info-version' value = lv_version ) 60 | ( name = 'info-title' value = me->mv_external_service ) 61 | ( name = 'info-description' value = me->mv_description ) 62 | ( name = 'references' value = 'YES' ) 63 | ( name = 'diagram' value = 'YES' ) ). 64 | 65 | * Convert metadata document to openapi 66 | CALL TRANSFORMATION zgw_odatav4_to_openapi 67 | SOURCE XML iv_metadata_v4 68 | RESULT XML rv_json 69 | PARAMETERS (lt_parameters). 70 | 71 | 72 | ENDMETHOD. 73 | ENDCLASS. 74 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi_meta_base.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_GW_OPENAPI_META_BASE 7 | E 8 | SAP NetWeaver Gateway OpenAPI Metadata base class 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_GW_OPENAPI_META_BASE 17 | CONVERT_ODATAV2_TO_ODATAV4 18 | E 19 | Convert OData V2 metadata to OData V4 metadata 20 | 21 | 22 | ZCL_GW_OPENAPI_META_BASE 23 | CONVERT_ODATAV4_TO_JSON 24 | E 25 | Convert OData V4 metadata to OpenAPI / Swagger JSON 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi_metadata_v2.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_gw_openapi_metadata_v2 DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_gw_openapi_meta_base 4 | FINAL 5 | CREATE PRIVATE . 6 | 7 | PUBLIC SECTION. 8 | 9 | INTERFACES zif_gw_openapi_metadata . 10 | 11 | METHODS constructor 12 | IMPORTING 13 | !iv_external_service TYPE /iwfnd/med_mdl_service_grp_id 14 | !iv_version TYPE /iwfnd/med_mdl_version DEFAULT '0001' 15 | !iv_base_url TYPE string . 16 | CLASS-METHODS factory 17 | IMPORTING 18 | !iv_external_service TYPE /iwfnd/med_mdl_service_grp_id 19 | !iv_version TYPE /iwfnd/med_mdl_version DEFAULT '0001' 20 | !iv_base_url TYPE string 21 | RETURNING 22 | VALUE(ri_metadata) TYPE REF TO zif_gw_openapi_metadata . 23 | PROTECTED SECTION. 24 | PRIVATE SECTION. 25 | 26 | METHODS _read_metadata 27 | RETURNING 28 | VALUE(rv_metadata) TYPE xstring . 29 | ENDCLASS. 30 | 31 | 32 | 33 | CLASS ZCL_GW_OPENAPI_METADATA_V2 IMPLEMENTATION. 34 | 35 | 36 | METHOD constructor. 37 | * Call super class constructor 38 | super->constructor( ). 39 | 40 | * Check if service exists 41 | SELECT SINGLE h~srv_identifier, h~namespace, h~service_name, h~service_version 42 | FROM /iwfnd/i_med_srh AS h 43 | INTO @DATA(ls_service) 44 | WHERE service_name = @iv_external_service 45 | AND service_version = @iv_version. 46 | 47 | * Store service parameters 48 | me->mv_external_service = iv_external_service. 49 | me->mv_version = iv_version. 50 | me->mv_base_url = iv_base_url. 51 | 52 | ENDMETHOD. 53 | 54 | 55 | METHOD factory. 56 | 57 | * Return metadata handler instance 58 | ri_metadata ?= NEW zcl_gw_openapi_metadata_v2( iv_external_service = iv_external_service 59 | iv_version = iv_version 60 | iv_base_url = iv_base_url ). 61 | 62 | ENDMETHOD. 63 | 64 | 65 | METHOD zif_gw_openapi_metadata~get_json. 66 | DATA: lv_openapi_string TYPE string. 67 | 68 | DATA(lv_metadata) = me->_read_metadata( ). 69 | DATA(lv_metadata_v4) = me->convert_odatav2_to_odatav4( iv_metadata_v2 = lv_metadata ). 70 | DATA(lv_openapi) = me->convert_odatav4_to_json( iv_metadata_v4 = lv_metadata_v4 ). 71 | 72 | * Convert binary data to string 73 | DATA(lo_conv) = cl_abap_conv_in_ce=>create( 74 | encoding = 'UTF-8' 75 | input = lv_openapi ). 76 | 77 | lo_conv->read( IMPORTING data = lv_openapi_string ). 78 | 79 | * Add basic authentication to OpenAPI JSON 80 | "REPLACE ALL OCCURRENCES OF '"components":{' IN lv_openapi_string 81 | "WITH '"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic"}},'. 82 | 83 | * Convert OpenAPI JSON to binary format 84 | CLEAR lv_openapi. 85 | CALL FUNCTION 'SCMS_STRING_TO_XSTRING' 86 | EXPORTING 87 | text = lv_openapi_string 88 | IMPORTING 89 | buffer = lv_openapi 90 | EXCEPTIONS 91 | failed = 1 92 | OTHERS = 2. 93 | 94 | * Set exporting parameters 95 | ev_json = lv_openapi. 96 | ev_json_string = lv_openapi_string. 97 | 98 | ENDMETHOD. 99 | 100 | 101 | METHOD zif_gw_openapi_metadata~get_metadata. 102 | 103 | * Return metadata 104 | rv_metadata = me->_read_metadata( ). 105 | 106 | ENDMETHOD. 107 | 108 | 109 | METHOD _read_metadata. 110 | DATA: lv_service TYPE string, 111 | lv_path(255) TYPE c. 112 | 113 | * Read service details 114 | SELECT SINGLE h~srv_identifier, h~namespace, h~service_name, h~service_version, t~description 115 | FROM /iwfnd/i_med_srh AS h 116 | LEFT OUTER JOIN /iwfnd/i_med_srt AS t ON h~srv_identifier = t~srv_identifier 117 | AND h~is_active = t~is_active 118 | AND t~language = @sy-langu 119 | INTO @DATA(ls_service) 120 | WHERE service_name = @me->mv_external_service 121 | AND service_version = @me->mv_version. 122 | 123 | * Store description 124 | me->mv_description = ls_service-description. 125 | 126 | * Read SICF details 127 | DATA(lo_icf_access) = /iwfnd/cl_icf_access=>get_icf_access( ). 128 | DATA(lt_icfdocu) = lo_icf_access->get_icf_docu_for_gw_libs_wo_at( ). 129 | 130 | LOOP AT lt_icfdocu INTO DATA(ls_icfdocu). 131 | 132 | * Get main odata node 133 | DATA(lv_icf_lib_guid) = lo_icf_access->get_node_guid_wo_at( 134 | iv_icf_parent_guid = ls_icfdocu-icfparguid 135 | iv_icf_node_name = CONV icfaltnme( ls_icfdocu-icf_name ) ). 136 | 137 | ENDLOOP. 138 | 139 | * Get OData service URL 140 | TRY. 141 | CASE lv_icf_lib_guid. 142 | WHEN /iwfnd/cl_icf_access=>gcs_icf_node_ids-lib_02. 143 | DATA(lv_md_url) = /iwfnd/cl_med_utils=>get_meta_data_doc_url_local( 144 | iv_external_service_doc_name = ls_service-service_name 145 | iv_namespace = ls_service-namespace 146 | iv_icf_root_node_guid = lv_icf_lib_guid ). 147 | 148 | WHEN /iwfnd/cl_icf_access=>gcs_icf_node_ids-lib_10. 149 | lv_md_url = /iwfnd/cl_med_utils=>get_meta_data_doc_url_local( 150 | iv_external_service_doc_name = ls_service-service_name 151 | iv_namespace = ls_service-namespace 152 | iv_version = ls_service-service_version 153 | iv_icf_root_node_guid = lv_icf_lib_guid ). 154 | ENDCASE. 155 | 156 | CATCH /iwfnd/cx_med_mdl_access. 157 | ENDTRY. 158 | 159 | * Remove everything but path from URL 160 | REPLACE '/?$format=xml' IN lv_md_url WITH ''. 161 | DATA(lv_md_url_full) = lv_md_url. 162 | IF lv_md_url IS NOT INITIAL. 163 | DATA(lv_leng) = strlen( lv_md_url ). 164 | IF lv_leng > 7 AND ( lv_md_url(7) = 'http://' OR lv_md_url(8) = 'https://' ). 165 | SEARCH lv_md_url FOR '/sap/opu/'. 166 | IF sy-subrc = 0. 167 | lv_md_url = lv_md_url+sy-fdpos. 168 | ENDIF. 169 | ENDIF. 170 | ENDIF. 171 | 172 | * Set service 173 | lv_service = ls_service-namespace && ls_service-service_name. 174 | 175 | * Get base URL details 176 | IF me->mv_base_url IS NOT INITIAL. 177 | DATA(lv_base_url) = me->mv_base_url && lv_md_url. 178 | ELSE. 179 | lv_base_url = lv_md_url_full. 180 | ENDIF. 181 | 182 | SPLIT lv_base_url AT '://' INTO DATA(lv_scheme) DATA(lv_url_without_scheme). 183 | SPLIT lv_url_without_scheme AT '/' INTO DATA(lv_host) lv_path. 184 | 185 | DATA(lv_length) = strlen( lv_path ) - 1. 186 | IF lv_path+lv_length(1) = '/'. 187 | lv_path+lv_length(1) = ''. 188 | ENDIF. 189 | 190 | * Store scheme, host and path 191 | me->mv_scheme = lv_scheme. 192 | me->mv_host = lv_host. 193 | me->mv_path = lv_path. 194 | 195 | * Initialize NetWeaver Gateway transaction handler 196 | DATA(lo_transaction_handler) = /iwfnd/cl_transaction_handler=>get_transaction_handler( ). 197 | 198 | * Initialize transaction handler (set metadata access with full documentation) 199 | lo_transaction_handler->initialize( 200 | iv_request_id = '' 201 | iv_external_srv_grp_name = ls_service-service_name 202 | iv_version = ls_service-service_version 203 | iv_namespace = ls_service-namespace 204 | iv_verbose_metadata = /iwfnd/if_mgw_core_types=>gcs_verbose_metadata-all ). 205 | 206 | * Initialize metadata access 207 | lo_transaction_handler->set_metadata_access_info( 208 | iv_load_last_modified_only = abap_false 209 | iv_is_busi_data_request = abap_false 210 | iv_do_cache_handshake = abap_true ). 211 | 212 | * Load metadata document 213 | DATA(li_service_factory) = /iwfnd/cl_sodata_svc_factory=>get_svc_factory( ). 214 | DATA(li_service) = li_service_factory->create_service( iv_name = lv_service ). 215 | DATA(li_edm) = li_service->get_entity_data_model( ). 216 | DATA(li_metadata) = li_edm->get_service_metadata( ). 217 | 218 | li_metadata->get_metadata( IMPORTING ev_metadata = rv_metadata ). 219 | 220 | ENDMETHOD. 221 | ENDCLASS. 222 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi_metadata_v2.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_GW_OPENAPI_METADATA_V2 7 | E 8 | SAP NetWeaver Gataway OpenAPI Metadata V2 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_GW_OPENAPI_METADATA_V2 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | ZCL_GW_OPENAPI_METADATA_V2 23 | FACTORY 24 | E 25 | SAP NetWeaver Gateway OpenAPI Metadata V2 factory method 26 | 27 | 28 | ZCL_GW_OPENAPI_METADATA_V2 29 | _READ_METADATA 30 | E 31 | Read OData service metadata 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi_metadata_v4.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_gw_openapi_metadata_v4 DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_gw_openapi_meta_base 4 | FINAL 5 | CREATE PRIVATE . 6 | 7 | PUBLIC SECTION. 8 | 9 | INTERFACES zif_gw_openapi_metadata . 10 | 11 | METHODS constructor 12 | IMPORTING 13 | !iv_repository TYPE /iwbep/v4_med_repository_id 14 | !iv_group_id TYPE /iwbep/v4_med_group_id 15 | !iv_service TYPE /iwbep/v4_med_service_id 16 | !iv_version TYPE /iwbep/v4_med_service_version DEFAULT '0001' 17 | !iv_base_url TYPE string . 18 | CLASS-METHODS factory 19 | IMPORTING 20 | !iv_repository TYPE /iwbep/v4_med_repository_id 21 | !iv_group_id TYPE /iwbep/v4_med_group_id 22 | !iv_service TYPE /iwbep/v4_med_service_id 23 | !iv_version TYPE /iwbep/v4_med_service_version DEFAULT '0001' 24 | !iv_base_url TYPE string 25 | RETURNING 26 | VALUE(ri_metadata) TYPE REF TO zif_gw_openapi_metadata . 27 | PROTECTED SECTION. 28 | PRIVATE SECTION. 29 | 30 | METHODS _read_metadata 31 | RETURNING 32 | VALUE(rv_metadata) TYPE xstring . 33 | ENDCLASS. 34 | 35 | 36 | 37 | CLASS ZCL_GW_OPENAPI_METADATA_V4 IMPLEMENTATION. 38 | 39 | 40 | METHOD constructor. 41 | * Call super class constructor 42 | super->constructor( ). 43 | 44 | * Check if service exists 45 | SELECT SINGLE a~repository_id, a~group_id, a~service_id, s~service_version 46 | FROM /iwbep/i_v4_msga AS a 47 | INNER JOIN /iwbep/i_v4_msrv AS s ON a~service_id = s~service_id 48 | INNER JOIN /iwfnd/c_v4_msgr AS p ON a~group_id = p~group_id 49 | INTO @DATA(ls_service) 50 | WHERE a~group_id = @me->mv_group_id 51 | AND a~service_id = @me->mv_external_service 52 | AND a~repository_id = @me->mv_repository 53 | AND s~service_version = @me->mv_version. 54 | 55 | * Store service parameters 56 | me->mv_repository = iv_repository. 57 | me->mv_group_id = iv_group_id. 58 | me->mv_external_service = iv_service. 59 | me->mv_version = iv_version. 60 | me->mv_base_url = iv_base_url. 61 | 62 | ENDMETHOD. 63 | 64 | 65 | METHOD factory. 66 | 67 | * Return metadata handler instance 68 | ri_metadata ?= NEW zcl_gw_openapi_metadata_v4( 69 | iv_repository = iv_repository 70 | iv_group_id = iv_group_id 71 | iv_service = iv_service 72 | iv_version = iv_version 73 | iv_base_url = iv_base_url ). 74 | 75 | ENDMETHOD. 76 | 77 | 78 | METHOD zif_gw_openapi_metadata~get_json. 79 | DATA: lv_openapi_string TYPE string. 80 | 81 | DATA(lv_metadata) = me->_read_metadata( ). 82 | DATA(lv_openapi) = me->convert_odatav4_to_json( iv_metadata_v4 = lv_metadata ). 83 | 84 | * Convert binary data to string 85 | DATA(lo_conv) = cl_abap_conv_in_ce=>create( 86 | encoding = 'UTF-8' 87 | input = lv_openapi ). 88 | 89 | lo_conv->read( IMPORTING data = lv_openapi_string ). 90 | 91 | "REPLACE ALL OCCURRENCES OF ',,' IN lv_openapi_string WITH ''. 92 | 93 | * Add basic authentication to OpenAPI JSON 94 | "REPLACE ALL OCCURRENCES OF '"components":{' IN lv_openapi_string 95 | "WITH '"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic"}},'. 96 | 97 | * Convert OpenAPI JSON to binary format 98 | CLEAR lv_openapi. 99 | CALL FUNCTION 'SCMS_STRING_TO_XSTRING' 100 | EXPORTING 101 | text = lv_openapi_string 102 | IMPORTING 103 | buffer = lv_openapi 104 | EXCEPTIONS 105 | failed = 1 106 | OTHERS = 2. 107 | 108 | * Set exporting parameters 109 | ev_json = lv_openapi. 110 | ev_json_string = lv_openapi_string. 111 | 112 | ENDMETHOD. 113 | 114 | 115 | METHOD zif_gw_openapi_metadata~get_metadata. 116 | 117 | * Return metadata 118 | rv_metadata = me->_read_metadata( ). 119 | 120 | ENDMETHOD. 121 | 122 | 123 | METHOD _read_metadata. 124 | DATA: lo_service_factory TYPE REF TO /iwbep/cl_od_svc_factory, 125 | li_service_factory TYPE REF TO /iwcor/if_od_svc_factory, 126 | ls_request_base_info TYPE /iwbep/if_v4_request_info=>ty_s_base_info, 127 | lv_service TYPE string, 128 | lv_path(255) TYPE c. 129 | 130 | FIELD-SYMBOLS: TYPE string. 131 | 132 | * Read service details 133 | SELECT SINGLE a~repository_id, a~group_id, a~service_id, s~service_version, t~description 134 | FROM /iwbep/i_v4_msga AS a 135 | INNER JOIN /iwbep/i_v4_msrv AS s ON a~service_id = s~service_id 136 | INNER JOIN /iwfnd/c_v4_msgr AS p ON a~group_id = p~group_id 137 | LEFT OUTER JOIN /iwbep/i_v4_msrt AS t ON s~service_id = t~service_id 138 | AND s~service_version = t~service_version 139 | AND t~language = @sy-langu 140 | INTO @DATA(ls_service) 141 | WHERE a~group_id = @me->mv_group_id 142 | AND a~service_id = @me->mv_external_service 143 | AND a~repository_id = @me->mv_repository 144 | AND s~service_version = @me->mv_version. 145 | 146 | * Store description 147 | me->mv_description = ls_service-description. 148 | 149 | * Set service base url (gc_uri_icf_path = 7.54, gc_root_url = 7.53 and lower), not available in 7.52 150 | ASSIGN ('/iwbep/cl_v4_url_util')=>('gc_uri_icf_path') TO . 151 | IF sy-subrc <> 0. 152 | ASSIGN ('/iwbep/cl_v4_url_util')=>('gc_root_url') TO . 153 | ENDIF. 154 | 155 | IF IS ASSIGNED. 156 | lv_service = . 157 | ELSE. 158 | lv_service = '/sap/opu/odata4'. 159 | ENDIF. 160 | 161 | lv_service = lv_service && ls_service-group_id && '/' 162 | && ls_service-repository_id && '/' 163 | && ls_service-service_id && '/' 164 | && ls_service-service_version. 165 | 166 | lv_service = to_lower( lv_service ). 167 | REPLACE ALL OCCURRENCES OF '//' IN lv_service WITH '/'. 168 | 169 | * Get base URL details 170 | DATA(lv_base_url) = me->mv_base_url && lv_service. 171 | 172 | SPLIT lv_base_url AT '://' INTO DATA(lv_scheme) DATA(lv_url_without_scheme). 173 | SPLIT lv_url_without_scheme AT '/' INTO DATA(lv_host) lv_path. 174 | 175 | DATA(lv_length) = strlen( lv_path ) - 1. 176 | IF lv_path+lv_length(1) = '/'. 177 | lv_path+lv_length(1) = ''. 178 | ENDIF. 179 | 180 | * Store scheme, host and path 181 | me->mv_scheme = lv_scheme. 182 | me->mv_host = lv_host. 183 | me->mv_path = lv_path. 184 | 185 | * Initialize OData context 186 | ls_request_base_info-conditions-if_modified_since = 0. 187 | ls_request_base_info-conditions-if_unmodified_since = 0. 188 | ls_request_base_info-http_method = 'GET'. 189 | ls_request_base_info-host_name = lv_host. 190 | ls_request_base_info-service_group_id = me->mv_group_id. 191 | ls_request_base_info-service_key-repository_id = me->mv_repository. 192 | ls_request_base_info-service_key-service_id = me->mv_external_service. 193 | ls_request_base_info-service_key-service_version = me->mv_version. 194 | 195 | ls_request_base_info-http_headers = VALUE #( ( name = '~request_method' value = ls_request_base_info-http_method ) 196 | ( name = 'host' value = ls_request_base_info-host_name ) 197 | ( name = 'sap-client' value = sy-mandt ) 198 | ( name = 'sap-language' value = sy-langu ) ). 199 | 200 | * not available in 7.52 201 | FIELD-SYMBOLS: TYPE data. 202 | ASSIGN COMPONENT 'URI_REQUEST' OF STRUCTURE ls_request_base_info TO . 203 | IF IS ASSIGNED. 204 | = lv_service && '$metadata?sap-documentation=all'. 205 | APPEND INITIAL LINE TO ls_request_base_info-http_headers ASSIGNING FIELD-SYMBOL(). 206 | -name = '~request_uri'. 207 | -value = . 208 | ENDIF. 209 | 210 | 211 | DATA(li_request_info) = /iwbep/cl_v4s_runtime_factory=>create_request_info( ). 212 | TRY. 213 | "li_request_info->init( ls_request_base_info ). 214 | * Netweaver 7.54+ 215 | CALL METHOD li_request_info->('SET_BASE_INFO') 216 | EXPORTING 217 | is_base_info = ls_request_base_info. 218 | CATCH cx_sy_dyn_call_illegal_method. 219 | "li_request_info->init( ls_request_base_info ). 220 | 221 | * Netweaver 7.53 and lower 222 | CALL METHOD li_request_info->('INIT') 223 | EXPORTING 224 | is_base_info = ls_request_base_info. 225 | ENDTRY. 226 | 227 | li_request_info->set_lib_request_info( NEW /iwbep/cl_od_request_info( ) ). 228 | li_request_info->set_operation_kind( 229 | iv_operation_kind = /iwbep/if_v4_request_info=>gcs_operation_kinds-load_metadata ). 230 | 231 | DATA(lo_context) = NEW /iwcor/cl_od_cntxt( ). 232 | lo_context->/iwcor/if_od_cntxt~set_object( 233 | iv_name = /iwbep/if_od_types=>gc_od_cntx_object_identifier 234 | io_object = li_request_info ). 235 | 236 | * Load metadata document 237 | TRY. 238 | "lo_service_factory ?= /iwbep/cl_od_svc_factory=>get_instance( ). 239 | * Netweaver 7.53 and lower 240 | CALL METHOD /iwbep/cl_od_svc_factory=>('GET_INSTANCE') 241 | RECEIVING 242 | ro_svc_factory = li_service_factory. 243 | 244 | lo_service_factory ?= li_service_factory. 245 | CATCH cx_sy_dyn_call_illegal_method. 246 | * Netweaver 7.54+ 247 | CREATE OBJECT li_service_factory TYPE ('/IWBEP/CL_OD_SVC_FACTORY'). 248 | lo_service_factory ?= li_service_factory. 249 | ENDTRY. 250 | 251 | lo_service_factory->set_lib_context( io_context = lo_context ). 252 | DATA(li_service) = lo_service_factory->/iwcor/if_od_svc_factory~create_service( lv_service ). 253 | DATA(li_edm) = li_service->get_entity_data_model( ). 254 | DATA(li_metadata) = li_edm->get_service_metadata( ). 255 | 256 | li_metadata->get_metadata( IMPORTING ev_metadata = rv_metadata ). 257 | ENDMETHOD. 258 | ENDCLASS. 259 | -------------------------------------------------------------------------------- /src/zcl_gw_openapi_metadata_v4.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_GW_OPENAPI_METADATA_V4 7 | E 8 | SAP NetWeaver Gataway OpenAPI Metadata V4 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_GW_OPENAPI_METADATA_V4 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | ZCL_GW_OPENAPI_METADATA_V4 23 | FACTORY 24 | E 25 | SAP NetWeaver Gateway OpenAPI Metadata V4 factory method 26 | 27 | 28 | ZCL_GW_OPENAPI_METADATA_V4 29 | _READ_METADATA 30 | E 31 | Read OData service metadata 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/zgw_odatav2_to_v4.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_ODATAV2_TO_V4 7 | E 8 | Convert oData V2 Metadata to oData V4 Metadata 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/zgw_odatav4_to_openapi.xslt.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_ODATAV4_TO_OPENAPI 7 | E 8 | Convert oData V4 Metadata to OpenAPI standard 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/zgw_openapi 6afd6e4b01323acc2190a4972.sicf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /sap/bc/bsp/sap/zgw_openapi/ 6 | 7 | ZGW_OPENAPI 8 | zgw_openapi 9 | 10 | 11 | ZGW_OPENAPI 12 | E 13 | SAP NetWeaver Gateway OpenAPI integration 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/zgw_openapi.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZGW_OPENAPI 3 | *&---------------------------------------------------------------------* 4 | *& 5 | *&---------------------------------------------------------------------* 6 | REPORT zgw_openapi. 7 | 8 | INCLUDE zgw_openapi_top. 9 | INCLUDE zgw_openapi_class. 10 | 11 | AT SELECTION-SCREEN OUTPUT. 12 | lcl_screen_handler=>handle_pbo( ). 13 | 14 | AT SELECTION-SCREEN. 15 | lcl_screen_handler=>handle_pai( iv_ok_code = sy-ucomm ). 16 | CLEAR sy-ucomm. 17 | -------------------------------------------------------------------------------- /src/zgw_openapi.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_OPENAPI 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | I 15 | 000 16 | Report mode 17 | 21 18 | 19 | 20 | I 21 | 001 22 | Selection 23 | 21 24 | 25 | 26 | I 27 | 002 28 | OpenAPI / Swagger options 29 | 25 30 | 31 | 32 | R 33 | Active Gateway Services Overview 34 | 32 35 | 36 | 37 | S 38 | P_JSON 39 | JSON 40 | 12 41 | 42 | 43 | S 44 | P_UI 45 | Swagger UI 46 | 18 47 | 48 | 49 | S 50 | P_V2 51 | OData V2 52 | 16 53 | 54 | 55 | S 56 | P_V4 57 | OData V4 58 | 16 59 | 60 | 61 | S 62 | S_GRP4 63 | . 64 | 16 65 | D 66 | 67 | 68 | S 69 | S_NAME2 70 | . 71 | 25 72 | D 73 | 74 | 75 | S 76 | S_NAME4 77 | . 78 | 27 79 | D 80 | 81 | 82 | S 83 | S_REP4 84 | . 85 | 21 86 | D 87 | 88 | 89 | S 90 | S_VERS2 91 | . 92 | 15 93 | D 94 | 95 | 96 | S 97 | S_VERS4 98 | . 99 | 32 100 | D 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /src/zgw_openapi.tran.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_OPENAPI 7 | ZGW_OPENAPI 8 | 1000 9 | gA== 10 | 11 | 12 | ZGW_OPENAPI 13 | 1 14 | X 15 | X 16 | 17 | 18 | E 19 | ZGW_OPENAPI 20 | SAP NetWeaver Gateway OpenAPI docs. 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zgw_openapi.wapa.index.html: -------------------------------------------------------------------------------- 1 | <%@page language="abap"%> 2 | <%@extension name="htmlb" prefix="htmlb"%> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | 41 | 104 | 105 | -------------------------------------------------------------------------------- /src/zgw_openapi.wapa.openapi.json: -------------------------------------------------------------------------------- 1 | <%@page language="abap"%> 2 | <%= json %> -------------------------------------------------------------------------------- /src/zgw_openapi.wapa.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_OPENAPI 7 | ZGW_OPENAPI 8 | X 9 | E 10 | E 11 | SAP NetWeaver Gateway OpenAPI integration 12 | 13 | 14 | 15 | 16 | ZGW_OPENAPI 17 | INDEX.HTML 18 | index.html 19 | text/html 20 | X 21 | E 22 | A 23 | E 24 | Swagger UI Page 25 | 26 | 27 | 28 | ZGW_OPENAPI 29 | INDEX.HTML 30 | ONINITIALIZATION 31 | A 32 | OnInitialization 33 | 34 | * event handler for data retrieval 35 | 36 | json_url = 'openapi.json?service=' 37 | && service 38 | && '&version=' && version 39 | && '&group=' && group 40 | && '&repository=' && repository. 41 | 42 | 43 | 44 | 45 | 46 | ZGW_OPENAPI 47 | INDEX.HTML 48 | GROUP 49 | A 50 | 1 51 | /IWBEP/V4_MED_GROUP_ID 52 | group 53 | OData V4 Group ID 54 | 55 | 56 | ZGW_OPENAPI 57 | INDEX.HTML 58 | JSON_URL 59 | A 60 | 1 61 | 1 62 | STRING 63 | json_url 64 | JSON URL 65 | 66 | 67 | ZGW_OPENAPI 68 | INDEX.HTML 69 | REPOSITORY 70 | A 71 | 1 72 | /IWBEP/V4_MED_REPOSITORY_ID 73 | repository 74 | OData V4 Repository ID 75 | 76 | 77 | ZGW_OPENAPI 78 | INDEX.HTML 79 | SERVICE 80 | A 81 | 1 82 | /IWFND/MED_MDL_SERVICE_GRP_ID 83 | service 84 | External Service Document Name 85 | 86 | 87 | ZGW_OPENAPI 88 | INDEX.HTML 89 | VERSION 90 | A 91 | 1 92 | /IWFND/MED_MDL_VERSION 93 | version 94 | Version of Meta Model Entity 95 | 96 | 97 | 98 | 99 | 100 | ZGW_OPENAPI 101 | OPENAPI.JSON 102 | openapi.json 103 | application/json 104 | X 105 | E 106 | A 107 | E 108 | Swagger / OpenAPI JSON 109 | 110 | 111 | 112 | ZGW_OPENAPI 113 | OPENAPI.JSON 114 | ONINITIALIZATION 115 | A 116 | OnInitialization 117 | 118 | * event handler for data retrieval 119 | DATA: lt_headers TYPE tihttpnvp, 120 | lv_base_url TYPE string. 121 | 122 | * Read request headers 123 | request->if_http_entity~get_header_fields( CHANGING fields = lt_headers ). 124 | 125 | * Read HTTP scheme (HTTP / HTTPS) 126 | READ TABLE lt_headers INTO DATA(ls_header) WITH KEY name = '~uri_scheme_expanded'. 127 | lv_base_url = to_lower( ls_header-value ) && '://'. 128 | 129 | * Read server name 130 | READ TABLE lt_headers INTO ls_header WITH KEY name = '~server_name_expanded'. 131 | lv_base_url = lv_base_url && ls_header-value. 132 | 133 | * Read server port 134 | READ TABLE lt_headers INTO ls_header WITH KEY name = '~server_port_expanded'. 135 | IF ls_header-value <> '80' AND ls_header-value <> '443'. 136 | lv_base_url = lv_base_url && ':' && ls_header-value. 137 | ENDIF. 138 | 139 | * Check service parameter is set 140 | IF service IS NOT INITIAL. 141 | * If no version supplied take default version 1 142 | IF version IS INITIAL. 143 | version = '0001'. 144 | ENDIF. 145 | 146 | * Generate JSON 147 | DATA(lo_openapi) = zcl_gw_openapi=>factory( 148 | iv_repository = repository 149 | iv_group_id = group 150 | iv_service = service 151 | iv_version = version 152 | iv_base_url = lv_base_url 153 | ). 154 | 155 | lo_openapi->get_json( 156 | IMPORTING 157 | ev_json_string = json ). 158 | 159 | ENDIF. 160 | 161 | 162 | 163 | 164 | 165 | ZGW_OPENAPI 166 | OPENAPI.JSON 167 | GROUP 168 | A 169 | 1 170 | /IWBEP/V4_MED_GROUP_ID 171 | group 172 | OData V4 Group ID 173 | 174 | 175 | ZGW_OPENAPI 176 | OPENAPI.JSON 177 | JSON 178 | A 179 | 1 180 | 1 181 | STRING 182 | json 183 | JSON 184 | 185 | 186 | ZGW_OPENAPI 187 | OPENAPI.JSON 188 | REPOSITORY 189 | A 190 | 1 191 | /IWBEP/V4_MED_REPOSITORY_ID 192 | repository 193 | OData V4 Repository ID 194 | 195 | 196 | ZGW_OPENAPI 197 | OPENAPI.JSON 198 | SERVICE 199 | A 200 | 1 201 | /IWFND/MED_MDL_SERVICE_GRP_ID 202 | service 203 | External Service Document Name 204 | 205 | 206 | ZGW_OPENAPI 207 | OPENAPI.JSON 208 | VERSION 209 | A 210 | 1 211 | /IWFND/MED_MDL_VERSION 212 | version 213 | Version of Meta Model Entity 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | -------------------------------------------------------------------------------- /src/zgw_openapi_class.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Include ZGW_SERVICE_OVERVIEW_CLASS 3 | *&---------------------------------------------------------------------* 4 | CLASS lcl_screen_handler DEFINITION CREATE PRIVATE. 5 | PUBLIC SECTION. 6 | CLASS-METHODS handle_pbo. 7 | CLASS-METHODS handle_pai IMPORTING iv_ok_code TYPE syucomm. 8 | 9 | TYPES: BEGIN OF ty_v2_service_s, 10 | service_name TYPE /iwfnd/med_mdl_service_grp_id, 11 | service_version TYPE /iwfnd/med_mdl_version, 12 | created_by TYPE cruser, 13 | created_at TYPE timestamp, 14 | created_date TYPE d, 15 | created_time TYPE t, 16 | changed_by TYPE chuser, 17 | changed_at TYPE timestamp, 18 | changed_date TYPE d, 19 | changed_time TYPE t, 20 | description TYPE /iwfnd/med_mdl_srg_description, 21 | devclass TYPE devclass, 22 | END OF ty_v2_service_s. 23 | 24 | TYPES: BEGIN OF ty_v4_service_s, 25 | group_id TYPE /iwbep/v4_med_group_id, 26 | repository_id TYPE /iwbep/v4_med_repository_id, 27 | service_id TYPE /iwbep/v4_med_service_id, 28 | service_version TYPE /iwbep/v4_med_service_version, 29 | description TYPE /iwbep/v4_reg_description, 30 | END OF ty_v4_service_s. 31 | 32 | 33 | PRIVATE SECTION. 34 | CLASS-METHODS get_v2_data. 35 | CLASS-METHODS get_v4_data. 36 | CLASS-METHODS display_alv. 37 | 38 | CLASS-METHODS handle_link_click 39 | FOR EVENT link_click OF cl_salv_events_table 40 | IMPORTING row 41 | column. 42 | 43 | CLASS-DATA: gt_v2_data TYPE TABLE OF ty_v2_service_s, 44 | gt_v4_data TYPE TABLE OF ty_v4_service_s. 45 | 46 | ENDCLASS. 47 | 48 | CLASS lcl_screen_handler IMPLEMENTATION. 49 | 50 | METHOD handle_pbo. 51 | 52 | LOOP AT SCREEN. 53 | CASE p_v2. 54 | WHEN abap_true. 55 | IF screen-name CS 'S_NAME2' OR screen-name CS 'S_VERS2'. 56 | screen-invisible = 0. 57 | screen-active = 1. 58 | ELSEIF screen-name CS 'S_NAME4' OR screen-name CS 'S_VERS4' 59 | OR screen-name CS 'S_GRP4' OR screen-name CS 'S_REP4'. 60 | screen-invisible = 1. 61 | screen-active = 0. 62 | ENDIF. 63 | WHEN OTHERS. 64 | IF screen-name CS 'S_NAME2' OR screen-name CS 'S_VERS2'. 65 | screen-invisible = 1. 66 | screen-active = 0. 67 | ELSEIF screen-name CS 'S_NAME4' OR screen-name CS 'S_VERS4' 68 | OR screen-name CS 'S_GRP4' OR screen-name CS 'S_REP4'. 69 | screen-invisible = 0. 70 | screen-active = 1. 71 | ENDIF. 72 | ENDCASE. 73 | 74 | MODIFY SCREEN. 75 | ENDLOOP. 76 | 77 | ENDMETHOD. 78 | 79 | METHOD handle_pai. 80 | 81 | CASE iv_ok_code. 82 | WHEN 'CRET' OR 'ONLI'. 83 | IF p_v2 = abap_true. 84 | get_v2_data( ). 85 | ELSE. 86 | get_v4_data( ). 87 | ENDIF. 88 | 89 | display_alv( ). 90 | 91 | WHEN OTHERS. 92 | 93 | ENDCASE. 94 | 95 | ENDMETHOD. 96 | 97 | METHOD get_v2_data. 98 | 99 | * Read service details 100 | SELECT h~service_name, 101 | h~service_version, 102 | h~created_by, 103 | h~created_timestmp AS created_at, 104 | h~changed_by, 105 | h~changed_timestmp AS changed_at, 106 | t~description, 107 | p~devclass 108 | FROM /iwfnd/i_med_srh AS h 109 | LEFT OUTER JOIN /iwfnd/i_med_srt AS t ON h~srv_identifier = t~srv_identifier 110 | AND h~is_active = t~is_active 111 | AND t~language = @sy-langu 112 | INNER JOIN tadir AS p ON p~obj_name = h~srv_identifier 113 | WHERE h~service_name IN @s_name2 114 | AND h~service_version IN @s_vers2 115 | AND h~is_active = 'A' 116 | AND p~pgmid = 'R3TR' 117 | AND p~object = 'IWSG' 118 | INTO CORRESPONDING FIELDS OF TABLE @gt_v2_data. 119 | 120 | LOOP AT gt_v2_data ASSIGNING FIELD-SYMBOL(). 121 | CONVERT TIME STAMP -created_at TIME ZONE sy-zonlo 122 | INTO DATE -created_date TIME -created_time. 123 | 124 | CONVERT TIME STAMP -changed_at TIME ZONE sy-zonlo 125 | INTO DATE -changed_date TIME -changed_time. 126 | ENDLOOP. 127 | 128 | ENDMETHOD. 129 | 130 | METHOD get_v4_data. 131 | 132 | * Read service details 133 | SELECT a~repository_id, a~group_id, a~service_id, s~service_version, t~description 134 | FROM /iwbep/i_v4_msga AS a 135 | INNER JOIN /iwbep/i_v4_msrv AS s ON a~service_id = s~service_id 136 | INNER JOIN /iwfnd/c_v4_msgr AS p ON a~group_id = p~group_id 137 | LEFT OUTER JOIN /iwbep/i_v4_msrt AS t ON s~service_id = t~service_id 138 | AND s~service_version = t~service_version 139 | AND t~language = @sy-langu 140 | INTO CORRESPONDING FIELDS OF TABLE @gt_v4_data 141 | WHERE a~group_id IN @s_grp4 142 | AND a~service_id IN @s_name4 143 | AND a~repository_id IN @s_rep4 144 | AND s~service_version IN @s_vers4 145 | ORDER BY a~service_id ASCENDING. 146 | 147 | ENDMETHOD. 148 | 149 | METHOD display_alv. 150 | DATA: lo_column TYPE REF TO cl_salv_column_table. 151 | 152 | * Create ALV object 153 | IF p_v2 = abap_true. 154 | cl_salv_table=>factory( 155 | IMPORTING 156 | r_salv_table = DATA(lo_alv) 157 | CHANGING 158 | t_table = gt_v2_data ). 159 | ELSE. 160 | cl_salv_table=>factory( 161 | IMPORTING 162 | r_salv_table = lo_alv 163 | CHANGING 164 | t_table = gt_v4_data ). 165 | ENDIF. 166 | 167 | * Enable all standard ALV functions 168 | lo_alv->get_functions( )->set_all( abap_true ). 169 | 170 | * Update field catalog 171 | DATA(lo_columns) = lo_alv->get_columns( ). 172 | lo_columns->set_optimize( ). 173 | 174 | " Set Zebra Pattern 175 | lo_alv->get_display_settings( )->set_striped_pattern( 'X' ). 176 | 177 | * Enable hotspot 178 | IF p_v2 = abap_true. 179 | 180 | lo_column ?= lo_columns->get_column( columnname = 'SERVICE_NAME' ). 181 | lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ). 182 | 183 | lo_column ?= lo_columns->get_column( columnname = 'CREATED_AT' ). 184 | lo_column->set_technical( ). 185 | 186 | lo_column ?= lo_columns->get_column( columnname = 'CREATED_DATE' ). 187 | lo_column->set_short_text( 'Created Dt' ). 188 | lo_column->set_medium_text( 'Created Date' ). 189 | lo_column->set_long_text( 'Created Date' ). 190 | 191 | lo_column ?= lo_columns->get_column( columnname = 'CREATED_TIME' ). 192 | lo_column->set_short_text( 'Created Tm' ). 193 | lo_column->set_medium_text( 'Created Time' ). 194 | lo_column->set_long_text( 'Created Time' ). 195 | 196 | lo_column ?= lo_columns->get_column( columnname = 'CHANGED_AT' ). 197 | lo_column->set_technical( ). 198 | 199 | lo_column ?= lo_columns->get_column( columnname = 'CHANGED_DATE' ). 200 | lo_column->set_short_text( 'Changed Dt' ). 201 | lo_column->set_medium_text( 'Changed Date' ). 202 | lo_column->set_long_text( 'Changed Date' ). 203 | 204 | lo_column ?= lo_columns->get_column( columnname = 'CHANGED_TIME' ). 205 | lo_column->set_short_text( 'Changed Tm' ). 206 | lo_column->set_medium_text( 'Changed Time' ). 207 | lo_column->set_long_text( 'Changed Time' ). 208 | 209 | ELSE. 210 | lo_column ?= lo_columns->get_column( columnname = 'SERVICE_ID' ). 211 | lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ). 212 | ENDIF. 213 | 214 | * Enable events 215 | DATA(lo_events) = lo_alv->get_event( ). 216 | SET HANDLER handle_link_click FOR lo_events. 217 | 218 | * Display ALV 219 | lo_alv->display( ). 220 | 221 | ENDMETHOD. 222 | 223 | METHOD handle_link_click. 224 | 225 | IF p_v2 = abap_true AND column = 'SERVICE_NAME'. 226 | READ TABLE gt_v2_data INTO DATA(ls_v2_data) INDEX row. 227 | 228 | zcl_gw_openapi=>launch_bsp( 229 | iv_external_service = ls_v2_data-service_name 230 | iv_version = ls_v2_data-service_version 231 | iv_json = p_json ). 232 | 233 | ELSEIF p_v4 = abap_true AND column = 'SERVICE_ID'. 234 | READ TABLE gt_v4_data INTO DATA(ls_v4_data) INDEX row. 235 | 236 | zcl_gw_openapi=>launch_bsp( 237 | iv_external_service = CONV /iwfnd/med_mdl_service_grp_id( ls_v4_data-service_id ) 238 | iv_version = ls_v4_data-service_version 239 | iv_repository = ls_v4_data-repository_id 240 | iv_group_id = ls_v4_data-group_id 241 | iv_json = p_json ). 242 | ENDIF. 243 | 244 | ENDMETHOD. 245 | 246 | ENDCLASS. 247 | -------------------------------------------------------------------------------- /src/zgw_openapi_class.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_OPENAPI_CLASS 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZGW_SERVICE_OVERVIEW_CLASS 15 | 34 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | SAP NetWeaver Gateway OpenAPI integration test package 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/tsd30020 dea7665865be5d346c37d3412.sicf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | /sap/opu/odata/sap/TSD30020/ 6 | 7 | TSD30020 8 | TSD30020 9 | ZGW_OPENAPI_TEST_SRV 10 | 11 | 12 | TSD30020 13 | E 14 | ZGW_OPENAPI_TEST_SRV 15 | 16 | 17 | 18 | TSD30020 19 | 01 20 | A 21 | /IWFND/CL_SODATA_HTTP_HANDLER 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_gw_openapi_test_dpc_ext.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_gw_openapi_test_dpc_ext DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_zgw_openapi_test_dpc 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | PROTECTED SECTION. 8 | 9 | METHODS usercollection_create_entity 10 | REDEFINITION . 11 | METHODS usercollection_delete_entity 12 | REDEFINITION . 13 | METHODS usercollection_get_entity 14 | REDEFINITION . 15 | METHODS usercollection_get_entityset 16 | REDEFINITION . 17 | METHODS usercollection_update_entity 18 | REDEFINITION . 19 | PRIVATE SECTION. 20 | ENDCLASS. 21 | 22 | 23 | 24 | CLASS ZCL_GW_OPENAPI_TEST_DPC_EXT IMPLEMENTATION. 25 | 26 | 27 | METHOD usercollection_create_entity. 28 | 29 | * Read supplied data and return it as an entity (simulate create) 30 | io_data_provider->read_entry_data( IMPORTING es_data = er_entity ). 31 | 32 | ENDMETHOD. 33 | 34 | 35 | METHOD usercollection_delete_entity. 36 | DATA: lt_keys TYPE /iwbep/t_mgw_tech_pairs, 37 | ls_key TYPE /iwbep/s_mgw_tech_pair, 38 | ls_user_addr TYPE user_addr, 39 | ls_user_addr_new TYPE user_addr, 40 | ls_message TYPE scx_t100key, 41 | lv_bname TYPE bname. 42 | 43 | * Read keys from request 44 | lt_keys = io_tech_request_context->get_keys( ). 45 | 46 | * Read user name from key table 47 | READ TABLE lt_keys INTO ls_key WITH KEY name = 'BNAME'. 48 | IF sy-subrc <> 0. 49 | ls_message-msgid = 'SY'. 50 | ls_message-msgno = '002'. 51 | ls_message-attr1 = 'No username provided'. 52 | 53 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 54 | EXPORTING 55 | textid = ls_message. 56 | ENDIF. 57 | 58 | lv_bname = ls_key-value. 59 | 60 | * Check if user exists 61 | SELECT SINGLE * FROM user_addr 62 | INTO @ls_user_addr 63 | WHERE bname = @lv_bname. 64 | 65 | IF sy-subrc <> 0. 66 | ls_message-msgid = 'SY'. 67 | ls_message-msgno = '002'. 68 | CONCATENATE `Username ` lv_bname ` doesn't exist` INTO ls_message-attr1. 69 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 70 | EXPORTING 71 | textid = ls_message. 72 | ENDIF. 73 | 74 | ENDMETHOD. 75 | 76 | 77 | METHOD usercollection_get_entity. 78 | 79 | * Read supplied user name 80 | READ TABLE it_key_tab INTO DATA(ls_key) WITH KEY name = 'Bname'. 81 | 82 | * Read data from database 83 | SELECT SINGLE * FROM user_addr 84 | INTO CORRESPONDING FIELDS OF @er_entity 85 | WHERE bname = @ls_key-value. 86 | 87 | ENDMETHOD. 88 | 89 | 90 | METHOD usercollection_get_entityset. 91 | DATA ls_user_select_option TYPE /iwbep/s_mgw_select_option. 92 | 93 | * Read select option (user name) 94 | READ TABLE it_filter_select_options INTO ls_user_select_option WITH KEY property = 'Bname'. 95 | 96 | * Read data from database 97 | SELECT * FROM user_addr 98 | INTO CORRESPONDING FIELDS OF TABLE @et_entityset 99 | WHERE bname IN @ls_user_select_option-select_options. 100 | 101 | ENDMETHOD. 102 | 103 | 104 | METHOD usercollection_update_entity. 105 | DATA: lt_keys TYPE /iwbep/t_mgw_tech_pairs, 106 | ls_key TYPE /iwbep/s_mgw_tech_pair, 107 | ls_user_addr TYPE user_addr, 108 | ls_user_addr_new TYPE user_addr, 109 | ls_message TYPE scx_t100key, 110 | lv_bname TYPE bname. 111 | 112 | * Read keys from request 113 | lt_keys = io_tech_request_context->get_keys( ). 114 | 115 | * Read user name from key table 116 | READ TABLE lt_keys INTO ls_key WITH KEY name = 'BNAME'. 117 | IF sy-subrc <> 0. 118 | ls_message-msgid = 'SY'. 119 | ls_message-msgno = '002'. 120 | ls_message-attr1 = 'No username provided'. 121 | 122 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 123 | EXPORTING 124 | textid = ls_message. 125 | ENDIF. 126 | 127 | lv_bname = ls_key-value. 128 | 129 | * Check if user exists 130 | SELECT SINGLE * FROM user_addr 131 | INTO @ls_user_addr 132 | WHERE bname = @lv_bname. 133 | 134 | IF sy-subrc <> 0. 135 | ls_message-msgid = 'SY'. 136 | ls_message-msgno = '002'. 137 | CONCATENATE `Username ` lv_bname ` doesn't exist` INTO ls_message-attr1. 138 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 139 | EXPORTING 140 | textid = ls_message. 141 | ENDIF. 142 | 143 | * Read provided changes into entity (simulate update) 144 | io_data_provider->read_entry_data( IMPORTING es_data = er_entity ). 145 | 146 | ENDMETHOD. 147 | ENDCLASS. 148 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_gw_openapi_test_dpc_ext.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_GW_OPENAPI_TEST_DPC_EXT 7 | E 8 | Data Provider Secondary Class 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_gw_openapi_test_mpc_ext.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_gw_openapi_test_mpc_ext DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_zgw_openapi_test_mpc 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | PROTECTED SECTION. 8 | PRIVATE SECTION. 9 | ENDCLASS. 10 | 11 | 12 | 13 | CLASS ZCL_GW_OPENAPI_TEST_MPC_EXT IMPLEMENTATION. 14 | ENDCLASS. 15 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_gw_openapi_test_mpc_ext.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_GW_OPENAPI_TEST_MPC_EXT 7 | E 8 | ZCL_ZGW_OPENAPI_TEST_MPC_EXT 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_dpc.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ZGW_OPENAPI_TEST_DPC definition 2 | public 3 | inheriting from /IWBEP/CL_MGW_PUSH_ABS_DATA 4 | abstract 5 | create public . 6 | 7 | public section. 8 | 9 | interfaces /IWBEP/IF_SB_DPC_COMM_SERVICES . 10 | interfaces /IWBEP/IF_SB_GEN_DPC_INJECTION . 11 | 12 | methods /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITYSET 13 | redefinition . 14 | methods /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITY 15 | redefinition . 16 | methods /IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_ENTITY 17 | redefinition . 18 | methods /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_ENTITY 19 | redefinition . 20 | methods /IWBEP/IF_MGW_APPL_SRV_RUNTIME~DELETE_ENTITY 21 | redefinition . 22 | protected section. 23 | 24 | data mo_injection type ref to /IWBEP/IF_SB_GEN_DPC_INJECTION . 25 | 26 | methods USERCOLLECTION_CREATE_ENTITY 27 | importing 28 | !IV_ENTITY_NAME type STRING 29 | !IV_ENTITY_SET_NAME type STRING 30 | !IV_SOURCE_NAME type STRING 31 | !IT_KEY_TAB type /IWBEP/T_MGW_NAME_VALUE_PAIR 32 | !IO_TECH_REQUEST_CONTEXT type ref to /IWBEP/IF_MGW_REQ_ENTITY_C optional 33 | !IT_NAVIGATION_PATH type /IWBEP/T_MGW_NAVIGATION_PATH 34 | !IO_DATA_PROVIDER type ref to /IWBEP/IF_MGW_ENTRY_PROVIDER optional 35 | exporting 36 | !ER_ENTITY type ZCL_ZGW_OPENAPI_TEST_MPC=>TS_USER 37 | raising 38 | /IWBEP/CX_MGW_BUSI_EXCEPTION 39 | /IWBEP/CX_MGW_TECH_EXCEPTION . 40 | methods USERCOLLECTION_DELETE_ENTITY 41 | importing 42 | !IV_ENTITY_NAME type STRING 43 | !IV_ENTITY_SET_NAME type STRING 44 | !IV_SOURCE_NAME type STRING 45 | !IT_KEY_TAB type /IWBEP/T_MGW_NAME_VALUE_PAIR 46 | !IO_TECH_REQUEST_CONTEXT type ref to /IWBEP/IF_MGW_REQ_ENTITY_D optional 47 | !IT_NAVIGATION_PATH type /IWBEP/T_MGW_NAVIGATION_PATH 48 | raising 49 | /IWBEP/CX_MGW_BUSI_EXCEPTION 50 | /IWBEP/CX_MGW_TECH_EXCEPTION . 51 | methods USERCOLLECTION_GET_ENTITY 52 | importing 53 | !IV_ENTITY_NAME type STRING 54 | !IV_ENTITY_SET_NAME type STRING 55 | !IV_SOURCE_NAME type STRING 56 | !IT_KEY_TAB type /IWBEP/T_MGW_NAME_VALUE_PAIR 57 | !IO_REQUEST_OBJECT type ref to /IWBEP/IF_MGW_REQ_ENTITY optional 58 | !IO_TECH_REQUEST_CONTEXT type ref to /IWBEP/IF_MGW_REQ_ENTITY optional 59 | !IT_NAVIGATION_PATH type /IWBEP/T_MGW_NAVIGATION_PATH 60 | exporting 61 | !ER_ENTITY type ZCL_ZGW_OPENAPI_TEST_MPC=>TS_USER 62 | !ES_RESPONSE_CONTEXT type /IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_ENTITY_CNTXT 63 | raising 64 | /IWBEP/CX_MGW_BUSI_EXCEPTION 65 | /IWBEP/CX_MGW_TECH_EXCEPTION . 66 | methods USERCOLLECTION_GET_ENTITYSET 67 | importing 68 | !IV_ENTITY_NAME type STRING 69 | !IV_ENTITY_SET_NAME type STRING 70 | !IV_SOURCE_NAME type STRING 71 | !IT_FILTER_SELECT_OPTIONS type /IWBEP/T_MGW_SELECT_OPTION 72 | !IS_PAGING type /IWBEP/S_MGW_PAGING 73 | !IT_KEY_TAB type /IWBEP/T_MGW_NAME_VALUE_PAIR 74 | !IT_NAVIGATION_PATH type /IWBEP/T_MGW_NAVIGATION_PATH 75 | !IT_ORDER type /IWBEP/T_MGW_SORTING_ORDER 76 | !IV_FILTER_STRING type STRING 77 | !IV_SEARCH_STRING type STRING 78 | !IO_TECH_REQUEST_CONTEXT type ref to /IWBEP/IF_MGW_REQ_ENTITYSET optional 79 | exporting 80 | !ET_ENTITYSET type ZCL_ZGW_OPENAPI_TEST_MPC=>TT_USER 81 | !ES_RESPONSE_CONTEXT type /IWBEP/IF_MGW_APPL_SRV_RUNTIME=>TY_S_MGW_RESPONSE_CONTEXT 82 | raising 83 | /IWBEP/CX_MGW_BUSI_EXCEPTION 84 | /IWBEP/CX_MGW_TECH_EXCEPTION . 85 | methods USERCOLLECTION_UPDATE_ENTITY 86 | importing 87 | !IV_ENTITY_NAME type STRING 88 | !IV_ENTITY_SET_NAME type STRING 89 | !IV_SOURCE_NAME type STRING 90 | !IT_KEY_TAB type /IWBEP/T_MGW_NAME_VALUE_PAIR 91 | !IO_TECH_REQUEST_CONTEXT type ref to /IWBEP/IF_MGW_REQ_ENTITY_U optional 92 | !IT_NAVIGATION_PATH type /IWBEP/T_MGW_NAVIGATION_PATH 93 | !IO_DATA_PROVIDER type ref to /IWBEP/IF_MGW_ENTRY_PROVIDER optional 94 | exporting 95 | !ER_ENTITY type ZCL_ZGW_OPENAPI_TEST_MPC=>TS_USER 96 | raising 97 | /IWBEP/CX_MGW_BUSI_EXCEPTION 98 | /IWBEP/CX_MGW_TECH_EXCEPTION . 99 | 100 | methods CHECK_SUBSCRIPTION_AUTHORITY 101 | redefinition . 102 | private section. 103 | ENDCLASS. 104 | 105 | 106 | 107 | CLASS ZCL_ZGW_OPENAPI_TEST_DPC IMPLEMENTATION. 108 | 109 | 110 | method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_ENTITY. 111 | *&----------------------------------------------------------------------------------------------* 112 | *& Include /IWBEP/DPC_TEMP_CRT_ENTITY_BASE 113 | *&* This class has been generated on 19.08.2019 18:50:22 in client 300 114 | *&* 115 | *&* WARNING--> NEVER MODIFY THIS CLASS <--WARNING 116 | *&* If you want to change the DPC implementation, use the 117 | *&* generated methods inside the DPC provider subclass - ZCL_ZGW_OPENAPI_TEST_DPC_EXT 118 | *&-----------------------------------------------------------------------------------------------* 119 | 120 | DATA usercollection_create_entity TYPE zcl_zgw_openapi_test_mpc=>ts_user. 121 | DATA lv_entityset_name TYPE string. 122 | 123 | lv_entityset_name = io_tech_request_context->get_entity_set_name( ). 124 | 125 | CASE lv_entityset_name. 126 | *-------------------------------------------------------------------------* 127 | * EntitySet - userCollection 128 | *-------------------------------------------------------------------------* 129 | WHEN 'userCollection'. 130 | * Call the entity set generated method 131 | usercollection_create_entity( 132 | EXPORTING iv_entity_name = iv_entity_name 133 | iv_entity_set_name = iv_entity_set_name 134 | iv_source_name = iv_source_name 135 | io_data_provider = io_data_provider 136 | it_key_tab = it_key_tab 137 | it_navigation_path = it_navigation_path 138 | io_tech_request_context = io_tech_request_context 139 | IMPORTING er_entity = usercollection_create_entity 140 | ). 141 | * Send specific entity data to the caller interfaces 142 | copy_data_to_ref( 143 | EXPORTING 144 | is_data = usercollection_create_entity 145 | CHANGING 146 | cr_data = er_entity 147 | ). 148 | 149 | when others. 150 | super->/iwbep/if_mgw_appl_srv_runtime~create_entity( 151 | EXPORTING 152 | iv_entity_name = iv_entity_name 153 | iv_entity_set_name = iv_entity_set_name 154 | iv_source_name = iv_source_name 155 | io_data_provider = io_data_provider 156 | it_key_tab = it_key_tab 157 | it_navigation_path = it_navigation_path 158 | IMPORTING 159 | er_entity = er_entity 160 | ). 161 | ENDCASE. 162 | endmethod. 163 | 164 | 165 | method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~DELETE_ENTITY. 166 | *&----------------------------------------------------------------------------------------------* 167 | *& Include /IWBEP/DPC_TEMP_DEL_ENTITY_BASE 168 | *&* This class has been generated on 19.08.2019 18:50:22 in client 300 169 | *&* 170 | *&* WARNING--> NEVER MODIFY THIS CLASS <--WARNING 171 | *&* If you want to change the DPC implementation, use the 172 | *&* generated methods inside the DPC provider subclass - ZCL_ZGW_OPENAPI_TEST_DPC_EXT 173 | *&-----------------------------------------------------------------------------------------------* 174 | 175 | DATA lv_entityset_name TYPE string. 176 | 177 | lv_entityset_name = io_tech_request_context->get_entity_set_name( ). 178 | 179 | CASE lv_entityset_name. 180 | *-------------------------------------------------------------------------* 181 | * EntitySet - userCollection 182 | *-------------------------------------------------------------------------* 183 | when 'userCollection'. 184 | * Call the entity set generated method 185 | usercollection_delete_entity( 186 | EXPORTING iv_entity_name = iv_entity_name 187 | iv_entity_set_name = iv_entity_set_name 188 | iv_source_name = iv_source_name 189 | it_key_tab = it_key_tab 190 | it_navigation_path = it_navigation_path 191 | io_tech_request_context = io_tech_request_context 192 | ). 193 | 194 | when others. 195 | super->/iwbep/if_mgw_appl_srv_runtime~delete_entity( 196 | EXPORTING 197 | iv_entity_name = iv_entity_name 198 | iv_entity_set_name = iv_entity_set_name 199 | iv_source_name = iv_source_name 200 | it_key_tab = it_key_tab 201 | it_navigation_path = it_navigation_path 202 | ). 203 | ENDCASE. 204 | endmethod. 205 | 206 | 207 | method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITY. 208 | *&-----------------------------------------------------------------------------------------------* 209 | *& Include /IWBEP/DPC_TEMP_GETENTITY_BASE 210 | *&* This class has been generated on 19.08.2019 18:50:22 in client 300 211 | *&* 212 | *&* WARNING--> NEVER MODIFY THIS CLASS <--WARNING 213 | *&* If you want to change the DPC implementation, use the 214 | *&* generated methods inside the DPC provider subclass - ZCL_ZGW_OPENAPI_TEST_DPC_EXT 215 | *&-----------------------------------------------------------------------------------------------* 216 | 217 | DATA usercollection_get_entity TYPE zcl_zgw_openapi_test_mpc=>ts_user. 218 | DATA lv_entityset_name TYPE string. 219 | DATA lr_entity TYPE REF TO data. "#EC NEEDED 220 | 221 | lv_entityset_name = io_tech_request_context->get_entity_set_name( ). 222 | 223 | CASE lv_entityset_name. 224 | *-------------------------------------------------------------------------* 225 | * EntitySet - userCollection 226 | *-------------------------------------------------------------------------* 227 | WHEN 'userCollection'. 228 | * Call the entity set generated method 229 | usercollection_get_entity( 230 | EXPORTING iv_entity_name = iv_entity_name 231 | iv_entity_set_name = iv_entity_set_name 232 | iv_source_name = iv_source_name 233 | it_key_tab = it_key_tab 234 | it_navigation_path = it_navigation_path 235 | io_tech_request_context = io_tech_request_context 236 | IMPORTING er_entity = usercollection_get_entity 237 | es_response_context = es_response_context 238 | ). 239 | 240 | IF usercollection_get_entity IS NOT INITIAL. 241 | * Send specific entity data to the caller interface 242 | copy_data_to_ref( 243 | EXPORTING 244 | is_data = usercollection_get_entity 245 | CHANGING 246 | cr_data = er_entity 247 | ). 248 | ELSE. 249 | * In case of initial values - unbind the entity reference 250 | er_entity = lr_entity. 251 | ENDIF. 252 | 253 | WHEN OTHERS. 254 | super->/iwbep/if_mgw_appl_srv_runtime~get_entity( 255 | EXPORTING 256 | iv_entity_name = iv_entity_name 257 | iv_entity_set_name = iv_entity_set_name 258 | iv_source_name = iv_source_name 259 | it_key_tab = it_key_tab 260 | it_navigation_path = it_navigation_path 261 | IMPORTING 262 | er_entity = er_entity 263 | ). 264 | ENDCASE. 265 | endmethod. 266 | 267 | 268 | method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITYSET. 269 | *&----------------------------------------------------------------------------------------------* 270 | *& Include /IWBEP/DPC_TMP_ENTITYSET_BASE 271 | *&* This class has been generated on 19.08.2019 18:50:22 in client 300 272 | *&* 273 | *&* WARNING--> NEVER MODIFY THIS CLASS <--WARNING 274 | *&* If you want to change the DPC implementation, use the 275 | *&* generated methods inside the DPC provider subclass - ZCL_ZGW_OPENAPI_TEST_DPC_EXT 276 | *&-----------------------------------------------------------------------------------------------* 277 | DATA usercollection_get_entityset TYPE zcl_zgw_openapi_test_mpc=>tt_user. 278 | DATA lv_entityset_name TYPE string. 279 | 280 | lv_entityset_name = io_tech_request_context->get_entity_set_name( ). 281 | 282 | CASE lv_entityset_name. 283 | *-------------------------------------------------------------------------* 284 | * EntitySet - userCollection 285 | *-------------------------------------------------------------------------* 286 | WHEN 'userCollection'. 287 | * Call the entity set generated method 288 | usercollection_get_entityset( 289 | EXPORTING 290 | iv_entity_name = iv_entity_name 291 | iv_entity_set_name = iv_entity_set_name 292 | iv_source_name = iv_source_name 293 | it_filter_select_options = it_filter_select_options 294 | it_order = it_order 295 | is_paging = is_paging 296 | it_navigation_path = it_navigation_path 297 | it_key_tab = it_key_tab 298 | iv_filter_string = iv_filter_string 299 | iv_search_string = iv_search_string 300 | io_tech_request_context = io_tech_request_context 301 | IMPORTING 302 | et_entityset = usercollection_get_entityset 303 | es_response_context = es_response_context 304 | ). 305 | * Send specific entity data to the caller interface 306 | copy_data_to_ref( 307 | EXPORTING 308 | is_data = usercollection_get_entityset 309 | CHANGING 310 | cr_data = er_entityset 311 | ). 312 | 313 | WHEN OTHERS. 314 | super->/iwbep/if_mgw_appl_srv_runtime~get_entityset( 315 | EXPORTING 316 | iv_entity_name = iv_entity_name 317 | iv_entity_set_name = iv_entity_set_name 318 | iv_source_name = iv_source_name 319 | it_filter_select_options = it_filter_select_options 320 | it_order = it_order 321 | is_paging = is_paging 322 | it_navigation_path = it_navigation_path 323 | it_key_tab = it_key_tab 324 | iv_filter_string = iv_filter_string 325 | iv_search_string = iv_search_string 326 | io_tech_request_context = io_tech_request_context 327 | IMPORTING 328 | er_entityset = er_entityset ). 329 | ENDCASE. 330 | endmethod. 331 | 332 | 333 | method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_ENTITY. 334 | *&----------------------------------------------------------------------------------------------* 335 | *& Include /IWBEP/DPC_TEMP_UPD_ENTITY_BASE 336 | *&* This class has been generated on 19.08.2019 18:50:22 in client 300 337 | *&* 338 | *&* WARNING--> NEVER MODIFY THIS CLASS <--WARNING 339 | *&* If you want to change the DPC implementation, use the 340 | *&* generated methods inside the DPC provider subclass - ZCL_ZGW_OPENAPI_TEST_DPC_EXT 341 | *&-----------------------------------------------------------------------------------------------* 342 | 343 | DATA usercollection_update_entity TYPE zcl_zgw_openapi_test_mpc=>ts_user. 344 | DATA lv_entityset_name TYPE string. 345 | DATA lr_entity TYPE REF TO data. "#EC NEEDED 346 | 347 | lv_entityset_name = io_tech_request_context->get_entity_set_name( ). 348 | 349 | CASE lv_entityset_name. 350 | *-------------------------------------------------------------------------* 351 | * EntitySet - userCollection 352 | *-------------------------------------------------------------------------* 353 | WHEN 'userCollection'. 354 | * Call the entity set generated method 355 | usercollection_update_entity( 356 | EXPORTING iv_entity_name = iv_entity_name 357 | iv_entity_set_name = iv_entity_set_name 358 | iv_source_name = iv_source_name 359 | io_data_provider = io_data_provider 360 | it_key_tab = it_key_tab 361 | it_navigation_path = it_navigation_path 362 | io_tech_request_context = io_tech_request_context 363 | IMPORTING er_entity = usercollection_update_entity 364 | ). 365 | IF usercollection_update_entity IS NOT INITIAL. 366 | * Send specific entity data to the caller interface 367 | copy_data_to_ref( 368 | EXPORTING 369 | is_data = usercollection_update_entity 370 | CHANGING 371 | cr_data = er_entity 372 | ). 373 | ELSE. 374 | * In case of initial values - unbind the entity reference 375 | er_entity = lr_entity. 376 | ENDIF. 377 | WHEN OTHERS. 378 | super->/iwbep/if_mgw_appl_srv_runtime~update_entity( 379 | EXPORTING 380 | iv_entity_name = iv_entity_name 381 | iv_entity_set_name = iv_entity_set_name 382 | iv_source_name = iv_source_name 383 | io_data_provider = io_data_provider 384 | it_key_tab = it_key_tab 385 | it_navigation_path = it_navigation_path 386 | IMPORTING 387 | er_entity = er_entity 388 | ). 389 | ENDCASE. 390 | endmethod. 391 | 392 | 393 | method /IWBEP/IF_SB_DPC_COMM_SERVICES~COMMIT_WORK. 394 | * Call RFC commit work functionality 395 | DATA lt_message TYPE bapiret2. "#EC NEEDED 396 | DATA lv_message_text TYPE BAPI_MSG. 397 | DATA lo_logger TYPE REF TO /iwbep/cl_cos_logger. 398 | DATA lv_subrc TYPE syst-subrc. 399 | 400 | lo_logger = /iwbep/if_mgw_conv_srv_runtime~get_logger( ). 401 | 402 | IF iv_rfc_dest IS INITIAL OR iv_rfc_dest EQ 'NONE'. 403 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 404 | EXPORTING 405 | wait = abap_true 406 | IMPORTING 407 | return = lt_message. 408 | ELSE. 409 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 410 | DESTINATION iv_rfc_dest 411 | EXPORTING 412 | wait = abap_true 413 | IMPORTING 414 | return = lt_message 415 | EXCEPTIONS 416 | communication_failure = 1000 MESSAGE lv_message_text 417 | system_failure = 1001 MESSAGE lv_message_text 418 | OTHERS = 1002. 419 | 420 | IF sy-subrc <> 0. 421 | lv_subrc = sy-subrc. 422 | /iwbep/cl_sb_gen_dpc_rt_util=>rfc_exception_handling( 423 | EXPORTING 424 | iv_subrc = lv_subrc 425 | iv_exp_message_text = lv_message_text 426 | io_logger = lo_logger ). 427 | ENDIF. 428 | ENDIF. 429 | endmethod. 430 | 431 | 432 | method /IWBEP/IF_SB_DPC_COMM_SERVICES~GET_GENERATION_STRATEGY. 433 | * Get generation strategy 434 | rv_generation_strategy = '1'. 435 | endmethod. 436 | 437 | 438 | method /IWBEP/IF_SB_DPC_COMM_SERVICES~LOG_MESSAGE. 439 | * Log message in the application log 440 | DATA lo_logger TYPE REF TO /iwbep/cl_cos_logger. 441 | DATA lv_text TYPE /iwbep/sup_msg_longtext. 442 | 443 | MESSAGE ID iv_msg_id TYPE iv_msg_type NUMBER iv_msg_number 444 | WITH iv_msg_v1 iv_msg_v2 iv_msg_v3 iv_msg_v4 INTO lv_text. 445 | 446 | lo_logger = mo_context->get_logger( ). 447 | lo_logger->log_message( 448 | EXPORTING 449 | iv_msg_type = iv_msg_type 450 | iv_msg_id = iv_msg_id 451 | iv_msg_number = iv_msg_number 452 | iv_msg_text = lv_text 453 | iv_msg_v1 = iv_msg_v1 454 | iv_msg_v2 = iv_msg_v2 455 | iv_msg_v3 = iv_msg_v3 456 | iv_msg_v4 = iv_msg_v4 457 | iv_agent = 'DPC' ). 458 | endmethod. 459 | 460 | 461 | method /IWBEP/IF_SB_DPC_COMM_SERVICES~RFC_EXCEPTION_HANDLING. 462 | * RFC call exception handling 463 | DATA lo_logger TYPE REF TO /iwbep/cl_cos_logger. 464 | 465 | lo_logger = /iwbep/if_mgw_conv_srv_runtime~get_logger( ). 466 | 467 | /iwbep/cl_sb_gen_dpc_rt_util=>rfc_exception_handling( 468 | EXPORTING 469 | iv_subrc = iv_subrc 470 | iv_exp_message_text = iv_exp_message_text 471 | io_logger = lo_logger ). 472 | endmethod. 473 | 474 | 475 | method /IWBEP/IF_SB_DPC_COMM_SERVICES~RFC_SAVE_LOG. 476 | DATA lo_logger TYPE REF TO /iwbep/cl_cos_logger. 477 | DATA lo_message_container TYPE REF TO /iwbep/if_message_container. 478 | 479 | lo_logger = /iwbep/if_mgw_conv_srv_runtime~get_logger( ). 480 | lo_message_container = /iwbep/if_mgw_conv_srv_runtime~get_message_container( ). 481 | 482 | " Save the RFC call log in the application log 483 | /iwbep/cl_sb_gen_dpc_rt_util=>rfc_save_log( 484 | EXPORTING 485 | is_return = is_return 486 | iv_entity_type = iv_entity_type 487 | it_return = it_return 488 | it_key_tab = it_key_tab 489 | io_logger = lo_logger 490 | io_message_container = lo_message_container ). 491 | endmethod. 492 | 493 | 494 | method /IWBEP/IF_SB_DPC_COMM_SERVICES~SET_INJECTION. 495 | * Unit test injection 496 | IF io_unit IS BOUND. 497 | mo_injection = io_unit. 498 | ELSE. 499 | mo_injection = me. 500 | ENDIF. 501 | endmethod. 502 | 503 | 504 | method CHECK_SUBSCRIPTION_AUTHORITY. 505 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc 506 | EXPORTING 507 | textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented 508 | method = 'CHECK_SUBSCRIPTION_AUTHORITY'. 509 | endmethod. 510 | 511 | 512 | method USERCOLLECTION_CREATE_ENTITY. 513 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc 514 | EXPORTING 515 | textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented 516 | method = 'USERCOLLECTION_CREATE_ENTITY'. 517 | endmethod. 518 | 519 | 520 | method USERCOLLECTION_DELETE_ENTITY. 521 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc 522 | EXPORTING 523 | textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented 524 | method = 'USERCOLLECTION_DELETE_ENTITY'. 525 | endmethod. 526 | 527 | 528 | method USERCOLLECTION_GET_ENTITY. 529 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc 530 | EXPORTING 531 | textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented 532 | method = 'USERCOLLECTION_GET_ENTITY'. 533 | endmethod. 534 | 535 | 536 | method USERCOLLECTION_GET_ENTITYSET. 537 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc 538 | EXPORTING 539 | textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented 540 | method = 'USERCOLLECTION_GET_ENTITYSET'. 541 | endmethod. 542 | 543 | 544 | method USERCOLLECTION_UPDATE_ENTITY. 545 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc 546 | EXPORTING 547 | textid = /iwbep/cx_mgw_not_impl_exc=>method_not_implemented 548 | method = 'USERCOLLECTION_UPDATE_ENTITY'. 549 | endmethod. 550 | ENDCLASS. 551 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_dpc.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ZGW_OPENAPI_TEST_DPC 7 | E 8 | Data Provider Base Class 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ZGW_OPENAPI_TEST_DPC 17 | USERCOLLECTION_CREATE_ENTITY 18 | E 19 | Related EntitySet Name: userCollection 20 | 21 | 22 | ZCL_ZGW_OPENAPI_TEST_DPC 23 | USERCOLLECTION_DELETE_ENTITY 24 | E 25 | Related EntitySet Name: userCollection 26 | 27 | 28 | ZCL_ZGW_OPENAPI_TEST_DPC 29 | USERCOLLECTION_GET_ENTITY 30 | E 31 | Related EntitySet Name: userCollection 32 | 33 | 34 | ZCL_ZGW_OPENAPI_TEST_DPC 35 | USERCOLLECTION_GET_ENTITYSET 36 | E 37 | Related EntitySet Name: userCollection 38 | 39 | 40 | ZCL_ZGW_OPENAPI_TEST_DPC 41 | USERCOLLECTION_UPDATE_ENTITY 42 | E 43 | Related EntitySet Name: userCollection 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_dpc_ext.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_zgw_openapi_test_dpc_ext DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_zgw_openapi_test_dpc 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | PROTECTED SECTION. 8 | 9 | METHODS usercollection_create_entity 10 | REDEFINITION . 11 | METHODS usercollection_delete_entity 12 | REDEFINITION . 13 | METHODS usercollection_get_entity 14 | REDEFINITION . 15 | METHODS usercollection_get_entityset 16 | REDEFINITION . 17 | METHODS usercollection_update_entity 18 | REDEFINITION . 19 | PRIVATE SECTION. 20 | ENDCLASS. 21 | 22 | 23 | 24 | CLASS ZCL_ZGW_OPENAPI_TEST_DPC_EXT IMPLEMENTATION. 25 | 26 | 27 | METHOD usercollection_create_entity. 28 | 29 | * Read supplied data and return it as an entity (simulate create) 30 | io_data_provider->read_entry_data( IMPORTING es_data = er_entity ). 31 | 32 | ENDMETHOD. 33 | 34 | 35 | METHOD usercollection_delete_entity. 36 | DATA: lt_keys TYPE /iwbep/t_mgw_tech_pairs, 37 | ls_key TYPE /iwbep/s_mgw_tech_pair, 38 | ls_user_addr TYPE user_addr, 39 | ls_user_addr_new TYPE user_addr, 40 | ls_message TYPE scx_t100key, 41 | lv_bname TYPE bname. 42 | 43 | * Read keys from request 44 | lt_keys = io_tech_request_context->get_keys( ). 45 | 46 | * Read user name from key table 47 | READ TABLE lt_keys INTO ls_key WITH KEY name = 'BNAME'. 48 | IF sy-subrc <> 0. 49 | ls_message-msgid = 'SY'. 50 | ls_message-msgno = '002'. 51 | ls_message-attr1 = 'No username provided'. 52 | 53 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 54 | EXPORTING 55 | textid = ls_message. 56 | ENDIF. 57 | 58 | lv_bname = ls_key-value. 59 | 60 | * Check if user exists 61 | SELECT SINGLE * FROM user_addr 62 | INTO @ls_user_addr 63 | WHERE bname = @lv_bname. 64 | 65 | IF sy-subrc <> 0. 66 | ls_message-msgid = 'SY'. 67 | ls_message-msgno = '002'. 68 | CONCATENATE `Username ` lv_bname ` doesn't exist` INTO ls_message-attr1. 69 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 70 | EXPORTING 71 | textid = ls_message. 72 | ENDIF. 73 | 74 | ENDMETHOD. 75 | 76 | 77 | METHOD usercollection_get_entity. 78 | 79 | * Read supplied user name 80 | READ TABLE it_key_tab INTO DATA(ls_key) WITH KEY name = 'Bname'. 81 | 82 | * Read data from database 83 | SELECT SINGLE * FROM user_addr 84 | INTO CORRESPONDING FIELDS OF @er_entity 85 | WHERE bname = @ls_key-value. 86 | 87 | ENDMETHOD. 88 | 89 | 90 | METHOD usercollection_get_entityset. 91 | DATA ls_user_select_option TYPE /iwbep/s_mgw_select_option. 92 | 93 | * Read select option (user name) 94 | READ TABLE it_filter_select_options INTO ls_user_select_option WITH KEY property = 'Bname'. 95 | 96 | * Read data from database 97 | SELECT * FROM user_addr 98 | INTO CORRESPONDING FIELDS OF TABLE @et_entityset 99 | WHERE bname IN @ls_user_select_option-select_options. 100 | 101 | ENDMETHOD. 102 | 103 | 104 | METHOD usercollection_update_entity. 105 | DATA: lt_keys TYPE /iwbep/t_mgw_tech_pairs, 106 | ls_key TYPE /iwbep/s_mgw_tech_pair, 107 | ls_user_addr TYPE user_addr, 108 | ls_user_addr_new TYPE user_addr, 109 | ls_message TYPE scx_t100key, 110 | lv_bname TYPE bname. 111 | 112 | * Read keys from request 113 | lt_keys = io_tech_request_context->get_keys( ). 114 | 115 | * Read user name from key table 116 | READ TABLE lt_keys INTO ls_key WITH KEY name = 'BNAME'. 117 | IF sy-subrc <> 0. 118 | ls_message-msgid = 'SY'. 119 | ls_message-msgno = '002'. 120 | ls_message-attr1 = 'No username provided'. 121 | 122 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 123 | EXPORTING 124 | textid = ls_message. 125 | ENDIF. 126 | 127 | lv_bname = ls_key-value. 128 | 129 | * Check if user exists 130 | SELECT SINGLE * FROM user_addr 131 | INTO @ls_user_addr 132 | WHERE bname = @lv_bname. 133 | 134 | IF sy-subrc <> 0. 135 | ls_message-msgid = 'SY'. 136 | ls_message-msgno = '002'. 137 | CONCATENATE `Username ` lv_bname ` doesn't exist` INTO ls_message-attr1. 138 | RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception 139 | EXPORTING 140 | textid = ls_message. 141 | ENDIF. 142 | 143 | * Read provided changes into entity (simulate update) 144 | io_data_provider->read_entry_data( IMPORTING es_data = er_entity ). 145 | 146 | ENDMETHOD. 147 | ENDCLASS. 148 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_dpc_ext.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ZGW_OPENAPI_TEST_DPC_EXT 7 | E 8 | Data Provider Secondary Class 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_mpc.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ZGW_OPENAPI_TEST_MPC definition 2 | public 3 | inheriting from /IWBEP/CL_MGW_PUSH_ABS_MODEL 4 | create public . 5 | 6 | public section. 7 | 8 | types: 9 | TS_USER type USER_ADDR . 10 | types: 11 | TT_USER type standard table of TS_USER . 12 | types: 13 | begin of ts_text_element, 14 | artifact_name type c length 40, " technical name 15 | artifact_type type c length 4, 16 | parent_artifact_name type c length 40, " technical name 17 | parent_artifact_type type c length 4, 18 | text_symbol type textpoolky, 19 | end of ts_text_element . 20 | types: 21 | tt_text_elements type standard table of ts_text_element with key text_symbol . 22 | 23 | constants GC_USER type /IWBEP/IF_MGW_MED_ODATA_TYPES=>TY_E_MED_ENTITY_NAME value 'user' ##NO_TEXT. 24 | 25 | methods LOAD_TEXT_ELEMENTS 26 | final 27 | returning 28 | value(RT_TEXT_ELEMENTS) type TT_TEXT_ELEMENTS 29 | raising 30 | /IWBEP/CX_MGW_MED_EXCEPTION . 31 | 32 | methods DEFINE 33 | redefinition . 34 | methods GET_LAST_MODIFIED 35 | redefinition . 36 | protected section. 37 | private section. 38 | 39 | methods DEFINE_USER 40 | raising 41 | /IWBEP/CX_MGW_MED_EXCEPTION . 42 | ENDCLASS. 43 | 44 | 45 | 46 | CLASS ZCL_ZGW_OPENAPI_TEST_MPC IMPLEMENTATION. 47 | 48 | 49 | method DEFINE. 50 | *&---------------------------------------------------------------------* 51 | *& Generated code for the MODEL PROVIDER BASE CLASS &* 52 | *& &* 53 | *& !!!NEVER MODIFY THIS CLASS. IN CASE YOU WANT TO CHANGE THE MODEL &* 54 | *& DO THIS IN THE MODEL PROVIDER SUBCLASS!!! &* 55 | *& &* 56 | *&---------------------------------------------------------------------* 57 | 58 | model->set_schema_namespace( 'ZGW_OPENAPI_TEST_SRV' ). 59 | 60 | define_user( ). 61 | endmethod. 62 | 63 | 64 | method DEFINE_USER. 65 | *&---------------------------------------------------------------------* 66 | *& Generated code for the MODEL PROVIDER BASE CLASS &* 67 | *& &* 68 | *& !!!NEVER MODIFY THIS CLASS. IN CASE YOU WANT TO CHANGE THE MODEL &* 69 | *& DO THIS IN THE MODEL PROVIDER SUBCLASS!!! &* 70 | *& &* 71 | *&---------------------------------------------------------------------* 72 | 73 | 74 | data: 75 | lo_annotation type ref to /iwbep/if_mgw_odata_annotation, "#EC NEEDED 76 | lo_entity_type type ref to /iwbep/if_mgw_odata_entity_typ, "#EC NEEDED 77 | lo_complex_type type ref to /iwbep/if_mgw_odata_cmplx_type, "#EC NEEDED 78 | lo_property type ref to /iwbep/if_mgw_odata_property, "#EC NEEDED 79 | lo_entity_set type ref to /iwbep/if_mgw_odata_entity_set. "#EC NEEDED 80 | 81 | *********************************************************************************************************************************** 82 | * ENTITY - user 83 | *********************************************************************************************************************************** 84 | 85 | lo_entity_type = model->create_entity_type( iv_entity_type_name = 'user' iv_def_entity_set = abap_false ). "#EC NOTEXT 86 | 87 | *********************************************************************************************************************************** 88 | *Properties 89 | *********************************************************************************************************************************** 90 | 91 | lo_property = lo_entity_type->create_property( iv_property_name = 'Bname' iv_abap_fieldname = 'BNAME' ). "#EC NOTEXT 92 | lo_property->set_is_key( ). 93 | lo_property->set_type_edm_string( ). 94 | lo_property->set_maxlength( iv_max_length = 12 ). "#EC NOTEXT 95 | lo_property->set_creatable( abap_true ). 96 | lo_property->set_updatable( abap_true ). 97 | lo_property->set_sortable( abap_false ). 98 | lo_property->set_nullable( abap_false ). 99 | lo_property->set_filterable( abap_false ). 100 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 101 | EXPORTING 102 | iv_key = 'unicode' 103 | iv_value = 'false' ). 104 | lo_property = lo_entity_type->create_property( iv_property_name = 'NameFirst' iv_abap_fieldname = 'NAME_FIRST' ). "#EC NOTEXT 105 | lo_property->set_type_edm_string( ). 106 | lo_property->set_maxlength( iv_max_length = 40 ). "#EC NOTEXT 107 | lo_property->set_creatable( abap_true ). 108 | lo_property->set_updatable( abap_true ). 109 | lo_property->set_sortable( abap_false ). 110 | lo_property->set_nullable( abap_false ). 111 | lo_property->set_filterable( abap_false ). 112 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 113 | EXPORTING 114 | iv_key = 'unicode' 115 | iv_value = 'false' ). 116 | lo_property = lo_entity_type->create_property( iv_property_name = 'NameLast' iv_abap_fieldname = 'NAME_LAST' ). "#EC NOTEXT 117 | lo_property->set_type_edm_string( ). 118 | lo_property->set_maxlength( iv_max_length = 40 ). "#EC NOTEXT 119 | lo_property->set_creatable( abap_true ). 120 | lo_property->set_updatable( abap_true ). 121 | lo_property->set_sortable( abap_false ). 122 | lo_property->set_nullable( abap_false ). 123 | lo_property->set_filterable( abap_false ). 124 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 125 | EXPORTING 126 | iv_key = 'unicode' 127 | iv_value = 'false' ). 128 | lo_property = lo_entity_type->create_property( iv_property_name = 'NameTextc' iv_abap_fieldname = 'NAME_TEXTC' ). "#EC NOTEXT 129 | lo_property->set_type_edm_string( ). 130 | lo_property->set_maxlength( iv_max_length = 80 ). "#EC NOTEXT 131 | lo_property->set_creatable( abap_true ). 132 | lo_property->set_updatable( abap_true ). 133 | lo_property->set_sortable( abap_false ). 134 | lo_property->set_nullable( abap_false ). 135 | lo_property->set_filterable( abap_false ). 136 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 137 | EXPORTING 138 | iv_key = 'unicode' 139 | iv_value = 'false' ). 140 | lo_property = lo_entity_type->create_property( iv_property_name = 'TelExtens' iv_abap_fieldname = 'TEL_EXTENS' ). "#EC NOTEXT 141 | lo_property->set_type_edm_string( ). 142 | lo_property->set_maxlength( iv_max_length = 10 ). "#EC NOTEXT 143 | lo_property->set_creatable( abap_true ). 144 | lo_property->set_updatable( abap_true ). 145 | lo_property->set_sortable( abap_false ). 146 | lo_property->set_nullable( abap_false ). 147 | lo_property->set_filterable( abap_false ). 148 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 149 | EXPORTING 150 | iv_key = 'unicode' 151 | iv_value = 'false' ). 152 | lo_property = lo_entity_type->create_property( iv_property_name = 'Kostl' iv_abap_fieldname = 'KOSTL' ). "#EC NOTEXT 153 | lo_property->set_type_edm_string( ). 154 | lo_property->set_maxlength( iv_max_length = 8 ). "#EC NOTEXT 155 | lo_property->set_creatable( abap_true ). 156 | lo_property->set_updatable( abap_true ). 157 | lo_property->set_sortable( abap_false ). 158 | lo_property->set_nullable( abap_false ). 159 | lo_property->set_filterable( abap_false ). 160 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 161 | EXPORTING 162 | iv_key = 'unicode' 163 | iv_value = 'false' ). 164 | lo_property = lo_entity_type->create_property( iv_property_name = 'Building' iv_abap_fieldname = 'BUILDING' ). "#EC NOTEXT 165 | lo_property->set_type_edm_string( ). 166 | lo_property->set_maxlength( iv_max_length = 10 ). "#EC NOTEXT 167 | lo_property->set_creatable( abap_true ). 168 | lo_property->set_updatable( abap_true ). 169 | lo_property->set_sortable( abap_false ). 170 | lo_property->set_nullable( abap_false ). 171 | lo_property->set_filterable( abap_false ). 172 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 173 | EXPORTING 174 | iv_key = 'unicode' 175 | iv_value = 'false' ). 176 | lo_property = lo_entity_type->create_property( iv_property_name = 'Roomnumber' iv_abap_fieldname = 'ROOMNUMBER' ). "#EC NOTEXT 177 | lo_property->set_type_edm_string( ). 178 | lo_property->set_maxlength( iv_max_length = 10 ). "#EC NOTEXT 179 | lo_property->set_creatable( abap_true ). 180 | lo_property->set_updatable( abap_true ). 181 | lo_property->set_sortable( abap_false ). 182 | lo_property->set_nullable( abap_false ). 183 | lo_property->set_filterable( abap_false ). 184 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 185 | EXPORTING 186 | iv_key = 'unicode' 187 | iv_value = 'false' ). 188 | lo_property = lo_entity_type->create_property( iv_property_name = 'Department' iv_abap_fieldname = 'DEPARTMENT' ). "#EC NOTEXT 189 | lo_property->set_type_edm_string( ). 190 | lo_property->set_maxlength( iv_max_length = 40 ). "#EC NOTEXT 191 | lo_property->set_creatable( abap_true ). 192 | lo_property->set_updatable( abap_true ). 193 | lo_property->set_sortable( abap_false ). 194 | lo_property->set_nullable( abap_false ). 195 | lo_property->set_filterable( abap_false ). 196 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 197 | EXPORTING 198 | iv_key = 'unicode' 199 | iv_value = 'false' ). 200 | lo_property = lo_entity_type->create_property( iv_property_name = 'InhouseMl' iv_abap_fieldname = 'INHOUSE_ML' ). "#EC NOTEXT 201 | lo_property->set_type_edm_string( ). 202 | lo_property->set_maxlength( iv_max_length = 10 ). "#EC NOTEXT 203 | lo_property->set_creatable( abap_true ). 204 | lo_property->set_updatable( abap_true ). 205 | lo_property->set_sortable( abap_false ). 206 | lo_property->set_nullable( abap_false ). 207 | lo_property->set_filterable( abap_false ). 208 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 209 | EXPORTING 210 | iv_key = 'unicode' 211 | iv_value = 'false' ). 212 | lo_property = lo_entity_type->create_property( iv_property_name = 'Name1' iv_abap_fieldname = 'NAME1' ). "#EC NOTEXT 213 | lo_property->set_type_edm_string( ). 214 | lo_property->set_maxlength( iv_max_length = 40 ). "#EC NOTEXT 215 | lo_property->set_creatable( abap_true ). 216 | lo_property->set_updatable( abap_true ). 217 | lo_property->set_sortable( abap_false ). 218 | lo_property->set_nullable( abap_false ). 219 | lo_property->set_filterable( abap_false ). 220 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 221 | EXPORTING 222 | iv_key = 'unicode' 223 | iv_value = 'false' ). 224 | lo_property = lo_entity_type->create_property( iv_property_name = 'City1' iv_abap_fieldname = 'CITY1' ). "#EC NOTEXT 225 | lo_property->set_type_edm_string( ). 226 | lo_property->set_maxlength( iv_max_length = 40 ). "#EC NOTEXT 227 | lo_property->set_creatable( abap_true ). 228 | lo_property->set_updatable( abap_true ). 229 | lo_property->set_sortable( abap_false ). 230 | lo_property->set_nullable( abap_false ). 231 | lo_property->set_filterable( abap_false ). 232 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 233 | EXPORTING 234 | iv_key = 'unicode' 235 | iv_value = 'false' ). 236 | lo_property = lo_entity_type->create_property( iv_property_name = 'PostCode1' iv_abap_fieldname = 'POST_CODE1' ). "#EC NOTEXT 237 | lo_property->set_type_edm_string( ). 238 | lo_property->set_maxlength( iv_max_length = 10 ). "#EC NOTEXT 239 | lo_property->set_creatable( abap_true ). 240 | lo_property->set_updatable( abap_true ). 241 | lo_property->set_sortable( abap_false ). 242 | lo_property->set_nullable( abap_false ). 243 | lo_property->set_filterable( abap_false ). 244 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 245 | EXPORTING 246 | iv_key = 'unicode' 247 | iv_value = 'false' ). 248 | lo_property = lo_entity_type->create_property( iv_property_name = 'McNamefir' iv_abap_fieldname = 'MC_NAMEFIR' ). "#EC NOTEXT 249 | lo_property->set_type_edm_string( ). 250 | lo_property->set_maxlength( iv_max_length = 25 ). "#EC NOTEXT 251 | lo_property->set_creatable( abap_true ). 252 | lo_property->set_updatable( abap_true ). 253 | lo_property->set_sortable( abap_false ). 254 | lo_property->set_nullable( abap_false ). 255 | lo_property->set_filterable( abap_false ). 256 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 257 | EXPORTING 258 | iv_key = 'unicode' 259 | iv_value = 'false' ). 260 | lo_property = lo_entity_type->create_property( iv_property_name = 'McNamelas' iv_abap_fieldname = 'MC_NAMELAS' ). "#EC NOTEXT 261 | lo_property->set_type_edm_string( ). 262 | lo_property->set_maxlength( iv_max_length = 25 ). "#EC NOTEXT 263 | lo_property->set_creatable( abap_true ). 264 | lo_property->set_updatable( abap_true ). 265 | lo_property->set_sortable( abap_false ). 266 | lo_property->set_nullable( abap_false ). 267 | lo_property->set_filterable( abap_false ). 268 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 269 | EXPORTING 270 | iv_key = 'unicode' 271 | iv_value = 'false' ). 272 | lo_property = lo_entity_type->create_property( iv_property_name = 'McName1' iv_abap_fieldname = 'MC_NAME1' ). "#EC NOTEXT 273 | lo_property->set_type_edm_string( ). 274 | lo_property->set_maxlength( iv_max_length = 25 ). "#EC NOTEXT 275 | lo_property->set_creatable( abap_true ). 276 | lo_property->set_updatable( abap_true ). 277 | lo_property->set_sortable( abap_false ). 278 | lo_property->set_nullable( abap_false ). 279 | lo_property->set_filterable( abap_false ). 280 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 281 | EXPORTING 282 | iv_key = 'unicode' 283 | iv_value = 'false' ). 284 | lo_property = lo_entity_type->create_property( iv_property_name = 'McCity1' iv_abap_fieldname = 'MC_CITY1' ). "#EC NOTEXT 285 | lo_property->set_type_edm_string( ). 286 | lo_property->set_maxlength( iv_max_length = 25 ). "#EC NOTEXT 287 | lo_property->set_creatable( abap_true ). 288 | lo_property->set_updatable( abap_true ). 289 | lo_property->set_sortable( abap_false ). 290 | lo_property->set_nullable( abap_false ). 291 | lo_property->set_filterable( abap_false ). 292 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 293 | EXPORTING 294 | iv_key = 'unicode' 295 | iv_value = 'false' ). 296 | lo_property = lo_entity_type->create_property( iv_property_name = 'Company' iv_abap_fieldname = 'COMPANY' ). "#EC NOTEXT 297 | lo_property->set_type_edm_string( ). 298 | lo_property->set_maxlength( iv_max_length = 42 ). "#EC NOTEXT 299 | lo_property->set_creatable( abap_true ). 300 | lo_property->set_updatable( abap_true ). 301 | lo_property->set_sortable( abap_false ). 302 | lo_property->set_nullable( abap_false ). 303 | lo_property->set_filterable( abap_false ). 304 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 305 | EXPORTING 306 | iv_key = 'unicode' 307 | iv_value = 'false' ). 308 | lo_property = lo_entity_type->create_property( iv_property_name = 'Idadtype' iv_abap_fieldname = 'IDADTYPE' ). "#EC NOTEXT 309 | lo_property->set_type_edm_string( ). 310 | lo_property->set_maxlength( iv_max_length = 2 ). "#EC NOTEXT 311 | lo_property->set_creatable( abap_true ). 312 | lo_property->set_updatable( abap_true ). 313 | lo_property->set_sortable( abap_false ). 314 | lo_property->set_nullable( abap_false ). 315 | lo_property->set_filterable( abap_false ). 316 | lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( 'sap' )->add( 317 | EXPORTING 318 | iv_key = 'unicode' 319 | iv_value = 'false' ). 320 | 321 | lo_entity_type->bind_structure( iv_structure_name = 'USER_ADDR' 322 | iv_bind_conversions = 'X' ). "#EC NOTEXT 323 | 324 | 325 | *********************************************************************************************************************************** 326 | * ENTITY SETS 327 | *********************************************************************************************************************************** 328 | lo_entity_set = lo_entity_type->create_entity_set( 'userCollection' ). "#EC NOTEXT 329 | 330 | lo_entity_set->set_creatable( abap_true ). 331 | lo_entity_set->set_updatable( abap_true ). 332 | lo_entity_set->set_deletable( abap_true ). 333 | 334 | lo_entity_set->set_pageable( abap_false ). 335 | lo_entity_set->set_addressable( abap_true ). 336 | lo_entity_set->set_has_ftxt_search( abap_false ). 337 | lo_entity_set->set_subscribable( abap_false ). 338 | lo_entity_set->set_filter_required( abap_false ). 339 | endmethod. 340 | 341 | 342 | method GET_LAST_MODIFIED. 343 | *&---------------------------------------------------------------------* 344 | *& Generated code for the MODEL PROVIDER BASE CLASS &* 345 | *& &* 346 | *& !!!NEVER MODIFY THIS CLASS. IN CASE YOU WANT TO CHANGE THE MODEL &* 347 | *& DO THIS IN THE MODEL PROVIDER SUBCLASS!!! &* 348 | *& &* 349 | *&---------------------------------------------------------------------* 350 | 351 | 352 | CONSTANTS: lc_gen_date_time TYPE timestamp VALUE '20190819185019'. "#EC NOTEXT 353 | rv_last_modified = super->get_last_modified( ). 354 | IF rv_last_modified LT lc_gen_date_time. 355 | rv_last_modified = lc_gen_date_time. 356 | ENDIF. 357 | endmethod. 358 | 359 | 360 | method LOAD_TEXT_ELEMENTS. 361 | *&---------------------------------------------------------------------* 362 | *& Generated code for the MODEL PROVIDER BASE CLASS &* 363 | *& &* 364 | *& !!!NEVER MODIFY THIS CLASS. IN CASE YOU WANT TO CHANGE THE MODEL &* 365 | *& DO THIS IN THE MODEL PROVIDER SUBCLASS!!! &* 366 | *& &* 367 | *&---------------------------------------------------------------------* 368 | 369 | 370 | DATA: 371 | ls_text_element TYPE ts_text_element. "#EC NEEDED 372 | CLEAR ls_text_element. 373 | endmethod. 374 | ENDCLASS. 375 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_mpc.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ZGW_OPENAPI_TEST_MPC 7 | E 8 | ZCL_ZGW_OPENAPI_TEST_MPC 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | ZCL_ZGW_OPENAPI_TEST_MPC 17 | DEFINE_USER 18 | E 19 | DEFINE_USER 20 | 21 | 22 | ZCL_ZGW_OPENAPI_TEST_MPC 23 | LOAD_TEXT_ELEMENTS 24 | E 25 | LOAD_TEXT_ELEMENTS 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_mpc_ext.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_zgw_openapi_test_mpc_ext DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_zgw_openapi_test_mpc 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | PROTECTED SECTION. 8 | PRIVATE SECTION. 9 | ENDCLASS. 10 | 11 | 12 | 13 | CLASS ZCL_ZGW_OPENAPI_TEST_MPC_EXT IMPLEMENTATION. 14 | ENDCLASS. 15 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zcl_zgw_openapi_test_mpc_ext.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ZGW_OPENAPI_TEST_MPC_EXT 7 | E 8 | ZCL_ZGW_OPENAPI_TEST_MPC_EXT 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zgw_openapi_test.iwpr.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <_-IWBEP_-I_SBD_AT> 6 | <_-IWBEP_-I_SBD_AT> 7 | ZGW_OPENAPI_TEST 8 | BnlGfkIkHtmw1C4JOjOQbg== 9 | BnlGfkIkHtmw1Cu21DVQbQ== 10 | /IWBEP/CORE 11 | PROJ 12 | GENERATED_METHODS_RDS 13 | V2_RDS 14 | XML 15 | PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48YXN4OmFiYXAgdmVyc2lvbj0i 16 | MS4wIiB4bWxuczphc3g9Imh0dHA6Ly93d3cuc2FwLmNvbS9hYmFweG1sIj48YXN4OnZhbHVlcz48 17 | R0VOLz48L2FzeDp2YWx1ZXM+PC9hc3g6YWJhcD4= 18 | 19 | 20 | <_-IWBEP_-I_SBD_DS> 21 | <_-IWBEP_-I_SBD_DS> 22 | ZGW_OPENAPI_TEST 23 | BnlGfkIkHtmw1Cu21DwQbQ== 24 | BnlGfkIkHtmw1Cu21DvwbQ== 25 | USER_ADDR 26 | 5 27 | 28 | 29 | <_-IWBEP_-I_SBD_DST> 30 | <_-IWBEP_-I_SBD_DST> 31 | E 32 | ZGW_OPENAPI_TEST 33 | BnlGfkIkHtmw1Cu21DwQbQ== 34 | 35 | 36 | <_-IWBEP_-I_SBD_GA> 37 | <_-IWBEP_-I_SBD_GA> 38 | ZGW_OPENAPI_TEST 39 | BnlGfkIkHtmw1C4JOjPwbg== 40 | GJKLAPS 41 | 20190819165022.118674 42 | ZCL_ZGW_OPENAPI_TEST_MPC 43 | R3TR 44 | CLAS 45 | ZCL_ZGW_OPENAPI_TEST_MPC 46 | MPCB 47 | 48 | <_-IWBEP_-I_SBD_GA> 49 | ZGW_OPENAPI_TEST 50 | BnlGfkIkHtmw1C4JOjQQbg== 51 | GJKLAPS 52 | 20190819165022.11868 53 | ZCL_ZGW_OPENAPI_TEST_MPC_EXT 54 | R3TR 55 | CLAS 56 | ZCL_ZGW_OPENAPI_TEST_MPC_EXT 57 | MPCS 58 | 59 | <_-IWBEP_-I_SBD_GA> 60 | ZGW_OPENAPI_TEST 61 | BnlGfkIkHtmw1C4JOjQwbg== 62 | GJKLAPS 63 | 20190819165024.108906 64 | ZCL_ZGW_OPENAPI_TEST_DPC 65 | R3TR 66 | CLAS 67 | ZCL_ZGW_OPENAPI_TEST_DPC 68 | DPCB 69 | 70 | <_-IWBEP_-I_SBD_GA> 71 | ZGW_OPENAPI_TEST 72 | BnlGfkIkHtmw1C4JOjRQbg== 73 | GJKLAPS 74 | 20190819165024.969052 75 | ZCL_ZGW_OPENAPI_TEST_DPC_EXT 76 | R3TR 77 | CLAS 78 | ZCL_ZGW_OPENAPI_TEST_DPC_EXT 79 | DPCS 80 | 81 | <_-IWBEP_-I_SBD_GA> 82 | ZGW_OPENAPI_TEST 83 | BnlGfkIkHtmw1C4JOjRwbg== 84 | GJKLAPS 85 | 20190819165025.352081 86 | ZGW_OPENAPI_TEST_MDL 87 | R3TR 88 | IWMO 89 | ZGW_OPENAPI_TEST_MDL 90 | MDL 91 | 92 | <_-IWBEP_-I_SBD_GA> 93 | ZGW_OPENAPI_TEST 94 | BnlGfkIkHtmw1C4JOjSQbg== 95 | GJKLAPS 96 | 20190819165025.352087 97 | ZGW_OPENAPI_TEST_SRV 98 | R3TR 99 | IWSV 100 | ZGW_OPENAPI_TEST_SRV 101 | SRV 102 | 103 | 104 | <_-IWBEP_-I_SBD_GAT> 105 | <_-IWBEP_-I_SBD_GAT> 106 | E 107 | ZGW_OPENAPI_TEST 108 | BnlGfkIkHtmw1C4JOjPwbg== 109 | 110 | <_-IWBEP_-I_SBD_GAT> 111 | E 112 | ZGW_OPENAPI_TEST 113 | BnlGfkIkHtmw1C4JOjQQbg== 114 | 115 | <_-IWBEP_-I_SBD_GAT> 116 | E 117 | ZGW_OPENAPI_TEST 118 | BnlGfkIkHtmw1C4JOjQwbg== 119 | 120 | <_-IWBEP_-I_SBD_GAT> 121 | E 122 | ZGW_OPENAPI_TEST 123 | BnlGfkIkHtmw1C4JOjRQbg== 124 | 125 | <_-IWBEP_-I_SBD_GAT> 126 | E 127 | ZGW_OPENAPI_TEST 128 | BnlGfkIkHtmw1C4JOjRwbg== 129 | 130 | <_-IWBEP_-I_SBD_GAT> 131 | E 132 | ZGW_OPENAPI_TEST 133 | BnlGfkIkHtmw1C4JOjSQbg== 134 | 135 | 136 | <_-IWBEP_-I_SBD_MD> 137 | <_-IWBEP_-I_SBD_MD> 138 | ZGW_OPENAPI_TEST 139 | BnlGfkIkHtmw1Cu21DkwbQ== 140 | BnlGfkIkHtmw1Cu21DVQbQ== 141 | /IWBEP/CORE 142 | PROJ 143 | ZGW_OPENAPI_TEST_MDL 144 | 0001 145 | ZCL_ZGW_OPENAPI_TEST_MPC_EXT 146 | S 147 | ZGW_OPENAPI_TEST_SRV 148 | 149 | 150 | <_-IWBEP_-I_SBD_MDT> 151 | <_-IWBEP_-I_SBD_MDT> 152 | E 153 | ZGW_OPENAPI_TEST 154 | BnlGfkIkHtmw1Cu21DkwbQ== 155 | 156 | 157 | <_-IWBEP_-I_SBD_NOI> 158 | <_-IWBEP_-I_SBD_NOI> 159 | ZGW_OPENAPI_TEST 160 | BnlGfkIkHtmw1Cu21DVQbQ== 161 | 162 | <_-IWBEP_-I_SBD_NOI> 163 | ZGW_OPENAPI_TEST 164 | BnlGfkIkHtmw1Cu21DkwbQ== 165 | 166 | <_-IWBEP_-I_SBD_NOI> 167 | ZGW_OPENAPI_TEST 168 | BnlGfkIkHtmw1Cu21DlQbQ== 169 | 170 | <_-IWBEP_-I_SBD_NOI> 171 | ZGW_OPENAPI_TEST 172 | BnlGfkIkHtmw1Cu21DlwbQ== 173 | 174 | <_-IWBEP_-I_SBD_NOI> 175 | ZGW_OPENAPI_TEST 176 | BnlGfkIkHtmw1Cu21DmQbQ== 177 | 178 | <_-IWBEP_-I_SBD_NOI> 179 | ZGW_OPENAPI_TEST 180 | BnlGfkIkHtmw1Cu21DmwbQ== 181 | 182 | <_-IWBEP_-I_SBD_NOI> 183 | ZGW_OPENAPI_TEST 184 | BnlGfkIkHtmw1Cu21DnQbQ== 185 | 186 | <_-IWBEP_-I_SBD_NOI> 187 | ZGW_OPENAPI_TEST 188 | BnlGfkIkHtmw1Cu21DnwbQ== 189 | 190 | <_-IWBEP_-I_SBD_NOI> 191 | ZGW_OPENAPI_TEST 192 | BnlGfkIkHtmw1Cu21DoQbQ== 193 | 194 | <_-IWBEP_-I_SBD_NOI> 195 | ZGW_OPENAPI_TEST 196 | BnlGfkIkHtmw1Cu21DowbQ== 197 | 198 | <_-IWBEP_-I_SBD_NOI> 199 | ZGW_OPENAPI_TEST 200 | BnlGfkIkHtmw1Cu21DpQbQ== 201 | 202 | <_-IWBEP_-I_SBD_NOI> 203 | ZGW_OPENAPI_TEST 204 | BnlGfkIkHtmw1Cu21DpwbQ== 205 | 206 | <_-IWBEP_-I_SBD_NOI> 207 | ZGW_OPENAPI_TEST 208 | BnlGfkIkHtmw1Cu21DqQbQ== 209 | 210 | <_-IWBEP_-I_SBD_NOI> 211 | ZGW_OPENAPI_TEST 212 | BnlGfkIkHtmw1Cu21DqwbQ== 213 | 214 | <_-IWBEP_-I_SBD_NOI> 215 | ZGW_OPENAPI_TEST 216 | BnlGfkIkHtmw1Cu21DrQbQ== 217 | 218 | <_-IWBEP_-I_SBD_NOI> 219 | ZGW_OPENAPI_TEST 220 | BnlGfkIkHtmw1Cu21DrwbQ== 221 | 222 | <_-IWBEP_-I_SBD_NOI> 223 | ZGW_OPENAPI_TEST 224 | BnlGfkIkHtmw1Cu21DsQbQ== 225 | 226 | <_-IWBEP_-I_SBD_NOI> 227 | ZGW_OPENAPI_TEST 228 | BnlGfkIkHtmw1Cu21DswbQ== 229 | 230 | <_-IWBEP_-I_SBD_NOI> 231 | ZGW_OPENAPI_TEST 232 | BnlGfkIkHtmw1Cu21DtQbQ== 233 | 234 | <_-IWBEP_-I_SBD_NOI> 235 | ZGW_OPENAPI_TEST 236 | BnlGfkIkHtmw1Cu21DtwbQ== 237 | 238 | <_-IWBEP_-I_SBD_NOI> 239 | ZGW_OPENAPI_TEST 240 | BnlGfkIkHtmw1Cu21DuQbQ== 241 | 242 | <_-IWBEP_-I_SBD_NOI> 243 | ZGW_OPENAPI_TEST 244 | BnlGfkIkHtmw1Cu21DuwbQ== 245 | 246 | <_-IWBEP_-I_SBD_NOI> 247 | ZGW_OPENAPI_TEST 248 | BnlGfkIkHtmw1Cu21DvQbQ== 249 | 250 | <_-IWBEP_-I_SBD_NOI> 251 | ZGW_OPENAPI_TEST 252 | BnlGfkIkHtmw1Cu21DvwbQ== 253 | 254 | <_-IWBEP_-I_SBD_NOI> 255 | ZGW_OPENAPI_TEST 256 | BnlGfkIkHtmw1Cu21DwQbQ== 257 | 258 | <_-IWBEP_-I_SBD_NOI> 259 | ZGW_OPENAPI_TEST 260 | BnlGfkIkHtmw1Cu21DwwbQ== 261 | 262 | <_-IWBEP_-I_SBD_NOI> 263 | ZGW_OPENAPI_TEST 264 | BnlGfkIkHtmw1Cu21DxQbQ== 265 | 266 | <_-IWBEP_-I_SBD_NOI> 267 | ZGW_OPENAPI_TEST 268 | BnlGfkIkHtmw1Cu21DxwbQ== 269 | 270 | <_-IWBEP_-I_SBD_NOI> 271 | ZGW_OPENAPI_TEST 272 | BnlGfkIkHtmw1Cu21DyQbQ== 273 | 274 | <_-IWBEP_-I_SBD_NOI> 275 | ZGW_OPENAPI_TEST 276 | BnlGfkIkHtmw1Cu21DywbQ== 277 | 278 | <_-IWBEP_-I_SBD_NOI> 279 | ZGW_OPENAPI_TEST 280 | BnlGfkIkHtmw1Cu21DzQbQ== 281 | 282 | <_-IWBEP_-I_SBD_NOI> 283 | ZGW_OPENAPI_TEST 284 | BnlGfkIkHtmw1C4JOjOQbg== 285 | 286 | <_-IWBEP_-I_SBD_NOI> 287 | ZGW_OPENAPI_TEST 288 | BnlGfkIkHtmw1C4JOjPwbg== 289 | 290 | <_-IWBEP_-I_SBD_NOI> 291 | ZGW_OPENAPI_TEST 292 | BnlGfkIkHtmw1C4JOjQQbg== 293 | 294 | <_-IWBEP_-I_SBD_NOI> 295 | ZGW_OPENAPI_TEST 296 | BnlGfkIkHtmw1C4JOjQwbg== 297 | 298 | <_-IWBEP_-I_SBD_NOI> 299 | ZGW_OPENAPI_TEST 300 | BnlGfkIkHtmw1C4JOjRQbg== 301 | 302 | <_-IWBEP_-I_SBD_NOI> 303 | ZGW_OPENAPI_TEST 304 | BnlGfkIkHtmw1C4JOjRwbg== 305 | 306 | <_-IWBEP_-I_SBD_NOI> 307 | ZGW_OPENAPI_TEST 308 | BnlGfkIkHtmw1C4JOjSQbg== 309 | 310 | 311 | <_-IWBEP_-I_SBD_OP> 312 | <_-IWBEP_-I_SBD_OP> 313 | ZGW_OPENAPI_TEST 314 | BnlGfkIkHtmw1Cu21DxQbQ== 315 | BnlGfkIkHtmw1Cu21DwwbQ== 316 | Create 317 | C 318 | USERCOLLECTION_CREATE_ENTITY 319 | 320 | <_-IWBEP_-I_SBD_OP> 321 | ZGW_OPENAPI_TEST 322 | BnlGfkIkHtmw1Cu21DxwbQ== 323 | BnlGfkIkHtmw1Cu21DwwbQ== 324 | GetEntity (Read) 325 | R 326 | USERCOLLECTION_GET_ENTITY 327 | 328 | <_-IWBEP_-I_SBD_OP> 329 | ZGW_OPENAPI_TEST 330 | BnlGfkIkHtmw1Cu21DyQbQ== 331 | BnlGfkIkHtmw1Cu21DwwbQ== 332 | Update 333 | U 334 | USERCOLLECTION_UPDATE_ENTITY 335 | 336 | <_-IWBEP_-I_SBD_OP> 337 | ZGW_OPENAPI_TEST 338 | BnlGfkIkHtmw1Cu21DywbQ== 339 | BnlGfkIkHtmw1Cu21DwwbQ== 340 | Delete 341 | D 342 | USERCOLLECTION_DELETE_ENTITY 343 | 344 | <_-IWBEP_-I_SBD_OP> 345 | ZGW_OPENAPI_TEST 346 | BnlGfkIkHtmw1Cu21DzQbQ== 347 | BnlGfkIkHtmw1Cu21DwwbQ== 348 | GetEntitySet (Query) 349 | Q 350 | USERCOLLECTION_GET_ENTITYSET 351 | 352 | 353 | <_-IWBEP_-I_SBD_OPT> 354 | <_-IWBEP_-I_SBD_OPT> 355 | E 356 | ZGW_OPENAPI_TEST 357 | BnlGfkIkHtmw1Cu21DxQbQ== 358 | 359 | <_-IWBEP_-I_SBD_OPT> 360 | E 361 | ZGW_OPENAPI_TEST 362 | BnlGfkIkHtmw1Cu21DxwbQ== 363 | 364 | <_-IWBEP_-I_SBD_OPT> 365 | E 366 | ZGW_OPENAPI_TEST 367 | BnlGfkIkHtmw1Cu21DyQbQ== 368 | 369 | <_-IWBEP_-I_SBD_OPT> 370 | E 371 | ZGW_OPENAPI_TEST 372 | BnlGfkIkHtmw1Cu21DywbQ== 373 | 374 | <_-IWBEP_-I_SBD_OPT> 375 | E 376 | ZGW_OPENAPI_TEST 377 | BnlGfkIkHtmw1Cu21DzQbQ== 378 | 379 | 380 | <_-IWBEP_-I_SBD_PR> 381 | <_-IWBEP_-I_SBD_PR> 382 | ZGW_OPENAPI_TEST 383 | BnlGfkIkHtmw1Cu21DVQbQ== 384 | GJKLAPS 385 | 20190819164952.929945 386 | GJKLAPS 387 | 20190819165025.360257 388 | BnlGfkIkHtmw1C4JOjSwbg== 389 | /IWBEP/GEN 390 | 0001 391 | 0001 392 | 1 393 | 394 | 395 | <_-IWBEP_-I_SBD_PRT> 396 | <_-IWBEP_-I_SBD_PRT> 397 | ZGW_OPENAPI_TEST 398 | E 399 | OpenAPI integration test service 400 | 401 | 402 | <_-IWBEP_-I_SBD_SE> 403 | <_-IWBEP_-I_SBD_SE> 404 | ZGW_OPENAPI_TEST 405 | BnlGfkIkHtmw1Cu21DwwbQ== 406 | BnlGfkIkHtmw1Cu21DvwbQ== 407 | userCollection 408 | BnlGfkIkHtmw1Cu21DlQbQ== 409 | 410 | 411 | <_-IWBEP_-I_SBD_SET> 412 | <_-IWBEP_-I_SBD_SET> 413 | E 414 | ZGW_OPENAPI_TEST 415 | BnlGfkIkHtmw1Cu21DwwbQ== 416 | 417 | 418 | <_-IWBEP_-I_SBD_SV> 419 | <_-IWBEP_-I_SBD_SV> 420 | ZGW_OPENAPI_TEST 421 | BnlGfkIkHtmw1Cu21DvwbQ== 422 | ZGW_OPENAPI_TEST_SRV 423 | 0001 424 | ZCL_ZGW_OPENAPI_TEST_DPC_EXT 425 | ZGW_OPENAPI_TEST_SRV 426 | 427 | 428 | <_-IWBEP_-I_SBD_SVT> 429 | <_-IWBEP_-I_SBD_SVT> 430 | E 431 | ZGW_OPENAPI_TEST 432 | BnlGfkIkHtmw1Cu21DvwbQ== 433 | 434 | 435 | <_-IWBEP_-I_SBO_ES> 436 | <_-IWBEP_-I_SBO_ES> 437 | ZGW_OPENAPI_TEST 438 | BnlGfkIkHtmw1Cu21DlQbQ== 439 | BnlGfkIkHtmw1Cu21DkwbQ== 440 | userCollection 441 | BnlGfkIkHtmw1Cu21DlwbQ== 442 | X 443 | X 444 | X 445 | X 446 | T 447 | USERCOLLECTION 448 | X 449 | X 450 | 451 | 452 | <_-IWBEP_-I_SBO_EST> 453 | <_-IWBEP_-I_SBO_EST> 454 | E 455 | ZGW_OPENAPI_TEST 456 | BnlGfkIkHtmw1Cu21DlQbQ== 457 | 458 | 459 | <_-IWBEP_-I_SBO_ET> 460 | <_-IWBEP_-I_SBO_ET> 461 | ZGW_OPENAPI_TEST 462 | BnlGfkIkHtmw1Cu21DlwbQ== 463 | user 464 | BnlGfkIkHtmw1Cu21DkwbQ== 465 | T 466 | USER_ADDR 467 | USER 468 | X 469 | X 470 | X 471 | X 472 | X 473 | 474 | 475 | <_-IWBEP_-I_SBO_ETT> 476 | <_-IWBEP_-I_SBO_ETT> 477 | E 478 | ZGW_OPENAPI_TEST 479 | BnlGfkIkHtmw1Cu21DlwbQ== 480 | 481 | 482 | <_-IWBEP_-I_SBO_PR> 483 | <_-IWBEP_-I_SBO_PR> 484 | ZGW_OPENAPI_TEST 485 | BnlGfkIkHtmw1Cu21DmQbQ== 486 | BnlGfkIkHtmw1Cu21DlwbQ== 487 | Bname 488 | X 489 | X 490 | 12 491 | Edm.String 492 | X 493 | T 494 | BNAME 495 | X 496 | 1 497 | X 498 | 499 | <_-IWBEP_-I_SBO_PR> 500 | ZGW_OPENAPI_TEST 501 | BnlGfkIkHtmw1Cu21DmwbQ== 502 | BnlGfkIkHtmw1Cu21DlwbQ== 503 | NameFirst 504 | X 505 | 40 506 | Edm.String 507 | X 508 | T 509 | NAME_FIRST 510 | X 511 | 2 512 | X 513 | 514 | <_-IWBEP_-I_SBO_PR> 515 | ZGW_OPENAPI_TEST 516 | BnlGfkIkHtmw1Cu21DnQbQ== 517 | BnlGfkIkHtmw1Cu21DlwbQ== 518 | NameLast 519 | X 520 | 40 521 | Edm.String 522 | X 523 | T 524 | NAME_LAST 525 | X 526 | 3 527 | X 528 | 529 | <_-IWBEP_-I_SBO_PR> 530 | ZGW_OPENAPI_TEST 531 | BnlGfkIkHtmw1Cu21DnwbQ== 532 | BnlGfkIkHtmw1Cu21DlwbQ== 533 | NameTextc 534 | X 535 | 80 536 | Edm.String 537 | X 538 | T 539 | NAME_TEXTC 540 | X 541 | X 542 | X 543 | X 544 | 4 545 | X 546 | 547 | <_-IWBEP_-I_SBO_PR> 548 | ZGW_OPENAPI_TEST 549 | BnlGfkIkHtmw1Cu21DoQbQ== 550 | BnlGfkIkHtmw1Cu21DlwbQ== 551 | Idadtype 552 | X 553 | 2 554 | Edm.String 555 | X 556 | T 557 | IDADTYPE 558 | X 559 | X 560 | X 561 | X 562 | 19 563 | X 564 | 565 | <_-IWBEP_-I_SBO_PR> 566 | ZGW_OPENAPI_TEST 567 | BnlGfkIkHtmw1Cu21DowbQ== 568 | BnlGfkIkHtmw1Cu21DlwbQ== 569 | Company 570 | X 571 | 42 572 | Edm.String 573 | X 574 | T 575 | COMPANY 576 | X 577 | X 578 | X 579 | X 580 | 18 581 | X 582 | 583 | <_-IWBEP_-I_SBO_PR> 584 | ZGW_OPENAPI_TEST 585 | BnlGfkIkHtmw1Cu21DpQbQ== 586 | BnlGfkIkHtmw1Cu21DlwbQ== 587 | TelExtens 588 | X 589 | 10 590 | Edm.String 591 | X 592 | T 593 | TEL_EXTENS 594 | X 595 | X 596 | X 597 | X 598 | 5 599 | X 600 | 601 | <_-IWBEP_-I_SBO_PR> 602 | ZGW_OPENAPI_TEST 603 | BnlGfkIkHtmw1Cu21DpwbQ== 604 | BnlGfkIkHtmw1Cu21DlwbQ== 605 | McCity1 606 | X 607 | 25 608 | Edm.String 609 | X 610 | T 611 | MC_CITY1 612 | X 613 | X 614 | X 615 | X 616 | 17 617 | X 618 | 619 | <_-IWBEP_-I_SBO_PR> 620 | ZGW_OPENAPI_TEST 621 | BnlGfkIkHtmw1Cu21DqQbQ== 622 | BnlGfkIkHtmw1Cu21DlwbQ== 623 | Kostl 624 | X 625 | 8 626 | Edm.String 627 | X 628 | T 629 | KOSTL 630 | X 631 | X 632 | X 633 | X 634 | 6 635 | X 636 | 637 | <_-IWBEP_-I_SBO_PR> 638 | ZGW_OPENAPI_TEST 639 | BnlGfkIkHtmw1Cu21DqwbQ== 640 | BnlGfkIkHtmw1Cu21DlwbQ== 641 | McName1 642 | X 643 | 25 644 | Edm.String 645 | X 646 | T 647 | MC_NAME1 648 | X 649 | X 650 | X 651 | X 652 | 16 653 | X 654 | 655 | <_-IWBEP_-I_SBO_PR> 656 | ZGW_OPENAPI_TEST 657 | BnlGfkIkHtmw1Cu21DrQbQ== 658 | BnlGfkIkHtmw1Cu21DlwbQ== 659 | Building 660 | X 661 | 10 662 | Edm.String 663 | X 664 | T 665 | BUILDING 666 | X 667 | X 668 | X 669 | X 670 | 7 671 | X 672 | 673 | <_-IWBEP_-I_SBO_PR> 674 | ZGW_OPENAPI_TEST 675 | BnlGfkIkHtmw1Cu21DrwbQ== 676 | BnlGfkIkHtmw1Cu21DlwbQ== 677 | McNamelas 678 | X 679 | 25 680 | Edm.String 681 | X 682 | T 683 | MC_NAMELAS 684 | X 685 | X 686 | X 687 | X 688 | 15 689 | X 690 | 691 | <_-IWBEP_-I_SBO_PR> 692 | ZGW_OPENAPI_TEST 693 | BnlGfkIkHtmw1Cu21DsQbQ== 694 | BnlGfkIkHtmw1Cu21DlwbQ== 695 | Roomnumber 696 | X 697 | 10 698 | Edm.String 699 | X 700 | T 701 | ROOMNUMBER 702 | X 703 | X 704 | X 705 | X 706 | 8 707 | X 708 | 709 | <_-IWBEP_-I_SBO_PR> 710 | ZGW_OPENAPI_TEST 711 | BnlGfkIkHtmw1Cu21DswbQ== 712 | BnlGfkIkHtmw1Cu21DlwbQ== 713 | McNamefir 714 | X 715 | 25 716 | Edm.String 717 | X 718 | T 719 | MC_NAMEFIR 720 | X 721 | X 722 | X 723 | X 724 | 14 725 | X 726 | 727 | <_-IWBEP_-I_SBO_PR> 728 | ZGW_OPENAPI_TEST 729 | BnlGfkIkHtmw1Cu21DtQbQ== 730 | BnlGfkIkHtmw1Cu21DlwbQ== 731 | Department 732 | X 733 | 40 734 | Edm.String 735 | X 736 | T 737 | DEPARTMENT 738 | X 739 | X 740 | X 741 | X 742 | 9 743 | X 744 | 745 | <_-IWBEP_-I_SBO_PR> 746 | ZGW_OPENAPI_TEST 747 | BnlGfkIkHtmw1Cu21DtwbQ== 748 | BnlGfkIkHtmw1Cu21DlwbQ== 749 | PostCode1 750 | X 751 | 10 752 | Edm.String 753 | X 754 | T 755 | POST_CODE1 756 | X 757 | X 758 | X 759 | X 760 | 13 761 | X 762 | 763 | <_-IWBEP_-I_SBO_PR> 764 | ZGW_OPENAPI_TEST 765 | BnlGfkIkHtmw1Cu21DuQbQ== 766 | BnlGfkIkHtmw1Cu21DlwbQ== 767 | City1 768 | X 769 | 40 770 | Edm.String 771 | X 772 | T 773 | CITY1 774 | X 775 | X 776 | X 777 | X 778 | 12 779 | X 780 | 781 | <_-IWBEP_-I_SBO_PR> 782 | ZGW_OPENAPI_TEST 783 | BnlGfkIkHtmw1Cu21DuwbQ== 784 | BnlGfkIkHtmw1Cu21DlwbQ== 785 | InhouseMl 786 | X 787 | 10 788 | Edm.String 789 | X 790 | T 791 | INHOUSE_ML 792 | X 793 | X 794 | X 795 | X 796 | 10 797 | X 798 | 799 | <_-IWBEP_-I_SBO_PR> 800 | ZGW_OPENAPI_TEST 801 | BnlGfkIkHtmw1Cu21DvQbQ== 802 | BnlGfkIkHtmw1Cu21DlwbQ== 803 | Name1 804 | X 805 | 40 806 | Edm.String 807 | X 808 | T 809 | NAME1 810 | X 811 | X 812 | X 813 | X 814 | 11 815 | X 816 | 817 | 818 | <_-IWBEP_-I_SBO_PRT> 819 | <_-IWBEP_-I_SBO_PRT> 820 | E 821 | ZGW_OPENAPI_TEST 822 | BnlGfkIkHtmw1Cu21DmQbQ== 823 | User 824 | 825 | <_-IWBEP_-I_SBO_PRT> 826 | E 827 | ZGW_OPENAPI_TEST 828 | BnlGfkIkHtmw1Cu21DmwbQ== 829 | First name 830 | 831 | <_-IWBEP_-I_SBO_PRT> 832 | E 833 | ZGW_OPENAPI_TEST 834 | BnlGfkIkHtmw1Cu21DnQbQ== 835 | Last name 836 | 837 | <_-IWBEP_-I_SBO_PRT> 838 | E 839 | ZGW_OPENAPI_TEST 840 | BnlGfkIkHtmw1Cu21DnwbQ== 841 | Full Name 842 | 843 | <_-IWBEP_-I_SBO_PRT> 844 | E 845 | ZGW_OPENAPI_TEST 846 | BnlGfkIkHtmw1Cu21DoQbQ== 847 | Identity Add. Type 848 | 849 | <_-IWBEP_-I_SBO_PRT> 850 | E 851 | ZGW_OPENAPI_TEST 852 | BnlGfkIkHtmw1Cu21DowbQ== 853 | Company 854 | 855 | <_-IWBEP_-I_SBO_PRT> 856 | E 857 | ZGW_OPENAPI_TEST 858 | BnlGfkIkHtmw1Cu21DpQbQ== 859 | Extension 860 | 861 | <_-IWBEP_-I_SBO_PRT> 862 | E 863 | ZGW_OPENAPI_TEST 864 | BnlGfkIkHtmw1Cu21DpwbQ== 865 | City 866 | 867 | <_-IWBEP_-I_SBO_PRT> 868 | E 869 | ZGW_OPENAPI_TEST 870 | BnlGfkIkHtmw1Cu21DqQbQ== 871 | Cost center 872 | 873 | <_-IWBEP_-I_SBO_PRT> 874 | E 875 | ZGW_OPENAPI_TEST 876 | BnlGfkIkHtmw1Cu21DqwbQ== 877 | Name 878 | 879 | <_-IWBEP_-I_SBO_PRT> 880 | E 881 | ZGW_OPENAPI_TEST 882 | BnlGfkIkHtmw1Cu21DrQbQ== 883 | Building code 884 | 885 | <_-IWBEP_-I_SBO_PRT> 886 | E 887 | ZGW_OPENAPI_TEST 888 | BnlGfkIkHtmw1Cu21DrwbQ== 889 | Last name 890 | 891 | <_-IWBEP_-I_SBO_PRT> 892 | E 893 | ZGW_OPENAPI_TEST 894 | BnlGfkIkHtmw1Cu21DsQbQ== 895 | Room Number 896 | 897 | <_-IWBEP_-I_SBO_PRT> 898 | E 899 | ZGW_OPENAPI_TEST 900 | BnlGfkIkHtmw1Cu21DswbQ== 901 | First name 902 | 903 | <_-IWBEP_-I_SBO_PRT> 904 | E 905 | ZGW_OPENAPI_TEST 906 | BnlGfkIkHtmw1Cu21DtQbQ== 907 | Department 908 | 909 | <_-IWBEP_-I_SBO_PRT> 910 | E 911 | ZGW_OPENAPI_TEST 912 | BnlGfkIkHtmw1Cu21DtwbQ== 913 | Postal Code 914 | 915 | <_-IWBEP_-I_SBO_PRT> 916 | E 917 | ZGW_OPENAPI_TEST 918 | BnlGfkIkHtmw1Cu21DuQbQ== 919 | City 920 | 921 | <_-IWBEP_-I_SBO_PRT> 922 | E 923 | ZGW_OPENAPI_TEST 924 | BnlGfkIkHtmw1Cu21DuwbQ== 925 | Internal mail 926 | 927 | <_-IWBEP_-I_SBO_PRT> 928 | E 929 | ZGW_OPENAPI_TEST 930 | BnlGfkIkHtmw1Cu21DvQbQ== 931 | Name 932 | 933 | 934 | 935 | 936 | 937 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zgw_openapi_test_mdl 0001.iwmo.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <_-IWBEP_-I_MGW_OHD> 6 | <_-IWBEP_-I_MGW_OHD> 7 | ZGW_OPENAPI_TEST_MDL 8 | 0001 9 | ZCL_GW_OPENAPI_TEST_MPC_EXT 10 | GJKLAPS 11 | GJKLAPS 12 | 20190825174131 13 | 14 | 15 | <_-IWBEP_-I_MGW_OHT> 16 | <_-IWBEP_-I_MGW_OHT> 17 | ZGW_OPENAPI_TEST_MDL 18 | 0001 19 | E 20 | OpenAPI integration test service 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zgw_openapi_test_mdl_0001_be.iwom.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <_-IWFND_-I_MED_EMM> 6 | <_-IWFND_-I_MED_EMM> 7 | ZGW_OPENAPI_TEST_MDL_0001_BE 8 | A 9 | C 10 | ZGW_OPENAPI_TEST_SRV 11 | ZGW_OPENAPI_TEST_MDL_0001 12 | 13 | 14 | <_-IWFND_-I_MED_INH> 15 | <_-IWFND_-I_MED_INH> 16 | ZGW_OPENAPI_TEST_MDL_0001_BE 17 | A 18 | 19 | 20 | <_-IWFND_-I_MED_OHD> 21 | <_-IWFND_-I_MED_OHD> 22 | ZGW_OPENAPI_TEST_MDL_0001_BE 23 | A 24 | ZGW_OPENAPI_TEST_MDL 25 | 0001 26 | BE 27 | GJKLAPS 28 | GJKLAPS 29 | 20190819165536 30 | 20190819165536 31 | 32 | 33 | <_-IWFND_-I_MED_OHT> 34 | <_-IWFND_-I_MED_OHT> 35 | ZGW_OPENAPI_TEST_MDL_0001_BE 36 | A 37 | E 38 | OpenAPI integration test service 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zgw_openapi_test_srv 0001.iwsv.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <_-IWBEP_-I_MGW_SRG> 6 | <_-IWBEP_-I_MGW_SRG> 7 | ZGW_OPENAPI_TEST_SRV 8 | 0001 9 | ZGW_OPENAPI_TEST_MDL 10 | 0001 11 | 12 | 13 | <_-IWBEP_-I_MGW_SRH> 14 | <_-IWBEP_-I_MGW_SRH> 15 | ZGW_OPENAPI_TEST_SRV 16 | 0001 17 | ZGW_OPENAPI_TEST_SRV 18 | ZCL_GW_OPENAPI_TEST_DPC_EXT 19 | GJKLAPS 20 | GJKLAPS 21 | 20190825174155 22 | - 23 | 24 | 25 | <_-IWBEP_-I_MGW_SRT> 26 | <_-IWBEP_-I_MGW_SRT> 27 | ZGW_OPENAPI_TEST_SRV 28 | 0001 29 | E 30 | OpenAPI integration test service 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/zgw_openapi_test/zgw_openapi_test_srv_0001.iwsg.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <_-IWFND_-I_MED_SIN> 6 | <_-IWFND_-I_MED_SIN> 7 | ZGW_OPENAPI_TEST_SRV_0001 8 | A 9 | BEP_SVC_EXT_DATA_SRC_TYPE 10 | C 11 | 12 | <_-IWFND_-I_MED_SIN> 13 | ZGW_OPENAPI_TEST_SRV_0001 14 | A 15 | BEP_SVC_EXT_SERVICE_NAME 16 | ZGW_OPENAPI_TEST_SRV 17 | 18 | <_-IWFND_-I_MED_SIN> 19 | ZGW_OPENAPI_TEST_SRV_0001 20 | A 21 | BEP_SVC_GENERATOR 22 | /IWFND/MAINT_SERVICE 23 | 24 | <_-IWFND_-I_MED_SIN> 25 | ZGW_OPENAPI_TEST_SRV_0001 26 | A 27 | BEP_SVC_SERVICE_IDENT 28 | ZGW_OPENAPI_TEST_SRV_0001 29 | 30 | <_-IWFND_-I_MED_SIN> 31 | ZGW_OPENAPI_TEST_SRV_0001 32 | A 33 | BEP_SVC_SERVICE_NAME 34 | ZGW_OPENAPI_TEST_SRV 35 | 36 | <_-IWFND_-I_MED_SIN> 37 | ZGW_OPENAPI_TEST_SRV_0001 38 | A 39 | BEP_SVC_SERVICE_VERSION 40 | 0001 41 | 42 | <_-IWFND_-I_MED_SIN> 43 | ZGW_OPENAPI_TEST_SRV_0001 44 | A 45 | BEP_SVC_TECHNICAL_NAME 46 | ZGW_OPENAPI_TEST_SRV 47 | 48 | <_-IWFND_-I_MED_SIN> 49 | ZGW_OPENAPI_TEST_SRV_0001 50 | A 51 | BEP_SVC_VERSION 52 | 0001 53 | 54 | 55 | <_-IWFND_-I_MED_SRG> 56 | <_-IWFND_-I_MED_SRG> 57 | ZGW_OPENAPI_TEST_SRV_0001 58 | A 59 | ZGW_OPENAPI_TEST_MDL_0001_BE 60 | 01 61 | 62 | 63 | <_-IWFND_-I_MED_SRH> 64 | <_-IWFND_-I_MED_SRH> 65 | ZGW_OPENAPI_TEST_SRV_0001 66 | A 67 | ZGW_OPENAPI_TEST_SRV 68 | ZGW_OPENAPI_TEST_SRV 69 | 0001 70 | GJKLAPS 71 | GJKLAPS 72 | 20190819165539 73 | 20190819165601 74 | - 75 | N 76 | C 77 | NOT_RELEASED 78 | 79 | 80 | <_-IWFND_-I_MED_SRT> 81 | <_-IWFND_-I_MED_SRT> 82 | ZGW_OPENAPI_TEST_SRV_0001 83 | A 84 | E 85 | OpenAPI integration test service 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /src/zgw_openapi_top.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Include ZGW_SERVICE_OVERVIEW_TOP - Report ZGW_SERVICE_OVERVIEW 3 | *&---------------------------------------------------------------------* 4 | 5 | 6 | TABLES: /iwfnd/i_med_srh, 7 | /iwbep/i_v4_msrv, 8 | /iwfnd/c_v4_msgr, 9 | /iwbep/i_v4_msga. 10 | 11 | SELECTION-SCREEN BEGIN OF BLOCK bl0 WITH FRAME TITLE TEXT-000. 12 | PARAMETERS: p_v2 TYPE xfeld RADIOBUTTON GROUP rdb1 DEFAULT 'X' USER-COMMAND ent1, 13 | p_v4 TYPE xfeld RADIOBUTTON GROUP rdb1. 14 | SELECTION-SCREEN END OF BLOCK bl0. 15 | 16 | SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-001. 17 | SELECT-OPTIONS: s_name2 FOR /iwfnd/i_med_srh-service_name, 18 | s_vers2 FOR /iwfnd/i_med_srh-service_version. 19 | 20 | SELECT-OPTIONS: s_name4 FOR /iwbep/i_v4_msrv-service_id, 21 | s_vers4 FOR /iwbep/i_v4_msrv-service_version, 22 | s_grp4 FOR /iwfnd/c_v4_msgr-group_id, 23 | s_rep4 FOR /iwbep/i_v4_msga-repository_id. 24 | SELECTION-SCREEN END OF BLOCK bl1. 25 | 26 | SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE TEXT-002. 27 | PARAMETERS: p_ui TYPE xfeld RADIOBUTTON GROUP rdb2 DEFAULT 'X' USER-COMMAND ent1, 28 | p_json TYPE xfeld RADIOBUTTON GROUP rdb2. 29 | SELECTION-SCREEN END OF BLOCK bl2. 30 | -------------------------------------------------------------------------------- /src/zgw_openapi_top.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZGW_OPENAPI_TOP 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZGW_SERVICE_OVERVIEW_TOP 15 | 32 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/zif_gw_openapi.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_gw_openapi 2 | PUBLIC . 3 | 4 | 5 | METHODS get_json 6 | EXPORTING 7 | !ev_json TYPE xstring 8 | !ev_json_string TYPE string. 9 | ENDINTERFACE. 10 | -------------------------------------------------------------------------------- /src/zif_gw_openapi.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_GW_OPENAPI 7 | E 8 | SAP NetWeaver Gateway OpenAPI integration 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | ZIF_GW_OPENAPI 16 | GET_JSON 17 | E 18 | Get OpenAPI / Swagger JSON 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/zif_gw_openapi_metadata.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_gw_openapi_metadata 2 | PUBLIC . 3 | 4 | 5 | METHODS get_metadata 6 | RETURNING 7 | VALUE(rv_metadata) TYPE xstring . 8 | METHODS get_json 9 | EXPORTING 10 | !ev_json TYPE xstring 11 | !ev_json_string TYPE string . 12 | ENDINTERFACE. 13 | -------------------------------------------------------------------------------- /src/zif_gw_openapi_metadata.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_GW_OPENAPI_METADATA 7 | E 8 | SAP NetWeaver Gateway OpenAPI Metadata reader 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | ZIF_GW_OPENAPI_METADATA 16 | GET_JSON 17 | E 18 | Get OpenAPI / Swagger JSON 19 | 20 | 21 | ZIF_GW_OPENAPI_METADATA 22 | GET_METADATA 23 | E 24 | Get OData Metadata 25 | 26 | 27 | 28 | 29 | 30 | --------------------------------------------------------------------------------