mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-29 20:36:46 +08:00
adjust http handler to call from outside (#1511)
This commit is contained in:
parent
f6c111b907
commit
eb45fcd2a4
|
@ -46,7 +46,6 @@ CLASS z2ui5_cl_core_http_post IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD main.
|
METHOD main.
|
||||||
* CLEAR attributes.
|
|
||||||
|
|
||||||
main_begin( ).
|
main_begin( ).
|
||||||
DO.
|
DO.
|
||||||
|
@ -58,7 +57,7 @@ CLASS z2ui5_cl_core_http_post IMPLEMENTATION.
|
||||||
result = VALUE #(
|
result = VALUE #(
|
||||||
body = mv_response
|
body = mv_response
|
||||||
s_stateful = ms_response-s_front-params-s_stateful
|
s_stateful = ms_response-s_front-params-s_stateful
|
||||||
).
|
).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
|
@ -28,35 +28,39 @@ CLASS z2ui5_cl_http_handler DEFINITION
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(result) TYPE REF TO z2ui5_cl_http_handler.
|
VALUE(result) TYPE REF TO z2ui5_cl_http_handler.
|
||||||
|
|
||||||
|
CLASS-METHODS _http_post
|
||||||
|
IMPORTING
|
||||||
|
is_req TYPE z2ui5_if_core_types=>ty_s_http_req
|
||||||
|
RETURNING
|
||||||
|
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_res.
|
||||||
|
|
||||||
|
CLASS-METHODS _http_get
|
||||||
|
IMPORTING
|
||||||
|
VALUE(is_config) TYPE z2ui5_if_types=>ty_s_http_config
|
||||||
|
RETURNING
|
||||||
|
VALUE(result) TYPE string.
|
||||||
|
|
||||||
METHODS main
|
METHODS main
|
||||||
IMPORTING
|
IMPORTING
|
||||||
s_config TYPE z2ui5_if_types=>ty_s_http_config OPTIONAL.
|
s_config TYPE z2ui5_if_types=>ty_s_http_config OPTIONAL.
|
||||||
|
|
||||||
|
CLASS-METHODS _main
|
||||||
|
IMPORTING
|
||||||
|
is_config TYPE z2ui5_if_types=>ty_s_http_config
|
||||||
|
is_req TYPE z2ui5_if_core_types=>ty_s_http_req
|
||||||
|
RETURNING
|
||||||
|
VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_res.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
CLASS-DATA so_sticky_handler TYPE REF TO z2ui5_cl_core_http_post.
|
CLASS-DATA so_sticky_handler TYPE REF TO z2ui5_cl_core_http_post.
|
||||||
DATA mo_server TYPE REF TO z2ui5_cl_abap_api_http.
|
DATA mo_server TYPE REF TO z2ui5_cl_abap_api_http.
|
||||||
* DATA ms_session_attributes TYPE z2ui5_if_core_types=>ty_s_http_handler_attributes.
|
|
||||||
|
|
||||||
DATA ms_req TYPE z2ui5_if_core_types=>ty_s_http_req.
|
DATA ms_req TYPE z2ui5_if_core_types=>ty_s_http_req.
|
||||||
DATA ms_res TYPE z2ui5_if_core_types=>ty_s_http_res.
|
DATA ms_res TYPE z2ui5_if_core_types=>ty_s_http_res.
|
||||||
DATA ms_config TYPE z2ui5_if_types=>ty_s_http_config.
|
DATA ms_config TYPE z2ui5_if_types=>ty_s_http_config.
|
||||||
|
|
||||||
METHODS http_get.
|
|
||||||
|
|
||||||
METHODS http_post.
|
|
||||||
|
|
||||||
METHODS session_handling.
|
|
||||||
* IMPORTING
|
|
||||||
* attributes TYPE z2ui5_if_core_types=>ty_s_http_handler_attributes.
|
|
||||||
|
|
||||||
METHODS get_index_html
|
|
||||||
RETURNING
|
|
||||||
VALUE(result) TYPE string
|
|
||||||
##CALLED.
|
|
||||||
|
|
||||||
METHODS set_request.
|
METHODS set_request.
|
||||||
|
|
||||||
METHODS set_response.
|
METHODS set_response.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
@ -75,17 +79,14 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
||||||
set_request( ).
|
set_request( ).
|
||||||
|
|
||||||
CASE ms_req-method.
|
CASE ms_req-method.
|
||||||
WHEN `GET`.
|
|
||||||
http_get( ).
|
|
||||||
WHEN `POST`.
|
|
||||||
http_post( ).
|
|
||||||
WHEN `HEAD`.
|
WHEN `HEAD`.
|
||||||
mo_server->set_session_stateful( 0 ).
|
mo_server->set_session_stateful( 0 ).
|
||||||
RETURN.
|
RETURN.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ms_res = _main( is_req = ms_req is_config = ms_config ).
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
|
|
||||||
set_response( ).
|
set_response( ).
|
||||||
session_handling( ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -112,97 +113,43 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD http_get.
|
|
||||||
|
|
||||||
ms_res-body = get_index_html( ).
|
METHOD _http_get.
|
||||||
|
|
||||||
ENDMETHOD.
|
IF is_config-title IS INITIAL.
|
||||||
|
is_config-title = `abap2UI5`.
|
||||||
|
|
||||||
METHOD http_post.
|
|
||||||
|
|
||||||
IF so_sticky_handler IS NOT BOUND.
|
|
||||||
DATA(lo_post) = NEW z2ui5_cl_core_http_post( ms_req-body ).
|
|
||||||
ELSE.
|
|
||||||
lo_post = so_sticky_handler.
|
|
||||||
lo_post->mv_request_json = ms_req-body.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ms_res = lo_post->main( ).
|
IF is_config-theme IS INITIAL.
|
||||||
|
is_config-theme = `sap_horizon`.
|
||||||
TRY.
|
|
||||||
IF lo_post IS BOUND.
|
|
||||||
DATA(li_app) = CAST z2ui5_if_app( lo_post->mo_action->mo_app->mo_app ).
|
|
||||||
IF li_app->check_sticky = abap_true.
|
|
||||||
so_sticky_handler = lo_post.
|
|
||||||
ELSE.
|
|
||||||
CLEAR so_sticky_handler.
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
CATCH cx_root.
|
|
||||||
ENDTRY.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD session_handling.
|
|
||||||
|
|
||||||
"transform cookie to header based contextid handling
|
|
||||||
IF ms_res-s_stateful-switched = abap_true.
|
|
||||||
mo_server->set_session_stateful( ms_res-s_stateful-active ).
|
|
||||||
IF mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'.
|
|
||||||
DATA(lv_contextid) = mo_server->get_response_cookie( 'sap-contextid' ).
|
|
||||||
IF lv_contextid IS NOT INITIAL.
|
|
||||||
mo_server->delete_response_cookie( 'sap-contextid' ).
|
|
||||||
mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ).
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
|
||||||
ELSE.
|
|
||||||
lv_contextid = mo_server->get_header_field( 'sap-contextid' ).
|
|
||||||
IF lv_contextid IS NOT INITIAL.
|
|
||||||
mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ).
|
|
||||||
ENDIF.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
IF is_config-src IS INITIAL.
|
||||||
|
is_config-src = `https://sdk.openui5.org/resources/sap-ui-cachebuster/sap-ui-core.js`.
|
||||||
|
|
||||||
METHOD get_index_html.
|
|
||||||
|
|
||||||
IF ms_config-title IS INITIAL.
|
|
||||||
ms_config-title = `abap2UI5`.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF ms_config-theme IS INITIAL.
|
|
||||||
ms_config-theme = `sap_horizon`.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF ms_config-src IS INITIAL.
|
|
||||||
ms_config-src = `https://sdk.openui5.org/resources/sap-ui-cachebuster/sap-ui-core.js`.
|
|
||||||
* ms_req_config-src = `https://sdk.openui5.org/1.71.67/resources/sap-ui-core.js`.
|
* ms_req_config-src = `https://sdk.openui5.org/1.71.67/resources/sap-ui-core.js`.
|
||||||
* ms_req_config-src = `https://sdk.openui5.org/nightly/2/resources/sap-ui-core.js`.
|
* ms_req_config-src = `https://sdk.openui5.org/nightly/2/resources/sap-ui-core.js`.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF ms_config-content_security_policy IS INITIAL.
|
IF is_config-content_security_policy IS INITIAL.
|
||||||
ms_config-content_security_policy = `<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' 'unsafe-eval' data: ` &&
|
is_config-content_security_policy = `<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' 'unsafe-eval' data: ` &&
|
||||||
`ui5.sap.com *.ui5.sap.com sapui5.hana.ondemand.com *.sapui5.hana.ondemand.com openui5.hana.ondemand.com *.openui5.hana.ondemand.com ` &&
|
`ui5.sap.com *.ui5.sap.com sapui5.hana.ondemand.com *.sapui5.hana.ondemand.com openui5.hana.ondemand.com *.openui5.hana.ondemand.com ` &&
|
||||||
`sdk.openui5.org *.sdk.openui5.org cdn.jsdelivr.net *.cdn.jsdelivr.net cdnjs.cloudflare.com *.cdnjs.cloudflare.com schemas *.schemas"/>`.
|
`sdk.openui5.org *.sdk.openui5.org cdn.jsdelivr.net *.cdn.jsdelivr.net cdnjs.cloudflare.com *.cdnjs.cloudflare.com schemas *.schemas"/>`.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF ms_config-styles_css IS INITIAL.
|
IF is_config-styles_css IS INITIAL.
|
||||||
DATA(lv_style_css) = z2ui5_cl_app_style_css=>get( ).
|
DATA(lv_style_css) = z2ui5_cl_app_style_css=>get( ).
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_style_css = ms_config-styles_css.
|
lv_style_css = is_config-styles_css.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
result = `<!DOCTYPE html>` && |\n| &&
|
result = `<!DOCTYPE html>` && |\n| &&
|
||||||
`<html lang="en">` && |\n| &&
|
`<html lang="en">` && |\n| &&
|
||||||
`<head>` && |\n| &&
|
`<head>` && |\n| &&
|
||||||
ms_config-content_security_policy && |\n| &&
|
is_config-content_security_policy && |\n| &&
|
||||||
` <meta charset="UTF-8">` && |\n| &&
|
` <meta charset="UTF-8">` && |\n| &&
|
||||||
` <meta name="viewport" content="width=device-width, initial-scale=1.0">` && |\n| &&
|
` <meta name="viewport" content="width=device-width, initial-scale=1.0">` && |\n| &&
|
||||||
` <meta http-equiv="X-UA-Compatible" content="IE=edge">` && |\n| &&
|
` <meta http-equiv="X-UA-Compatible" content="IE=edge">` && |\n| &&
|
||||||
| <title> { ms_config-title }</title> \n| &&
|
| <title> { is_config-title }</title> \n| &&
|
||||||
| <style> html, body, body > div, #container, #container-uiarea \{\n| &
|
| <style> html, body, body > div, #container, #container-uiarea \{\n| &
|
||||||
| height: 100%;\n| &
|
| height: 100%;\n| &
|
||||||
| \}</style> \n| &&
|
| \}</style> \n| &&
|
||||||
|
@ -210,7 +157,7 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
||||||
` function onInitComponent(){` && |\n| &&
|
` function onInitComponent(){` && |\n| &&
|
||||||
` sap.ui.require.preload({` && |\n| &&
|
` sap.ui.require.preload({` && |\n| &&
|
||||||
` "z2ui5/manifest.json": '` && z2ui5_cl_app_manifest_json=>get( ) && `',` && |\n| &&
|
` "z2ui5/manifest.json": '` && z2ui5_cl_app_manifest_json=>get( ) && `',` && |\n| &&
|
||||||
` "z2ui5/Component.js": function(){` && z2ui5_cl_app_component_js=>get( ) && ms_config-custom_js && `},` && |\n| &&
|
` "z2ui5/Component.js": function(){` && z2ui5_cl_app_component_js=>get( ) && is_config-custom_js && `},` && |\n| &&
|
||||||
` "z2ui5/css/style.css": '` && lv_style_css && `',` && |\n| &&
|
` "z2ui5/css/style.css": '` && lv_style_css && `',` && |\n| &&
|
||||||
` "z2ui5/model/models.js": function(){` && z2ui5_cl_app_models_js=>get( ) && `},` && |\n| &&
|
` "z2ui5/model/models.js": function(){` && z2ui5_cl_app_models_js=>get( ) && `},` && |\n| &&
|
||||||
` "z2ui5/view/App.view.xml": '` && z2ui5_cl_app_app_xml=>get( ) && `',` && |\n| &&
|
` "z2ui5/view/App.view.xml": '` && z2ui5_cl_app_app_xml=>get( ) && `',` && |\n| &&
|
||||||
|
@ -228,9 +175,9 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
||||||
`</script>` && |\n| &&
|
`</script>` && |\n| &&
|
||||||
`<script id="sap-ui-bootstrap" data-sap-ui-resourceroots='{ "z2ui5": "./" }' data-sap-ui-oninit="onInitComponent" ` && |\n| &&
|
`<script id="sap-ui-bootstrap" data-sap-ui-resourceroots='{ "z2ui5": "./" }' data-sap-ui-oninit="onInitComponent" ` && |\n| &&
|
||||||
`data-sap-ui-compatVersion="edge" data-sap-ui-async="true" data-sap-ui-frameOptions="trusted" data-sap-ui-bindingSyntax="complex"` && |\n| &&
|
`data-sap-ui-compatVersion="edge" data-sap-ui-async="true" data-sap-ui-frameOptions="trusted" data-sap-ui-bindingSyntax="complex"` && |\n| &&
|
||||||
`data-sap-ui-theme="` && ms_config-theme && `" src=" ` && ms_config-src && `" `.
|
`data-sap-ui-theme="` && is_config-theme && `" src=" ` && is_config-src && `" `.
|
||||||
|
|
||||||
LOOP AT ms_config-t_add_config REFERENCE INTO DATA(lr_config).
|
LOOP AT is_config-t_add_config REFERENCE INTO DATA(lr_config).
|
||||||
result = result && | { lr_config->n }='{ lr_config->v }'|.
|
result = result && | { lr_config->n }='{ lr_config->v }'|.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
@ -269,6 +216,61 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION.
|
||||||
mo_server->set_header_field( n = `cache-control` v = `no-cache` ).
|
mo_server->set_header_field( n = `cache-control` v = `no-cache` ).
|
||||||
mo_server->set_status( code = 200 reason = `success` ).
|
mo_server->set_status( code = 200 reason = `success` ).
|
||||||
|
|
||||||
|
"transform cookie to header based contextid handling
|
||||||
|
IF ms_res-s_stateful-switched = abap_true.
|
||||||
|
mo_server->set_session_stateful( ms_res-s_stateful-active ).
|
||||||
|
IF mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'.
|
||||||
|
DATA(lv_contextid) = mo_server->get_response_cookie( 'sap-contextid' ).
|
||||||
|
IF lv_contextid IS NOT INITIAL.
|
||||||
|
mo_server->delete_response_cookie( 'sap-contextid' ).
|
||||||
|
mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
ELSE.
|
||||||
|
lv_contextid = mo_server->get_header_field( 'sap-contextid' ).
|
||||||
|
IF lv_contextid IS NOT INITIAL.
|
||||||
|
mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD _http_post.
|
||||||
|
|
||||||
|
IF so_sticky_handler IS NOT BOUND.
|
||||||
|
DATA(lo_post) = NEW z2ui5_cl_core_http_post( is_req-body ).
|
||||||
|
ELSE.
|
||||||
|
lo_post = so_sticky_handler.
|
||||||
|
lo_post->mv_request_json = is_req-body.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
result = lo_post->main( ).
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
IF lo_post IS BOUND.
|
||||||
|
DATA(li_app) = CAST z2ui5_if_app( lo_post->mo_action->mo_app->mo_app ).
|
||||||
|
IF li_app->check_sticky = abap_true.
|
||||||
|
so_sticky_handler = lo_post.
|
||||||
|
ELSE.
|
||||||
|
CLEAR so_sticky_handler.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
CATCH cx_root.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD _main.
|
||||||
|
|
||||||
|
CASE is_req-method.
|
||||||
|
WHEN `GET`.
|
||||||
|
result-body = _http_get( is_config ).
|
||||||
|
WHEN `POST`.
|
||||||
|
result = _http_post( is_req ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user