├── .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 | 
5 | 
6 | 
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 | [](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 |
--------------------------------------------------------------------------------