diff --git a/src/01/00/02/z2ui5_cl_abap_api_http.clas.abap b/src/01/00/02/z2ui5_cl_abap_api_http.clas.abap new file mode 100644 index 00000000..b0d00af6 --- /dev/null +++ b/src/01/00/02/z2ui5_cl_abap_api_http.clas.abap @@ -0,0 +1,314 @@ +CLASS z2ui5_cl_abap_api_http DEFINITION PUBLIC. + + PUBLIC SECTION. + + CLASS-METHODS factory + IMPORTING + server TYPE REF TO object + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_abap_api_http. + + CLASS-METHODS factory_cloud + IMPORTING + req TYPE REF TO object + res TYPE REF TO object + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_abap_api_http. + + METHODS get_header_field + IMPORTING + val TYPE clike + RETURNING + VALUE(result) TYPE string. + + METHODS get_cdata + RETURNING + VALUE(result) TYPE string. + + METHODS get_method + RETURNING + VALUE(result) TYPE string. + + METHODS set_cdata + IMPORTING + val TYPE clike. + + METHODS set_status + IMPORTING + code TYPE i + reason TYPE clike. + + METHODS set_session_stateful + IMPORTING + val TYPE i. + + METHODS get_response_cookie + IMPORTING + val TYPE clike + RETURNING + VALUE(result) TYPE string. + + METHODS delete_response_cookie + IMPORTING + val TYPE clike. + + METHODS set_header_field + IMPORTING + n TYPE clike + v TYPE clike. + + DATA mo_server_onprem TYPE REF TO object. + + PROTECTED SECTION. + + DATA mo_request_cloud TYPE REF TO object. + DATA mo_response_cloud TYPE REF TO object. + + PRIVATE SECTION. +ENDCLASS. + +CLASS z2ui5_cl_abap_api_http IMPLEMENTATION. + + METHOD delete_response_cookie. + + DATA(lv_val) = CONV string( val ). + + IF mo_server_onprem IS BOUND. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + + ASSIGN mo_server_onprem->('RESPONSE') TO . + object = . + + CALL METHOD object->('DELETE_COOKIE') + EXPORTING + name = lv_val. + + ELSE. + +* CALL METHOD mo_response_cloud->('DELETE_COOKIE_AT_CLIENT') +* EXPORTING +* name = lv_val. + + ENDIF. + + ENDMETHOD. + + METHOD get_response_cookie. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + DATA(lv_val) = CONV string( val ). + + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('RESPONSE') TO . + object = . + + CALL METHOD object->('GET_COOKIE') + EXPORTING + name = lv_val + IMPORTING + value = result. + + ELSE. + +* CALL METHOD mo_request_cloud->('GET_COOKIE') +* EXPORTING +* i_name = lv_val +* RECEIVING +* r_value = result. + + ENDIF. + + ENDMETHOD. + + METHOD get_header_field. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + DATA(lv_val) = CONV string( val ). + + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('REQUEST') TO . + object = . + + CALL METHOD object->('GET_HEADER_FIELD') + EXPORTING + name = lv_val + RECEIVING + value = result. + + ELSE. + + CALL METHOD mo_request_cloud->('GET_HEADER_FIELD') + EXPORTING + i_name = lv_val + RECEIVING + r_value = result. + + ENDIF. + + ENDMETHOD. + + METHOD set_header_field. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + + DATA(lv_n) = CONV string( n ). + DATA(lv_v) = CONV string( v ). + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('RESPONSE') TO . + object = . + + CALL METHOD object->('SET_HEADER_FIELD') + EXPORTING + name = lv_n + value = lv_v. + + ELSE. + + CALL METHOD mo_request_cloud->('SET_HEADER_FIELD') + EXPORTING + i_name = lv_n + i_value = lv_v. + + ENDIF. + + ENDMETHOD. + + METHOD factory. + + result = NEW #( ). + result->mo_server_onprem = server. + + ENDMETHOD. + + METHOD factory_cloud. + + result = NEW #( ). + result->mo_request_cloud = req. + result->mo_response_cloud = res. + + ENDMETHOD. + + METHOD get_cdata. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('REQUEST') TO . + object = . + + CALL METHOD object->('GET_CDATA') + RECEIVING + data = result. + + ELSE. + + CALL METHOD mo_request_cloud->('GET_TEXT') + RECEIVING + r_value = result. + + ENDIF. + + ENDMETHOD. + + METHOD get_method. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('REQUEST') TO . + object = . + + CALL METHOD object->('IF_HTTP_REQUEST~GET_METHOD') + RECEIVING + method = result. + + ELSE. + + CALL METHOD mo_request_cloud->('GET_METHOD') + RECEIVING + r_value = result. + + ENDIF. + + ENDMETHOD. + + METHOD set_cdata. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('RESPONSE') TO . + object = . + + CALL METHOD object->('SET_CDATA') + EXPORTING + data = val. + + ELSE. + + CALL METHOD mo_request_cloud->('SET_TEXT') + EXPORTING + r_value = val. + + ENDIF. + + ENDMETHOD. + + METHOD set_status. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + DATA(lv_reason) = CONV string( reason ). + + IF mo_server_onprem IS BOUND. + + ASSIGN mo_server_onprem->('RESPONSE') TO . + object = . + + CALL METHOD object->('IF_HTTP_RESPONSE~SET_STATUS') + EXPORTING + code = code + reason = lv_reason. + + ELSE. + + CALL METHOD mo_response_cloud->('SET_STATUS') + EXPORTING + i_code = code + i_reason = lv_reason. + + ENDIF. + + ENDMETHOD. + + METHOD set_session_stateful. + + IF mo_server_onprem IS BOUND. + + CALL METHOD mo_server_onprem->('SET_SESSION_STATEFUL') + EXPORTING + stateful = val. + + ELSE. + + ASSERT 1 = 'NO_STATEFUL_FEATURE_IN_CLOUD_ERROR'. + + ENDIF. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_http_get.clas.xml b/src/01/00/02/z2ui5_cl_abap_api_http.clas.xml similarity index 73% rename from src/01/02/z2ui5_cl_core_http_get.clas.xml rename to src/01/00/02/z2ui5_cl_abap_api_http.clas.xml index e74592c6..54d0801c 100644 --- a/src/01/02/z2ui5_cl_core_http_get.clas.xml +++ b/src/01/00/02/z2ui5_cl_abap_api_http.clas.xml @@ -3,14 +3,13 @@ - Z2UI5_CL_CORE_HTTP_GET + Z2UI5_CL_ABAP_API_HTTP E - abap2UI5 - http get handler + http server 1 X X X - X diff --git a/src/01/02/z2ui5_cl_core_http_get.clas.abap b/src/01/02/z2ui5_cl_core_http_get.clas.abap deleted file mode 100644 index 8c940dd2..00000000 --- a/src/01/02/z2ui5_cl_core_http_get.clas.abap +++ /dev/null @@ -1,188 +0,0 @@ -CLASS z2ui5_cl_core_http_get DEFINITION - PUBLIC - FINAL - CREATE PUBLIC . - - PUBLIC SECTION. - - DATA ms_request TYPE z2ui5_if_types=>ty_s_http_request_get. - - METHODS constructor - IMPORTING - val TYPE z2ui5_if_types=>ty_s_http_request_get OPTIONAL. - - METHODS main - RETURNING - VALUE(result) TYPE string. - - METHODS get_js_cc_startup - RETURNING - VALUE(result) TYPE string. - - PROTECTED SECTION. - - METHODS get_default_config - RETURNING - VALUE(result) TYPE z2ui5_if_types=>ty_s_http_request_get. - - METHODS main_get_config - RETURNING - VALUE(result) TYPE z2ui5_if_types=>ty_s_http_request_get. - - METHODS main_get_index_html - IMPORTING - cs_config TYPE z2ui5_if_types=>ty_s_http_request_get - RETURNING - VALUE(result) TYPE string. - - - PRIVATE SECTION. -ENDCLASS. - - - -CLASS z2ui5_cl_core_http_get IMPLEMENTATION. - - - METHOD constructor. - - ms_request = val. - - ENDMETHOD. - - - METHOD get_default_config. - - DATA(lv_csp) = ``. - - result = VALUE #( - t_param = VALUE #( - ( n = `TITLE` v = `abap2UI5` ) - ) - t_config = VALUE #( -* ( n = `src` v = `https://sdk.openui5.org/1.71.67/resources/sap-ui-core.js` ) - ( n = `src` v = `https://sdk.openui5.org/resources/sap-ui-cachebuster/sap-ui-core.js` ) -* ( n = `src` v = `https://sdk.openui5.org/nightly/2/resources/sap-ui-core.js` ) - ( n = `data-sap-ui-theme` v = `sap_horizon` ) - ) - content_security_policy = lv_csp ). - - ENDMETHOD. - - - METHOD get_js_cc_startup. - - result = ` ` && - z2ui5_cl_cc_timer=>get_js( ) && - z2ui5_cl_cc_focus=>get_js( ) && - z2ui5_cl_cc_title=>get_js( ) && - z2ui5_cl_cc_lp_title=>get_js( ) && - z2ui5_cl_cc_history=>get_js( ) && - z2ui5_cl_cc_scrolling=>get_js( ) && - z2ui5_cl_cc_info=>get_js( ) && - z2ui5_cl_cc_geoloc=>get_js( ) && - z2ui5_cl_cc_file_upl=>get_js( ) && - z2ui5_cl_cc_multiinput=>get_js( ) && - z2ui5_cl_cc_uitable=>get_js( ) && - z2ui5_cl_cc_util=>get_js( ) && - z2ui5_cl_cc_favicon=>get_js( ) && - z2ui5_cl_cc_dirty=>get_js( ) && -* z2ui5_cl_cc_debug_tool=>get_js( ) && - ` `. - - ENDMETHOD. - - METHOD main_get_config. - - result = get_default_config( ). - - LOOP AT ms_request-t_param REFERENCE INTO DATA(lr_param). - TRY. - result-t_param[ n = lr_param->n ]-v = lr_param->v. - CATCH cx_root. - INSERT lr_param->* INTO TABLE result-t_param. - ENDTRY. - ENDLOOP. - - LOOP AT ms_request-t_config REFERENCE INTO DATA(lr_option). - TRY. - result-t_config[ n = lr_option->n ]-v = lr_option->v. - CATCH cx_root. - INSERT lr_option->* INTO TABLE result-t_config. - ENDTRY. - ENDLOOP. - - IF ms_request-content_security_policy IS NOT INITIAL. - result-content_security_policy = ms_request-content_security_policy. - ENDIF. - - IF ms_request-custom_js IS NOT INITIAL. - result-custom_js = ms_request-custom_js. - ENDIF. - - ENDMETHOD. - - - METHOD main_get_index_html. - - - DATA(lv_add_js) = get_js_cc_startup( ) && cs_config-custom_js. - - result = `` && |\n| && - `` && |\n| && - `` && |\n| && - cs_config-content_security_policy && |\n| && - ` ` && |\n| && - ` ` && |\n| && - ` ` && |\n| && - | { cs_config-t_param[ n = 'TITLE' ]-v } \n| && - | \n| && - `` && |\n| && - `` && |\n| && - `` && |\n| && - `
` && |\n| && - ` `. - - ENDMETHOD. - - - METHOD main. - - DATA(ls_config) = main_get_config( ). - result = main_get_index_html( ls_config ). - NEW z2ui5_cl_core_draft_srv( )->cleanup( ). - - ENDMETHOD. - -ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap deleted file mode 100644 index 677fce33..00000000 --- a/src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap +++ /dev/null @@ -1,136 +0,0 @@ -CLASS ltcl_test_http_get DEFINITION FINAL FOR TESTING - DURATION MEDIUM - RISK LEVEL HARMLESS. - - PUBLIC SECTION. - PROTECTED SECTION. - - PRIVATE SECTION. - METHODS file_not_initial FOR TESTING RAISING cx_static_check. - METHODS launchpad_compatibility FOR TESTING RAISING cx_static_check. - METHODS js_no_debugger FOR TESTING RAISING cx_static_check. - METHODS js_no_sap_ui_get_core FOR TESTING RAISING cx_static_check. - METHODS js_no_window FOR TESTING RAISING cx_static_check. - METHODS js_no_document FOR TESTING RAISING cx_static_check. - METHODS js_2x_compatibility FOR TESTING RAISING cx_static_check. - METHODS bootstrap_with_open_ui5 FOR TESTING RAISING cx_static_check. - METHODS js_no_jquery FOR TESTING RAISING cx_static_check. - METHODS debugging_tools FOR TESTING RAISING cx_static_check. -ENDCLASS. - -CLASS z2ui5_cl_core_http_get DEFINITION LOCAL FRIENDS ltcl_test_http_get. - -CLASS ltcl_test_http_get IMPLEMENTATION. - - METHOD file_not_initial. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = lo_get->main( ). - IF lv_index_html IS INITIAL. - cl_abap_unit_assert=>fail( 'HTTP GET - index html initial' ). - ENDIF. - - ENDMETHOD. - - - METHOD launchpad_compatibility. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = lo_get->main( ). - IF lv_index_html CS ` && `. - cl_abap_unit_assert=>fail( 'index.html contains the character & -> no launchpad compatibility' ). - ENDIF. - - ENDMETHOD. - - - METHOD js_no_debugger. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ). - IF lv_index_html CS `DEBUGGER`. - cl_abap_unit_assert=>fail( 'debugger command not allowed' ). - ENDIF. - - ENDMETHOD. - - METHOD js_no_sap_ui_get_core. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. -* IF lv_index_html CS `SAP.UI.GETCORE`. -* cl_abap_unit_assert=>fail( 'sap.ui.get.core not allowed' ). -* ENDIF. - - ENDMETHOD. - - - METHOD js_2x_compatibility. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. - IF lv_index_html CS `SAP.UI.GETVERSIONINFO`. - cl_abap_unit_assert=>fail( 'SAP.UI.GETVERSIONINFO not allowed' ). - ENDIF. - - ENDMETHOD. - - METHOD js_no_jquery. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ). - IF lv_index_html CS `JQUERY`. - cl_abap_unit_assert=>fail( 'use of jquery not allowed' ). - ENDIF. - - ENDMETHOD. - - METHOD js_no_window. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. -* IF lv_index_html CS `WINDOW.`. -* cl_abap_unit_assert=>fail( 'use of window not allowed' ). -* ENDIF. - - ENDMETHOD. - - METHOD js_no_document. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. -* IF lv_index_html CS `DOCUMENT.`. -* cl_abap_unit_assert=>fail( 'use of document not allowed' ). -* ENDIF. - - ENDMETHOD. - - METHOD bootstrap_with_open_ui5. - - DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). - DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. - DATA(lv_check) = xsdbool( lv_index_html CS `HTTPS://SDK.OPENUI5.ORG/RESOURCES` ). - IF lv_check = abap_false. - cl_abap_unit_assert=>fail( 'no bootstrap with openUI5' ). - ENDIF. - - lv_check = xsdbool( lv_index_html CS `NIGHTLY` ). - IF lv_check = abap_true. - cl_abap_unit_assert=>fail( 'no bootstrap with nightly version' ). - ENDIF. - - ENDMETHOD. - - METHOD debugging_tools. - - DATA(lv_index_html) = to_upper( z2ui5_cl_cc_debug_tool=>get_js( ) ) ##NEEDED. - IF lv_index_html CS `<`. - cl_abap_unit_assert=>fail( 'use of < not allowed - launchpad compatibility' ). - ENDIF. - IF lv_index_html CS `/>`. - cl_abap_unit_assert=>fail( 'use of /> not allowed - launchpad compatibility' ). - ENDIF. - - ENDMETHOD. - -ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_ui5_app.clas.abap b/src/01/02/z2ui5_cl_core_ui5_app.clas.abap index a70acc86..2fe24aee 100644 --- a/src/01/02/z2ui5_cl_core_ui5_app.clas.abap +++ b/src/01/02/z2ui5_cl_core_ui5_app.clas.abap @@ -41,10 +41,71 @@ CLASS z2ui5_cl_core_ui5_app DEFINITION RETURNING VALUE(result) TYPE string. + METHODS index_html + IMPORTING + is_config TYPE z2ui5_if_types=>ty_s_http_config + RETURNING + VALUE(result) TYPE string. + ENDCLASS. CLASS z2ui5_cl_core_ui5_app IMPLEMENTATION. + METHOD index_html. + + IF is_config-styles_css IS INITIAL. + DATA(lv_style_css) = NEW z2ui5_cl_core_ui5_app( )->css_style_css( ). + ELSE. + lv_style_css = is_config-styles_css. + ENDIF. + + result = `` && |\n| && + `` && |\n| && + `` && |\n| && + is_config-content_security_policy && |\n| && + ` ` && |\n| && + ` ` && |\n| && + ` ` && |\n| && + | { is_config-title } \n| && + | \n| && + `` && |\n| && + `` && |\n| && + `` && |\n| && + `
` && |\n| && + ` `. + + ENDMETHOD. + METHOD component_js. result = @@ -136,503 +197,503 @@ CLASS z2ui5_cl_core_ui5_app IMPLEMENTATION. result = `` && |\n| && `sap.ui.define(["sap/ui/core/mvc/Controller", "sap/ui/core/mvc/XMLView", "sap/ui/model/json/JSONModel", "sap/ui/core/BusyIndicator", "sap/m/MessageBox", "sap/m/MessageToast", "sap/ui/core/Fragment", "sap/m/BusyDialog", "sap/ui/VersionInfo"],` && |\n| && - ` function (Controller, XMLView, JSONModel, BusyIndicator, MessageBox, MessageToast, Fragment, mBusyDialog, VersionInfo) {` && |\n| && - ` "use strict";` && |\n| && - ` return Controller.extend("z2ui5.controller.View1", {` && |\n| && - ` async onAfterRendering() {` && |\n| && - ` try {` && |\n| && - ` if (!sap.z2ui5.oResponse.PARAMS) {` && |\n| && - ` BusyIndicator.hide();` && |\n| && - ` sap.z2ui5.isBusy = false;` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - |\n| && - ` const { S_POPUP, S_VIEW_NEST, S_VIEW_NEST2, S_POPOVER } = sap.z2ui5.oResponse.PARAMS;` && |\n| && - ` if (S_POPUP?.CHECK_DESTROY) {` && |\n| && - ` sap.z2ui5.oController.PopupDestroy();` && |\n| && - ` }` && |\n| && - ` if (S_POPOVER?.CHECK_DESTROY) {` && |\n| && - ` sap.z2ui5.oController.PopoverDestroy();` && |\n| && - ` }` && |\n| && - ` if (S_POPUP?.XML) {` && |\n| && - ` sap.z2ui5.oController.PopupDestroy();` && |\n| && - ` await this.displayFragment(S_POPUP.XML, 'oViewPopup');` && |\n| && - ` }` && |\n| && - ` if (!sap.z2ui5.checkNestAfter) {` && |\n| && - ` if (S_VIEW_NEST?.XML) {` && |\n| && - ` sap.z2ui5.oController.NestViewDestroy();` && |\n| && - ` await this.displayNestedView(S_VIEW_NEST.XML, 'oViewNest', 'S_VIEW_NEST');` && |\n| && - ` sap.z2ui5.checkNestAfter = true;` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` if (!sap.z2ui5.checkNestAfter2) {` && |\n| && - ` if (S_VIEW_NEST2?.XML) {` && |\n| && - ` sap.z2ui5.oController.NestViewDestroy2();` && |\n| && - ` await this.displayNestedView2(S_VIEW_NEST2.XML, 'oViewNest2', 'S_VIEW_NEST2');` && |\n| && - ` sap.z2ui5.checkNestAfter2 = true;` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` if (S_POPOVER?.XML) {` && |\n| && - ` await this.displayPopover(S_POPOVER.XML, 'oViewPopover', S_POPOVER.OPEN_BY_ID);` && |\n| && - ` }` && |\n| && - ` BusyIndicator.hide();` && |\n| && - ` sap.z2ui5.isBusy = false;` && |\n| && - ` sap.z2ui5.onAfterRendering.forEach(item => {` && |\n| && - ` if (item !== undefined) {` && |\n| && - ` item();` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` )` && |\n| && - ` } catch (e) {` && |\n| && - ` BusyIndicator.hide(); sap.z2ui5.isBusy = false; MessageBox.error(e.toLocaleString(), {` && |\n| && - ` title: "Unexpected Error Occured - App Terminated", actions: [], onClose: () => {` && |\n| && - ` new mBusyDialog({` && |\n| && - ` text: "Please Restart the App"` && |\n| && - ` }).open();` && |\n| && - ` }` && |\n| && - ` })` && |\n| && - ` }` && |\n| && - ` },` && |\n| && - |\n| && - ` async displayFragment(xml, viewProp) {` && |\n| && - ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && - ` const oFragment = await Fragment.load({` && |\n| && - ` definition: xml,` && |\n| && - ` controller: sap.z2ui5.oControllerPopup,` && |\n| && - ` id: "popupId"` && |\n| && - ` });` && |\n| && - ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && - ` oFragment.setModel(oview_model);` && |\n| && - ` sap.z2ui5[viewProp] = oFragment;` && |\n| && - ` sap.z2ui5[viewProp].Fragment = Fragment;` && |\n| && - ` oFragment.open();` && |\n| && - ` },` && |\n| && - ` async displayPopover(xml, viewProp, openById) {` && |\n| && - ` // let sapUiCore = sap.ui.require('sap/ui/core/Core');` && |\n| && - ` sap.ui.require(["sap/ui/core/Element"], async function (Element) {` && |\n| && - ` const oFragment = await Fragment.load({` && |\n| && - ` definition: xml,` && |\n| && - ` controller: sap.z2ui5.oControllerPopover,` && |\n| && - ` id: "popoverId"` && |\n| && - ` });` && |\n| && - ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && - ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && - ` oFragment.setModel(oview_model);` && |\n| && - ` sap.z2ui5[viewProp] = oFragment;` && |\n| && - ` sap.z2ui5[viewProp].Fragment = Fragment;` && |\n| && - ` let oControl = {};` && |\n| && - ` if (sap.z2ui5.oView?.byId(openById)) {` && |\n| && - ` oControl = sap.z2ui5.oView.byId(openById);` && |\n| && - ` } else if (sap.z2ui5.oViewPopup?.Fragment.byId('popupId', openById)) {` && |\n| && - ` oControl = sap.z2ui5.oViewPopup.Fragment.byId('popupId', openById);` && |\n| && - ` } else if (sap.z2ui5.oViewNest?.byId(openById)) {` && |\n| && - ` oControl = sap.z2ui5.oViewNest.byId(openById);` && |\n| && - ` } else if (sap.z2ui5.oViewNest2?.byId(openById)) {` && |\n| && - ` oControl = sap.z2ui5.oViewNest2.byId(openById);` && |\n| && - ` } else {` && |\n| && - ` if (sapUiCore.byId(openById)) {` && |\n| && - ` // oControl = sapUiCore.byId(openById);` && |\n| && - ` oControl = Element.getElementById(openById);` && |\n| && - ` } else {` && |\n| && - ` oControl = null;` && |\n| && - ` };` && |\n| && - ` }` && |\n| && - ` oFragment.openBy(oControl);` && |\n| && - ` });` && |\n| && - ` },` && |\n| && - ` async displayNestedView(xml, viewProp, viewNestId) {` && |\n| && - ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && - ` const oView = await XMLView.create({` && |\n| && - ` definition: xml,` && |\n| && - ` controller: sap.z2ui5.oControllerNest,` && |\n| && - ` preprocessors: { xml: { models: { template: oview_model } } }` && |\n| && - ` });` && |\n| && - ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && - ` oView.setModel(oview_model);` && |\n| && - ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && - ` if (oParent) {` && |\n| && - ` try {` && |\n| && - ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && - ` } catch { }` && |\n| && - ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && - ` }` && |\n| && - ` sap.z2ui5[viewProp] = oView;` && |\n| && - ` },` && |\n| && - ` async displayNestedView2(xml, viewProp, viewNestId) {` && |\n| && - ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && - ` const oView = await XMLView.create({` && |\n| && - ` definition: xml,` && |\n| && - ` controller: sap.z2ui5.oControllerNest2,` && |\n| && - ` preprocessors: { xml: { models: { template: oview_model } } }` && |\n| && - ` });` && |\n| && - ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && - ` oView.setModel(oview_model);` && |\n| && - ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && - ` if (oParent) {` && |\n| && - ` try {` && |\n| && - ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && - ` } catch { }` && |\n| && - ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && - ` }` && |\n| && - ` sap.z2ui5[viewProp] = oView;` && |\n| && - ` },` && |\n| && - ` PopupDestroy() {` && |\n| && - ` if (!sap.z2ui5.oViewPopup) {` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` if (sap.z2ui5.oViewPopup.close) {` && |\n| && - ` try {` && |\n| && - ` sap.z2ui5.oViewPopup.close();` && |\n| && - ` } catch { }` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oViewPopup.destroy();` && |\n| && - ` },` && |\n| && - ` PopoverDestroy() {` && |\n| && - ` if (!sap.z2ui5.oViewPopover) {` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` if (sap.z2ui5.oViewPopover.close) {` && |\n| && - ` try {` && |\n| && - ` sap.z2ui5.oViewPopover.close();` && |\n| && - ` } catch { }` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oViewPopover.destroy();` && |\n| && - ` },` && |\n| && - ` NestViewDestroy() {` && |\n| && - ` if (!sap.z2ui5.oViewNest) {` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oViewNest.destroy();` && |\n| && - ` },` && |\n| && - ` NestViewDestroy2() {` && |\n| && - ` if (!sap.z2ui5.oViewNest2) {` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oViewNest2.destroy();` && |\n| && - ` },` && |\n| && - ` ViewDestroy() {` && |\n| && - ` if (!sap.z2ui5.oView) {` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oView.destroy();` && |\n| && - ` },` && |\n| && - ` eF(...args) {` && |\n| && - ` sap.z2ui5.onBeforeEventFrontend.forEach(item => {` && |\n| && - ` if (item !== undefined) {` && |\n| && - ` item(args);` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` )` && |\n| && - ` let oCrossAppNavigator;` && |\n| && - ` switch (args[0]) {` && |\n| && - ` case 'SET_SIZE_LIMIT':` && |\n| && - ` switch (args[2]) { ` && |\n| && - ` case 'MAIN': sap.z2ui5.oView.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oView.getModel().refresh(true); break; ` && |\n| && - ` case 'NEST': sap.z2ui5.oViewNest.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oViewNest.getModel().refresh(true); break; ` && |\n| && - ` case 'NEST2': sap.z2ui5.oViewNest2.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oViewNest2.getModel().refresh(true); break; ` && |\n| && - ` case 'POPUP': sap.z2ui5.oPopup.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oPopup.getModel().refresh(true); break; ` && |\n| && - ` case 'POPOVER': sap.z2ui5.oPopover.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oPopover.getModel().refresh(true); break; ` && |\n| && - ` }` && |\n| && - ` break;` && |\n| && - ` case 'DOWNLOAD_B64_FILE':` && |\n| && - ` var a = document.createElement("a");` && |\n| && - ` a.href = args[1];` && |\n| && - ` a.download = args[2];` && |\n| && - ` a.click();` && |\n| && - ` break;` && |\n| && - ` case 'CROSS_APP_NAV_TO_PREV_APP':` && |\n| && - ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && - ` oCrossAppNavigator.backToPreviousApp();` && |\n| && - ` break;` && |\n| && - ` case 'CROSS_APP_NAV_TO_EXT':` && |\n| && - ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && - ` const hash = (oCrossAppNavigator.hrefForExternal({` && |\n| && - ` target: args[1],` && |\n| && - ` params: args[2]` && |\n| && - ` })) || "";` && |\n| && - ` if (args[3] === 'EXT') {` && |\n| && - ` let url = window.location.href.split('#')[0] + hash;` && |\n| && - ` sap.m.URLHelper.redirect(url, true);` && |\n| && - ` } else {` && |\n| && - ` oCrossAppNavigator.toExternal({` && |\n| && - ` target: {` && |\n| && - ` shellHash: hash` && |\n| && - ` }` && |\n| && - ` });` && |\n| && - ` }` && |\n| && - ` break;` && |\n| && - ` case 'LOCATION_RELOAD':` && |\n| && - ` window.location = args[1];` && |\n| && - ` break;` && |\n| && - ` case 'OPEN_NEW_TAB':` && |\n| && - ` window.open(args[1], '_blank');` && |\n| && - ` break;` && |\n| && - ` case 'POPUP_CLOSE':` && |\n| && - ` sap.z2ui5.oController.PopupDestroy();` && |\n| && - ` break;` && |\n| && - ` case 'POPOVER_CLOSE':` && |\n| && - ` sap.z2ui5.oController.PopoverDestroy();` && |\n| && - ` break;` && |\n| && - ` case 'NAV_CONTAINER_TO':` && |\n| && - ` var navCon = sap.z2ui5.oView.byId(args[1]);` && |\n| && - ` var navConTo = sap.z2ui5.oView.byId(args[2]);` && |\n| && - ` navCon.to(navConTo);` && |\n| && - ` break;` && |\n| && - ` case 'NEST_NAV_CONTAINER_TO':` && |\n| && - ` navCon = sap.z2ui5.oViewNest.byId(args[1]);` && |\n| && - ` navConTo = sap.z2ui5.oViewNest.byId(args[2]);` && |\n| && - ` navCon.to(navConTo);` && |\n| && - ` break;` && |\n| && - ` case 'NEST2_NAV_CONTAINER_TO':` && |\n| && - ` navCon = sap.z2ui5.oViewNest2.byId(args[1]);` && |\n| && - ` navConTo = sap.z2ui5.oViewNest2.byId(args[2]);` && |\n| && - ` navCon.to(navConTo);` && |\n| && - ` break;` && |\n| && - ` case 'POPUP_NAV_CONTAINER_TO':` && |\n| && - ` navCon = Fragment.byId("popupId", args[1]);` && |\n| && - ` navConTo = Fragment.byId("popupId", args[2]);` && |\n| && - ` navCon.to(navConTo);` && |\n| && - ` break;` && |\n| && - ` }` && |\n| && - ` },` && |\n| && - ` eB(...args) {` && |\n| && - ` if (!window.navigator.onLine) {` && |\n| && - ` MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` if (sap.z2ui5.isBusy == true) {` && |\n| && - ` if (!args[0][2]) {` && |\n| && - ` let oBusyDialog = new mBusyDialog();` && |\n| && - ` oBusyDialog.open();` && |\n| && - ` setTimeout((oBusyDialog) => { oBusyDialog.close() }, 100, oBusyDialog);` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.isBusy = true;` && |\n| && - ` BusyIndicator.show();` && |\n| && - ` sap.z2ui5.oBody = {};` && |\n| && - ` if (args[0][3]) {` && |\n| && - ` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| && - ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && - ` }` && |\n| && - ` else if (sap.z2ui5.oController == this) {` && |\n| && - ` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| && - ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && - ` } else if` && |\n| && - ` (sap.z2ui5.oControllerPopup == this) {` && |\n| && - ` if (sap.z2ui5.oViewPopup) {` && |\n| && - ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopup.getModel().getData().XX;` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && - ` } else if (` && |\n| && - ` sap.z2ui5.oControllerPopover == this) {` && |\n| && - ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopover.getModel().getData().XX;` && |\n| && - ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && - ` } else if (` && |\n| && - ` sap.z2ui5.oControllerNest == this) {` && |\n| && - ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest.getModel().getData().XX;` && |\n| && - ` sap.z2ui5.oBody.VIEWNAME = 'NEST';` && |\n| && - ` } else if (` && |\n| && - ` sap.z2ui5.oControllerNest2 == this) {` && |\n| && - ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest2.getModel().getData().XX;` && |\n| && - ` sap.z2ui5.oBody.VIEWNAME = 'NEST2';` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.onBeforeRoundtrip.forEach(item => {` && |\n| && - ` if (item !== undefined) {` && |\n| && - ` item();` && |\n| && - ` }` && |\n| && - ` })` && |\n| && - ` if (args[0][1]) {` && |\n| && - ` sap.z2ui5.oController.ViewDestroy();` && |\n| && - ` }` && |\n| && - ` sap.z2ui5.oBody.ID = sap.z2ui5.oResponse.ID;` && |\n| && - ` sap.z2ui5.oBody.ARGUMENTS = args;` && |\n| && - ` sap.z2ui5.oBody.ARGUMENTS.forEach((item, i) => {` && |\n| && - ` if (i == 0) { return; } if (typeof item === 'object') {` && |\n| && - ` sap.z2ui5.oBody.ARGUMENTS[i] = JSON.stringify(item);` && |\n| && - ` }` && |\n| && - ` });` && |\n| && - ` sap.z2ui5.oResponseOld = sap.z2ui5.oResponse;` && |\n| && - ` sap.z2ui5.oController.Roundtrip();` && |\n| && - ` },` && |\n| && - ` responseError(response) {` && |\n| && - ` document.write(response);` && |\n| && - ` },` && |\n| && - ` updateModelIfRequired(paramKey, oView) {` && |\n| && - ` if (sap.z2ui5.oResponse.PARAMS == undefined) { return; }` && |\n| && - ` if (sap.z2ui5.oResponse.PARAMS[paramKey]?.CHECK_UPDATE_MODEL) {` && |\n| && - ` let model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && - ` // model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && - ` if (oView) { oView.setModel(model); }` && |\n| && - ` }` && |\n| && - ` },` && |\n| && - ` async responseSuccess(response) {` && |\n| && - ` try {` && |\n| && - ` sap.z2ui5.oResponse = response;` && |\n| && - ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.CHECK_DESTROY) {` && |\n| && - ` sap.z2ui5.oController.ViewDestroy();` && |\n| && - ` };` && |\n| && - ` if (sap.z2ui5.oResponse.PARAMS?.S_FOLLOW_UP_ACTION?.CUSTOM_JS) {` && |\n| && - ` setTimeout(() => {` && |\n| && - ` let mParams = sap.z2ui5.oResponse?.PARAMS.S_FOLLOW_UP_ACTION.CUSTOM_JS.split("'");` && |\n| && - ` let mParamsEF = mParams.filter((val, index) => index % 2)` && |\n| && - ` if (mParamsEF.length) {` && |\n| && - ` sap.z2ui5.oController.eF.apply(undefined, mParamsEF);` && |\n| && - ` } else {` && |\n| && - ` Function("return " + mParams[0])();` && |\n| && - ` }` && |\n| && - ` }, 100);` && |\n| && - ` };` && |\n| && - |\n| && - ` sap.z2ui5.oController.showMessage('S_MSG_TOAST', sap.z2ui5.oResponse.PARAMS);` && |\n| && - ` sap.z2ui5.oController.showMessage('S_MSG_BOX', sap.z2ui5.oResponse.PARAMS);` && |\n| && - ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML) {` && |\n| && - ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML !== '') {` && |\n| && - ` sap.z2ui5.oController.ViewDestroy();` && |\n| && - ` await sap.z2ui5.oController.createView(sap.z2ui5.oResponse.PARAMS.S_VIEW.XML, sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && - ` return;` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` this.updateModelIfRequired('S_VIEW', sap.z2ui5.oView);` && |\n| && - ` this.updateModelIfRequired('S_VIEW_NEST', sap.z2ui5.oViewNest);` && |\n| && - ` this.updateModelIfRequired('S_VIEW_NEST2', sap.z2ui5.oViewNest2);` && |\n| && - ` this.updateModelIfRequired('S_POPUP', sap.z2ui5.oViewPopup);` && |\n| && - ` this.updateModelIfRequired('S_POPOVER', sap.z2ui5.oViewPopover);` && |\n| && - ` sap.z2ui5.oController.onAfterRendering();` && |\n| && - ` } catch (e) {` && |\n| && - ` BusyIndicator.hide(); if (e.message.includes("openui5")) { if (e.message.includes("script load error")) { sap.z2ui5.oController.checkSDKcompatibility(e) } } else {` && |\n| && - ` MessageBox.error(e.toLocaleString());` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` },` && |\n| && - ` async checkSDKcompatibility(err) {` && |\n| && - ` let oCurrentVersionInfo = await VersionInfo.load();` && |\n| && - ` var ui5_sdk = oCurrentVersionInfo.gav.includes('com.sap.ui5') ? true : false;` && |\n| && - ` if (!ui5_sdk) {` && |\n| && - ` if (err) {` && |\n| && - ` MessageBox.error("openui5 SDK is loaded, module: " + err._modules + " is not availabe in openui5");` && |\n| && - ` return;` && |\n| && - ` };` && |\n| && - ` };` && |\n| && - ` MessageBox.error(err.toLocaleString());` && |\n| && - ` },` && |\n| && - ` showMessage(msgType, params) {` && |\n| && - ` if (params == undefined) { return; }` && |\n| && - ` if (params[msgType]?.TEXT !== undefined) {` && |\n| && - ` if (msgType === 'S_MSG_TOAST') {` && |\n| && - ` MessageToast.show(params[msgType].TEXT, {` && |\n| && - ` duration: params[msgType].DURATION ? parseInt(params[msgType].DURATION) : 3000,` && |\n| && - ` width: params[msgType].WIDTH ? params[msgType].WIDTH : '15em',` && |\n| && - ` onClose: params[msgType].ONCLOSE ? params[msgType].ONCLOSE : null,` && |\n| && - ` autoClose: params[msgType].AUTOCLOSE ? true : false,` && |\n| && - ` animationTimingFunction: params[msgType].ANIMATIONTIMINGFUNCTION ? params[msgType].ANIMATIONTIMINGFUNCTION : 'ease',` && |\n| && - ` animationDuration: params[msgType].ANIMATIONDURATION ? parseInt(params[msgType].ANIMATIONDURATION) : 1000,` && |\n| && - ` closeonBrowserNavigation: params[msgType].CLOSEONBROWSERNAVIGATION ? true : false` && |\n| && - ` });` && |\n| && - ` if (params[msgType].CLASS) {` && |\n| && - ` let mtoast = {};` && |\n| && - ` mtoast = document.getElementsByClassName("sapMMessageToast")[0];` && |\n| && - ` if (mtoast) { mtoast.classList.add(params[msgType].CLASS); }` && |\n| && - ` };` && |\n| && - ` } else if (msgType === 'S_MSG_BOX') {` && |\n| && - ` if (params[msgType].TYPE) {` && |\n| && - ` MessageBox[params[msgType].TYPE](params[msgType].TEXT);` && |\n| && - ` } else {` && |\n| && - ` MessageBox.show(params[msgType].TEXT, {` && |\n| && - ` styleClass: params[msgType].STYLECLASS ? params[msgType].STYLECLASS : '',` && |\n| && - ` title: params[msgType].TITLE ? params[msgType].TITLE : '',` && |\n| && - ` onClose: params[msgType].ONCLOSE ? Function("sAction", "return " + params[msgType].ONCLOSE) : null,` && |\n| && - ` actions: params[msgType].ACTIONS ? params[msgType].ACTIONS : 'OK',` && |\n| && - ` emphasizedAction: params[msgType].EMPHASIZEDACTION ? params[msgType].EMPHASIZEDACTION : 'OK',` && |\n| && - ` initialFocus: params[msgType].INITIALFOCUS ? params[msgType].INITIALFOCUS : null,` && |\n| && - ` textDirection: params[msgType].TEXTDIRECTION ? params[msgType].TEXTDIRECTION : 'Inherit',` && |\n| && - ` icon: params[msgType].ICON ? params[msgType].ICON : 'NONE',` && |\n| && - ` details: params[msgType].DETAILS ? params[msgType].DETAILS : '',` && |\n| && - ` closeOnNavigation: params[msgType].CLOSEONNAVIGATION ? true : false` && |\n| && - ` }` && |\n| && - ` )` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` }` && |\n| && - ` },` && |\n| && - ` setApp(oApp) {` && |\n| && - ` this._oApp = oApp;` && |\n| && - ` },` && |\n| && - ` async createView(xml, viewModel) {` && |\n| && - ` let oview_model = new JSONModel(viewModel);` && |\n| && - ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && - ` sap.z2ui5.oView = await XMLView.create({` && |\n| && - ` definition: xml,` && |\n| && - ` models: oview_model,` && |\n| && - ` controller: sap.z2ui5.oController,` && |\n| && - ` id: 'mainView',` && |\n| && - ` preprocessors: { xml: { models: { template: oview_model } } }` && |\n| && - ` });` && |\n| && - ` sap.z2ui5.oView.setModel(sap.z2ui5.oDeviceModel, "device");` && |\n| && - ` // if (sap.z2ui5.oParent) {` && |\n| && - ` // sap.z2ui5.oParent.removeAllPages();` && |\n| && - ` // sap.z2ui5.oParent.insertPage(sap.z2ui5.oView);` && |\n| && - ` // } else {` && |\n| && - ` this._oApp.byId("viewContainer").insertPage(sap.z2ui5.oView);` && |\n| && - ` // this._oApp.byId("viewContainer").addItem(sap.z2ui5.oView);` && |\n| && - ` // }` && |\n| && - ` },` && |\n| && - ` async readHttp() {` && |\n| && - |\n| && - ` const response = await fetch(sap.z2ui5.pathname, {` && |\n| && - ` method: 'POST',` && |\n| && - ` headers: {` && |\n| && - ` 'Content-Type': 'application/json',` && |\n| && - ` 'sap-contextid-accept': 'header',` && |\n| && - ` 'sap-contextid': sap.z2ui5.contextId` && |\n| && - ` },` && |\n| && - ` body: JSON.stringify(sap.z2ui5.oBody)` && |\n| && - ` });` && |\n| && - ` sap.z2ui5.contextId = response.headers.get("sap-contextid");` && |\n| && - ` if (!response.ok) {` && |\n| && - ` const responseText = await response.text();` && |\n| && - ` sap.z2ui5.oController.responseError(responseText);` && |\n| && - ` } else {` && |\n| && - ` const responseData = await response.json();` && |\n| && - ` sap.z2ui5.responseData = responseData;` && |\n| && - ` sap.z2ui5.oController.responseSuccess({` && |\n| && - ` ID: responseData.S_FRONT.ID,` && |\n| && - ` PARAMS: responseData.S_FRONT.PARAMS,` && |\n| && - ` OVIEWMODEL: responseData.MODEL,` && |\n| && - ` });` && |\n| && - ` }` && |\n| && - ` },` && |\n| && - ` Roundtrip() {` && |\n| && - ` sap.z2ui5.checkTimerActive = false;` && |\n| && - ` sap.z2ui5.checkNestAfter = false;` && |\n| && - ` sap.z2ui5.checkNestAfter2 = false;` && |\n| && - ` let event = (args) => { if (args != undefined) { return args[0][0]; } };` && |\n| && - ` sap.z2ui5.oBody.S_FRONT = {` && |\n| && - ` ID: sap.z2ui5?.oBody?.ID,` && |\n| && - ` COMPDATA: (sap.z2ui5.ComponentData) ? sap.z2ui5.ComponentData : {},` && |\n| && - ` XX: sap.z2ui5?.oBody?.XX,` && |\n| && - ` ORIGIN: window.location.origin,` && |\n| && - ` PATHNAME: window.location.pathname, // sap.z2ui5.pathname,` && |\n| && - ` SEARCH: (sap.z2ui5.search) ? sap.z2ui5.search : window.location.search,` && |\n| && - ` VIEW: sap.z2ui5.oBody?.VIEWNAME,` && |\n| && - ` T_STARTUP_PARAMETERS: sap.z2ui5.startupParameters,` && |\n| && - ` EVENT: event(sap.z2ui5.oBody?.ARGUMENTS),` && |\n| && - ` };` && |\n| && - ` if (sap.z2ui5.oBody?.ARGUMENTS != undefined) { if (sap.z2ui5.oBody?.ARGUMENTS.length > 0) { sap.z2ui5.oBody?.ARGUMENTS.shift(); } }` && |\n| && - ` sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG = sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && - ` delete sap.z2ui5.oBody.ID;` && |\n| && - ` delete sap.z2ui5.oBody?.VIEWNAME;` && |\n| && - ` delete sap.z2ui5.oBody?.S_FRONT.XX;` && |\n| && - ` delete sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && - ` if (!sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; }` && |\n| && - ` if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG.length == 0) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } }` && |\n| && - ` if (sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS == undefined) { delete sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS; }` && |\n| && - ` if (sap.z2ui5.oBody.S_FRONT.SEARCH == '') { delete sap.z2ui5.oBody.S_FRONT.SEARCH; }` && |\n| && - ` if (!sap.z2ui5.oBody.XX) { delete sap.z2ui5.oBody.XX; }` && |\n| && - ` sap.z2ui5.oController.readHttp();` && |\n| && - ` },` && |\n| && - ` })` && |\n| && - ` });`. + ` function (Controller, XMLView, JSONModel, BusyIndicator, MessageBox, MessageToast, Fragment, mBusyDialog, VersionInfo) {` && |\n| && + ` "use strict";` && |\n| && + ` return Controller.extend("z2ui5.controller.View1", {` && |\n| && + ` async onAfterRendering() {` && |\n| && + ` try {` && |\n| && + ` if (!sap.z2ui5.oResponse.PARAMS) {` && |\n| && + ` BusyIndicator.hide();` && |\n| && + ` sap.z2ui5.isBusy = false;` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + |\n| && + ` const { S_POPUP, S_VIEW_NEST, S_VIEW_NEST2, S_POPOVER } = sap.z2ui5.oResponse.PARAMS;` && |\n| && + ` if (S_POPUP?.CHECK_DESTROY) {` && |\n| && + ` sap.z2ui5.oController.PopupDestroy();` && |\n| && + ` }` && |\n| && + ` if (S_POPOVER?.CHECK_DESTROY) {` && |\n| && + ` sap.z2ui5.oController.PopoverDestroy();` && |\n| && + ` }` && |\n| && + ` if (S_POPUP?.XML) {` && |\n| && + ` sap.z2ui5.oController.PopupDestroy();` && |\n| && + ` await this.displayFragment(S_POPUP.XML, 'oViewPopup');` && |\n| && + ` }` && |\n| && + ` if (!sap.z2ui5.checkNestAfter) {` && |\n| && + ` if (S_VIEW_NEST?.XML) {` && |\n| && + ` sap.z2ui5.oController.NestViewDestroy();` && |\n| && + ` await this.displayNestedView(S_VIEW_NEST.XML, 'oViewNest', 'S_VIEW_NEST');` && |\n| && + ` sap.z2ui5.checkNestAfter = true;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` if (!sap.z2ui5.checkNestAfter2) {` && |\n| && + ` if (S_VIEW_NEST2?.XML) {` && |\n| && + ` sap.z2ui5.oController.NestViewDestroy2();` && |\n| && + ` await this.displayNestedView2(S_VIEW_NEST2.XML, 'oViewNest2', 'S_VIEW_NEST2');` && |\n| && + ` sap.z2ui5.checkNestAfter2 = true;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` if (S_POPOVER?.XML) {` && |\n| && + ` await this.displayPopover(S_POPOVER.XML, 'oViewPopover', S_POPOVER.OPEN_BY_ID);` && |\n| && + ` }` && |\n| && + ` BusyIndicator.hide();` && |\n| && + ` sap.z2ui5.isBusy = false;` && |\n| && + ` sap.z2ui5.onAfterRendering.forEach(item => {` && |\n| && + ` if (item !== undefined) {` && |\n| && + ` item();` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` )` && |\n| && + ` } catch (e) {` && |\n| && + ` BusyIndicator.hide(); sap.z2ui5.isBusy = false; MessageBox.error(e.toLocaleString(), {` && |\n| && + ` title: "Unexpected Error Occured - App Terminated", actions: [], onClose: () => {` && |\n| && + ` new mBusyDialog({` && |\n| && + ` text: "Please Restart the App"` && |\n| && + ` }).open();` && |\n| && + ` }` && |\n| && + ` })` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + |\n| && + ` async displayFragment(xml, viewProp) {` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` const oFragment = await Fragment.load({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerPopup,` && |\n| && + ` id: "popupId"` && |\n| && + ` });` && |\n| && + ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oFragment.setModel(oview_model);` && |\n| && + ` sap.z2ui5[viewProp] = oFragment;` && |\n| && + ` sap.z2ui5[viewProp].Fragment = Fragment;` && |\n| && + ` oFragment.open();` && |\n| && + ` },` && |\n| && + ` async displayPopover(xml, viewProp, openById) {` && |\n| && + ` // let sapUiCore = sap.ui.require('sap/ui/core/Core');` && |\n| && + ` sap.ui.require(["sap/ui/core/Element"], async function (Element) {` && |\n| && + ` const oFragment = await Fragment.load({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerPopover,` && |\n| && + ` id: "popoverId"` && |\n| && + ` });` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oFragment.setModel(oview_model);` && |\n| && + ` sap.z2ui5[viewProp] = oFragment;` && |\n| && + ` sap.z2ui5[viewProp].Fragment = Fragment;` && |\n| && + ` let oControl = {};` && |\n| && + ` if (sap.z2ui5.oView?.byId(openById)) {` && |\n| && + ` oControl = sap.z2ui5.oView.byId(openById);` && |\n| && + ` } else if (sap.z2ui5.oViewPopup?.Fragment.byId('popupId', openById)) {` && |\n| && + ` oControl = sap.z2ui5.oViewPopup.Fragment.byId('popupId', openById);` && |\n| && + ` } else if (sap.z2ui5.oViewNest?.byId(openById)) {` && |\n| && + ` oControl = sap.z2ui5.oViewNest.byId(openById);` && |\n| && + ` } else if (sap.z2ui5.oViewNest2?.byId(openById)) {` && |\n| && + ` oControl = sap.z2ui5.oViewNest2.byId(openById);` && |\n| && + ` } else {` && |\n| && + ` if (sapUiCore.byId(openById)) {` && |\n| && + ` // oControl = sapUiCore.byId(openById);` && |\n| && + ` oControl = Element.getElementById(openById);` && |\n| && + ` } else {` && |\n| && + ` oControl = null;` && |\n| && + ` };` && |\n| && + ` }` && |\n| && + ` oFragment.openBy(oControl);` && |\n| && + ` });` && |\n| && + ` },` && |\n| && + ` async displayNestedView(xml, viewProp, viewNestId) {` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` const oView = await XMLView.create({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerNest,` && |\n| && + ` preprocessors: { xml: { models: { template: oview_model } } }` && |\n| && + ` });` && |\n| && + ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oView.setModel(oview_model);` && |\n| && + ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && + ` if (oParent) {` && |\n| && + ` try {` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && + ` } catch { }` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && + ` }` && |\n| && + ` sap.z2ui5[viewProp] = oView;` && |\n| && + ` },` && |\n| && + ` async displayNestedView2(xml, viewProp, viewNestId) {` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` const oView = await XMLView.create({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerNest2,` && |\n| && + ` preprocessors: { xml: { models: { template: oview_model } } }` && |\n| && + ` });` && |\n| && + ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oView.setModel(oview_model);` && |\n| && + ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && + ` if (oParent) {` && |\n| && + ` try {` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && + ` } catch { }` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && + ` }` && |\n| && + ` sap.z2ui5[viewProp] = oView;` && |\n| && + ` },` && |\n| && + ` PopupDestroy() {` && |\n| && + ` if (!sap.z2ui5.oViewPopup) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.oViewPopup.close) {` && |\n| && + ` try {` && |\n| && + ` sap.z2ui5.oViewPopup.close();` && |\n| && + ` } catch { }` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewPopup.destroy();` && |\n| && + ` },` && |\n| && + ` PopoverDestroy() {` && |\n| && + ` if (!sap.z2ui5.oViewPopover) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.oViewPopover.close) {` && |\n| && + ` try {` && |\n| && + ` sap.z2ui5.oViewPopover.close();` && |\n| && + ` } catch { }` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewPopover.destroy();` && |\n| && + ` },` && |\n| && + ` NestViewDestroy() {` && |\n| && + ` if (!sap.z2ui5.oViewNest) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewNest.destroy();` && |\n| && + ` },` && |\n| && + ` NestViewDestroy2() {` && |\n| && + ` if (!sap.z2ui5.oViewNest2) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewNest2.destroy();` && |\n| && + ` },` && |\n| && + ` ViewDestroy() {` && |\n| && + ` if (!sap.z2ui5.oView) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oView.destroy();` && |\n| && + ` },` && |\n| && + ` eF(...args) {` && |\n| && + ` sap.z2ui5.onBeforeEventFrontend.forEach(item => {` && |\n| && + ` if (item !== undefined) {` && |\n| && + ` item(args);` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` )` && |\n| && + ` let oCrossAppNavigator;` && |\n| && + ` switch (args[0]) {` && |\n| && + ` case 'SET_SIZE_LIMIT':` && |\n| && + ` switch (args[2]) { ` && |\n| && + ` case 'MAIN': sap.z2ui5.oView.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oView.getModel().refresh(true); break; ` && |\n| && + ` case 'NEST': sap.z2ui5.oViewNest.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oViewNest.getModel().refresh(true); break; ` && |\n| && + ` case 'NEST2': sap.z2ui5.oViewNest2.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oViewNest2.getModel().refresh(true); break; ` && |\n| && + ` case 'POPUP': sap.z2ui5.oPopup.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oPopup.getModel().refresh(true); break; ` && |\n| && + ` case 'POPOVER': sap.z2ui5.oPopover.getModel().setSizeLimit( parseInt( args[1] ) ); sap.z2ui5.oPopover.getModel().refresh(true); break; ` && |\n| && + ` }` && |\n| && + ` break;` && |\n| && + ` case 'DOWNLOAD_B64_FILE':` && |\n| && + ` var a = document.createElement("a");` && |\n| && + ` a.href = args[1];` && |\n| && + ` a.download = args[2];` && |\n| && + ` a.click();` && |\n| && + ` break;` && |\n| && + ` case 'CROSS_APP_NAV_TO_PREV_APP':` && |\n| && + ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && + ` oCrossAppNavigator.backToPreviousApp();` && |\n| && + ` break;` && |\n| && + ` case 'CROSS_APP_NAV_TO_EXT':` && |\n| && + ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && + ` const hash = (oCrossAppNavigator.hrefForExternal({` && |\n| && + ` target: args[1],` && |\n| && + ` params: args[2]` && |\n| && + ` })) || "";` && |\n| && + ` if (args[3] === 'EXT') {` && |\n| && + ` let url = window.location.href.split('#')[0] + hash;` && |\n| && + ` sap.m.URLHelper.redirect(url, true);` && |\n| && + ` } else {` && |\n| && + ` oCrossAppNavigator.toExternal({` && |\n| && + ` target: {` && |\n| && + ` shellHash: hash` && |\n| && + ` }` && |\n| && + ` });` && |\n| && + ` }` && |\n| && + ` break;` && |\n| && + ` case 'LOCATION_RELOAD':` && |\n| && + ` window.location = args[1];` && |\n| && + ` break;` && |\n| && + ` case 'OPEN_NEW_TAB':` && |\n| && + ` window.open(args[1], '_blank');` && |\n| && + ` break;` && |\n| && + ` case 'POPUP_CLOSE':` && |\n| && + ` sap.z2ui5.oController.PopupDestroy();` && |\n| && + ` break;` && |\n| && + ` case 'POPOVER_CLOSE':` && |\n| && + ` sap.z2ui5.oController.PopoverDestroy();` && |\n| && + ` break;` && |\n| && + ` case 'NAV_CONTAINER_TO':` && |\n| && + ` var navCon = sap.z2ui5.oView.byId(args[1]);` && |\n| && + ` var navConTo = sap.z2ui5.oView.byId(args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` case 'NEST_NAV_CONTAINER_TO':` && |\n| && + ` navCon = sap.z2ui5.oViewNest.byId(args[1]);` && |\n| && + ` navConTo = sap.z2ui5.oViewNest.byId(args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` case 'NEST2_NAV_CONTAINER_TO':` && |\n| && + ` navCon = sap.z2ui5.oViewNest2.byId(args[1]);` && |\n| && + ` navConTo = sap.z2ui5.oViewNest2.byId(args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` case 'POPUP_NAV_CONTAINER_TO':` && |\n| && + ` navCon = Fragment.byId("popupId", args[1]);` && |\n| && + ` navConTo = Fragment.byId("popupId", args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` eB(...args) {` && |\n| && + ` if (!window.navigator.onLine) {` && |\n| && + ` MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.isBusy == true) {` && |\n| && + ` if (!args[0][2]) {` && |\n| && + ` let oBusyDialog = new mBusyDialog();` && |\n| && + ` oBusyDialog.open();` && |\n| && + ` setTimeout((oBusyDialog) => { oBusyDialog.close() }, 100, oBusyDialog);` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.isBusy = true;` && |\n| && + ` BusyIndicator.show();` && |\n| && + ` sap.z2ui5.oBody = {};` && |\n| && + ` if (args[0][3]) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` }` && |\n| && + ` else if (sap.z2ui5.oController == this) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` } else if` && |\n| && + ` (sap.z2ui5.oControllerPopup == this) {` && |\n| && + ` if (sap.z2ui5.oViewPopup) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopup.getModel().getData().XX;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` } else if (` && |\n| && + ` sap.z2ui5.oControllerPopover == this) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopover.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` } else if (` && |\n| && + ` sap.z2ui5.oControllerNest == this) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'NEST';` && |\n| && + ` } else if (` && |\n| && + ` sap.z2ui5.oControllerNest2 == this) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest2.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'NEST2';` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.onBeforeRoundtrip.forEach(item => {` && |\n| && + ` if (item !== undefined) {` && |\n| && + ` item();` && |\n| && + ` }` && |\n| && + ` })` && |\n| && + ` if (args[0][1]) {` && |\n| && + ` sap.z2ui5.oController.ViewDestroy();` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oBody.ID = sap.z2ui5.oResponse.ID;` && |\n| && + ` sap.z2ui5.oBody.ARGUMENTS = args;` && |\n| && + ` sap.z2ui5.oBody.ARGUMENTS.forEach((item, i) => {` && |\n| && + ` if (i == 0) { return; } if (typeof item === 'object') {` && |\n| && + ` sap.z2ui5.oBody.ARGUMENTS[i] = JSON.stringify(item);` && |\n| && + ` }` && |\n| && + ` });` && |\n| && + ` sap.z2ui5.oResponseOld = sap.z2ui5.oResponse;` && |\n| && + ` sap.z2ui5.oController.Roundtrip();` && |\n| && + ` },` && |\n| && + ` responseError(response) {` && |\n| && + ` document.write(response);` && |\n| && + ` },` && |\n| && + ` updateModelIfRequired(paramKey, oView) {` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS == undefined) { return; }` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS[paramKey]?.CHECK_UPDATE_MODEL) {` && |\n| && + ` let model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` // model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` if (oView) { oView.setModel(model); }` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` async responseSuccess(response) {` && |\n| && + ` try {` && |\n| && + ` sap.z2ui5.oResponse = response;` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.CHECK_DESTROY) {` && |\n| && + ` sap.z2ui5.oController.ViewDestroy();` && |\n| && + ` };` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS?.S_FOLLOW_UP_ACTION?.CUSTOM_JS) {` && |\n| && + ` setTimeout(() => {` && |\n| && + ` let mParams = sap.z2ui5.oResponse?.PARAMS.S_FOLLOW_UP_ACTION.CUSTOM_JS.split("'");` && |\n| && + ` let mParamsEF = mParams.filter((val, index) => index % 2)` && |\n| && + ` if (mParamsEF.length) {` && |\n| && + ` sap.z2ui5.oController.eF.apply(undefined, mParamsEF);` && |\n| && + ` } else {` && |\n| && + ` Function("return " + mParams[0])();` && |\n| && + ` }` && |\n| && + ` }, 100);` && |\n| && + ` };` && |\n| && + |\n| && + ` sap.z2ui5.oController.showMessage('S_MSG_TOAST', sap.z2ui5.oResponse.PARAMS);` && |\n| && + ` sap.z2ui5.oController.showMessage('S_MSG_BOX', sap.z2ui5.oResponse.PARAMS);` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML) {` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML !== '') {` && |\n| && + ` sap.z2ui5.oController.ViewDestroy();` && |\n| && + ` await sap.z2ui5.oController.createView(sap.z2ui5.oResponse.PARAMS.S_VIEW.XML, sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` this.updateModelIfRequired('S_VIEW', sap.z2ui5.oView);` && |\n| && + ` this.updateModelIfRequired('S_VIEW_NEST', sap.z2ui5.oViewNest);` && |\n| && + ` this.updateModelIfRequired('S_VIEW_NEST2', sap.z2ui5.oViewNest2);` && |\n| && + ` this.updateModelIfRequired('S_POPUP', sap.z2ui5.oViewPopup);` && |\n| && + ` this.updateModelIfRequired('S_POPOVER', sap.z2ui5.oViewPopover);` && |\n| && + ` sap.z2ui5.oController.onAfterRendering();` && |\n| && + ` } catch (e) {` && |\n| && + ` BusyIndicator.hide(); if (e.message.includes("openui5")) { if (e.message.includes("script load error")) { sap.z2ui5.oController.checkSDKcompatibility(e) } } else {` && |\n| && + ` MessageBox.error(e.toLocaleString());` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` async checkSDKcompatibility(err) {` && |\n| && + ` let oCurrentVersionInfo = await VersionInfo.load();` && |\n| && + ` var ui5_sdk = oCurrentVersionInfo.gav.includes('com.sap.ui5') ? true : false;` && |\n| && + ` if (!ui5_sdk) {` && |\n| && + ` if (err) {` && |\n| && + ` MessageBox.error("openui5 SDK is loaded, module: " + err._modules + " is not availabe in openui5");` && |\n| && + ` return;` && |\n| && + ` };` && |\n| && + ` };` && |\n| && + ` MessageBox.error(err.toLocaleString());` && |\n| && + ` },` && |\n| && + ` showMessage(msgType, params) {` && |\n| && + ` if (params == undefined) { return; }` && |\n| && + ` if (params[msgType]?.TEXT !== undefined) {` && |\n| && + ` if (msgType === 'S_MSG_TOAST') {` && |\n| && + ` MessageToast.show(params[msgType].TEXT, {` && |\n| && + ` duration: params[msgType].DURATION ? parseInt(params[msgType].DURATION) : 3000,` && |\n| && + ` width: params[msgType].WIDTH ? params[msgType].WIDTH : '15em',` && |\n| && + ` onClose: params[msgType].ONCLOSE ? params[msgType].ONCLOSE : null,` && |\n| && + ` autoClose: params[msgType].AUTOCLOSE ? true : false,` && |\n| && + ` animationTimingFunction: params[msgType].ANIMATIONTIMINGFUNCTION ? params[msgType].ANIMATIONTIMINGFUNCTION : 'ease',` && |\n| && + ` animationDuration: params[msgType].ANIMATIONDURATION ? parseInt(params[msgType].ANIMATIONDURATION) : 1000,` && |\n| && + ` closeonBrowserNavigation: params[msgType].CLOSEONBROWSERNAVIGATION ? true : false` && |\n| && + ` });` && |\n| && + ` if (params[msgType].CLASS) {` && |\n| && + ` let mtoast = {};` && |\n| && + ` mtoast = document.getElementsByClassName("sapMMessageToast")[0];` && |\n| && + ` if (mtoast) { mtoast.classList.add(params[msgType].CLASS); }` && |\n| && + ` };` && |\n| && + ` } else if (msgType === 'S_MSG_BOX') {` && |\n| && + ` if (params[msgType].TYPE) {` && |\n| && + ` MessageBox[params[msgType].TYPE](params[msgType].TEXT);` && |\n| && + ` } else {` && |\n| && + ` MessageBox.show(params[msgType].TEXT, {` && |\n| && + ` styleClass: params[msgType].STYLECLASS ? params[msgType].STYLECLASS : '',` && |\n| && + ` title: params[msgType].TITLE ? params[msgType].TITLE : '',` && |\n| && + ` onClose: params[msgType].ONCLOSE ? Function("sAction", "return " + params[msgType].ONCLOSE) : null,` && |\n| && + ` actions: params[msgType].ACTIONS ? params[msgType].ACTIONS : 'OK',` && |\n| && + ` emphasizedAction: params[msgType].EMPHASIZEDACTION ? params[msgType].EMPHASIZEDACTION : 'OK',` && |\n| && + ` initialFocus: params[msgType].INITIALFOCUS ? params[msgType].INITIALFOCUS : null,` && |\n| && + ` textDirection: params[msgType].TEXTDIRECTION ? params[msgType].TEXTDIRECTION : 'Inherit',` && |\n| && + ` icon: params[msgType].ICON ? params[msgType].ICON : 'NONE',` && |\n| && + ` details: params[msgType].DETAILS ? params[msgType].DETAILS : '',` && |\n| && + ` closeOnNavigation: params[msgType].CLOSEONNAVIGATION ? true : false` && |\n| && + ` }` && |\n| && + ` )` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` setApp(oApp) {` && |\n| && + ` this._oApp = oApp;` && |\n| && + ` },` && |\n| && + ` async createView(xml, viewModel) {` && |\n| && + ` let oview_model = new JSONModel(viewModel);` && |\n| && + ` // oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` sap.z2ui5.oView = await XMLView.create({` && |\n| && + ` definition: xml,` && |\n| && + ` models: oview_model,` && |\n| && + ` controller: sap.z2ui5.oController,` && |\n| && + ` id: 'mainView',` && |\n| && + ` preprocessors: { xml: { models: { template: oview_model } } }` && |\n| && + ` });` && |\n| && + ` sap.z2ui5.oView.setModel(sap.z2ui5.oDeviceModel, "device");` && |\n| && + ` // if (sap.z2ui5.oParent) {` && |\n| && + ` // sap.z2ui5.oParent.removeAllPages();` && |\n| && + ` // sap.z2ui5.oParent.insertPage(sap.z2ui5.oView);` && |\n| && + ` // } else {` && |\n| && + ` this._oApp.byId("viewContainer").insertPage(sap.z2ui5.oView);` && |\n| && + ` // this._oApp.byId("viewContainer").addItem(sap.z2ui5.oView);` && |\n| && + ` // }` && |\n| && + ` },` && |\n| && + ` async readHttp() {` && |\n| && + |\n| && + ` const response = await fetch(sap.z2ui5.pathname, {` && |\n| && + ` method: 'POST',` && |\n| && + ` headers: {` && |\n| && + ` 'Content-Type': 'application/json',` && |\n| && + ` 'sap-contextid-accept': 'header',` && |\n| && + ` 'sap-contextid': sap.z2ui5.contextId` && |\n| && + ` },` && |\n| && + ` body: JSON.stringify(sap.z2ui5.oBody)` && |\n| && + ` });` && |\n| && + ` sap.z2ui5.contextId = response.headers.get("sap-contextid");` && |\n| && + ` if (!response.ok) {` && |\n| && + ` const responseText = await response.text();` && |\n| && + ` sap.z2ui5.oController.responseError(responseText);` && |\n| && + ` } else {` && |\n| && + ` const responseData = await response.json();` && |\n| && + ` sap.z2ui5.responseData = responseData;` && |\n| && + ` sap.z2ui5.oController.responseSuccess({` && |\n| && + ` ID: responseData.S_FRONT.ID,` && |\n| && + ` PARAMS: responseData.S_FRONT.PARAMS,` && |\n| && + ` OVIEWMODEL: responseData.MODEL,` && |\n| && + ` });` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` Roundtrip() {` && |\n| && + ` sap.z2ui5.checkTimerActive = false;` && |\n| && + ` sap.z2ui5.checkNestAfter = false;` && |\n| && + ` sap.z2ui5.checkNestAfter2 = false;` && |\n| && + ` let event = (args) => { if (args != undefined) { return args[0][0]; } };` && |\n| && + ` sap.z2ui5.oBody.S_FRONT = {` && |\n| && + ` ID: sap.z2ui5?.oBody?.ID,` && |\n| && + ` COMPDATA: (sap.z2ui5.ComponentData) ? sap.z2ui5.ComponentData : {},` && |\n| && + ` XX: sap.z2ui5?.oBody?.XX,` && |\n| && + ` ORIGIN: window.location.origin,` && |\n| && + ` PATHNAME: window.location.pathname, // sap.z2ui5.pathname,` && |\n| && + ` SEARCH: (sap.z2ui5.search) ? sap.z2ui5.search : window.location.search,` && |\n| && + ` VIEW: sap.z2ui5.oBody?.VIEWNAME,` && |\n| && + ` T_STARTUP_PARAMETERS: sap.z2ui5.startupParameters,` && |\n| && + ` EVENT: event(sap.z2ui5.oBody?.ARGUMENTS),` && |\n| && + ` };` && |\n| && + ` if (sap.z2ui5.oBody?.ARGUMENTS != undefined) { if (sap.z2ui5.oBody?.ARGUMENTS.length > 0) { sap.z2ui5.oBody?.ARGUMENTS.shift(); } }` && |\n| && + ` sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG = sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && + ` delete sap.z2ui5.oBody.ID;` && |\n| && + ` delete sap.z2ui5.oBody?.VIEWNAME;` && |\n| && + ` delete sap.z2ui5.oBody?.S_FRONT.XX;` && |\n| && + ` delete sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && + ` if (!sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; }` && |\n| && + ` if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG.length == 0) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } }` && |\n| && + ` if (sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS == undefined) { delete sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS; }` && |\n| && + ` if (sap.z2ui5.oBody.S_FRONT.SEARCH == '') { delete sap.z2ui5.oBody.S_FRONT.SEARCH; }` && |\n| && + ` if (!sap.z2ui5.oBody.XX) { delete sap.z2ui5.oBody.XX; }` && |\n| && + ` sap.z2ui5.oController.readHttp();` && |\n| && + ` },` && |\n| && + ` })` && |\n| && + ` });`. ENDMETHOD. diff --git a/src/02/z2ui5_cl_http_handler.clas.abap b/src/02/z2ui5_cl_http_handler.clas.abap index 25ab8b2b..35ede458 100644 --- a/src/02/z2ui5_cl_http_handler.clas.abap +++ b/src/02/z2ui5_cl_http_handler.clas.abap @@ -1,36 +1,71 @@ CLASS z2ui5_cl_http_handler DEFINITION PUBLIC - CREATE PUBLIC. + CREATE PROTECTED. PUBLIC SECTION. - CLASS-DATA so_sticky_handler TYPE REF TO z2ui5_cl_core_http_post. - - CLASS-METHODS main + CLASS-METHODS factory_cloud IMPORTING - body TYPE string - config TYPE z2ui5_if_types=>ty_s_http_request_get OPTIONAL - EXPORTING - attributes TYPE z2ui5_if_types=>ty_s_http_handler_attributes + req TYPE REF TO object + res TYPE REF TO object RETURNING - VALUE(result) TYPE string. + VALUE(result) TYPE REF TO z2ui5_cl_http_handler. - CLASS-METHODS http_post + CLASS-METHODS factory IMPORTING - val TYPE string - EXPORTING - attributes TYPE z2ui5_if_types=>ty_s_http_handler_attributes + server TYPE REF TO object RETURNING - VALUE(result) TYPE string. + VALUE(result) TYPE REF TO z2ui5_cl_http_handler. - CLASS-METHODS http_get + METHODS main IMPORTING - val TYPE z2ui5_if_types=>ty_s_http_request_get OPTIONAL - RETURNING - VALUE(result) TYPE string. + s_config TYPE z2ui5_if_types=>ty_s_http_config OPTIONAL. PROTECTED SECTION. + + 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 ms_session_attributes TYPE z2ui5_if_types=>ty_s_http_handler_attributes. + + TYPES: + BEGIN OF ty_s_http_req, + method TYPE string, + body TYPE string, + END OF ty_s_http_req. + + TYPES: + BEGIN OF ty_s_http_res, + body TYPE string, + status_code TYPE i, + status_reason TYPE string, + t_header TYPE z2ui5_if_types=>ty_t_name_value, + END OF ty_s_http_res. + + DATA ms_req TYPE ty_s_http_req. + DATA ms_res TYPE ty_s_http_res. + DATA ms_config TYPE z2ui5_if_types=>ty_s_http_config. + + METHODS get_js_cc_startup + RETURNING + VALUE(result) TYPE string. + + METHODS set_config + IMPORTING + is_custom_config TYPE z2ui5_if_types=>ty_s_http_config. + + METHODS http_get + IMPORTING + is_custom_config TYPE z2ui5_if_types=>ty_s_http_config. + + METHODS http_post. + + METHODS session_handling + IMPORTING + attributes TYPE z2ui5_if_types=>ty_s_http_handler_attributes. + PRIVATE SECTION. + + ENDCLASS. @@ -38,48 +73,120 @@ ENDCLASS. CLASS z2ui5_cl_http_handler IMPLEMENTATION. + METHOD set_config. + + ms_config = is_custom_config. + + 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/nightly/2/resources/sap-ui-core.js`. + ENDIF. + + IF ms_config-content_security_policy IS INITIAL. + ms_config-content_security_policy = ``. + ENDIF. + + ms_config-custom_js = ms_config-custom_js && get_js_cc_startup( ). + + ENDMETHOD. + + + METHOD get_js_cc_startup. + + result = ` ` && + z2ui5_cl_cc_timer=>get_js( ) && + z2ui5_cl_cc_focus=>get_js( ) && + z2ui5_cl_cc_title=>get_js( ) && + z2ui5_cl_cc_lp_title=>get_js( ) && + z2ui5_cl_cc_history=>get_js( ) && + z2ui5_cl_cc_scrolling=>get_js( ) && + z2ui5_cl_cc_info=>get_js( ) && + z2ui5_cl_cc_geoloc=>get_js( ) && + z2ui5_cl_cc_file_upl=>get_js( ) && + z2ui5_cl_cc_multiinput=>get_js( ) && + z2ui5_cl_cc_uitable=>get_js( ) && + z2ui5_cl_cc_util=>get_js( ) && + z2ui5_cl_cc_favicon=>get_js( ) && + z2ui5_cl_cc_dirty=>get_js( ) && + ` `. + + ENDMETHOD. + + + METHOD main. + + ms_req-body = mo_server->get_cdata( ). + ms_req-method = mo_server->get_method( ). + + CASE ms_req-method. + WHEN `GET`. + http_get( s_config ). + WHEN `POST`. + http_post( ). + WHEN `HEAD`. + mo_server->set_session_stateful( 0 ). + RETURN. + ENDCASE. + + mo_server->set_cdata( ms_res-body ). + mo_server->set_header_field( n = `cache-control` v = `no-cache` ). + mo_server->set_status( code = 200 reason = `success` ). + + session_handling( ms_session_attributes ). + + ENDMETHOD. + + METHOD factory. + + result = NEW #( ). + result->mo_server = z2ui5_cl_abap_api_http=>factory( server ). + + ENDMETHOD. + + METHOD factory_cloud. + + result = NEW #( ). + result->mo_server = z2ui5_cl_abap_api_http=>factory_cloud( + req = req + res = res ). + + ENDMETHOD. + METHOD http_get. - DATA(lo_get) = NEW z2ui5_cl_core_http_get( val ). - result = lo_get->main( ). + set_config( is_custom_config ). + + DATA(lo_app) = NEW z2ui5_cl_core_ui5_app( ). + ms_res-body = lo_app->index_html( ms_config ). + + NEW z2ui5_cl_core_draft_srv( )->cleanup( ). ENDMETHOD. METHOD http_post. - CLEAR attributes. IF so_sticky_handler IS NOT BOUND. - DATA(lo_post) = NEW z2ui5_cl_core_http_post( val ). + DATA(lo_post) = NEW z2ui5_cl_core_http_post( ms_req-body ). ELSE. - so_sticky_handler = lo_post. + lo_post = so_sticky_handler. + lo_post->mv_request_json = ms_req-body. ENDIF. - result = lo_post->main( + + ms_res-body = lo_post->main( IMPORTING - attributes = attributes ). - - so_sticky_handler = lo_post. - - ENDMETHOD. - - METHOD main. - CLEAR attributes. - - IF body IS INITIAL. - DATA(lo_get) = NEW z2ui5_cl_core_http_get( config ). - result = lo_get->main( ). - ELSE. - IF so_sticky_handler IS NOT BOUND. - DATA(lo_post) = NEW z2ui5_cl_core_http_post( body ). - ELSE. - lo_post = so_sticky_handler. - lo_post->mv_request_json = body. - ENDIF. -* DATA(lo_post) = NEW z2ui5_cl_core_http_post( body ). - result = lo_post->main( - IMPORTING - attributes = attributes ). - ENDIF. + attributes = ms_session_attributes ). TRY. IF lo_post IS BOUND. @@ -89,11 +196,42 @@ CLASS z2ui5_cl_http_handler IMPLEMENTATION. ELSE. CLEAR so_sticky_handler. ENDIF. - ENDIF. CATCH cx_root. ENDTRY. ENDMETHOD. + + METHOD session_handling. + + "transform cookie to header based contextid handling + IF attributes-stateful-switched = abap_true. +* server->set_session_stateful( stateful = attributes-stateful-active ). + mo_server->set_session_stateful( attributes-stateful-active ). + IF mo_server->get_header_field( 'sap-contextid-accept' ) = 'header'. +* server->response->get_cookie( +* EXPORTING +* name = 'sap-contextid' +* IMPORTING +* value = DATA(lv_contextid) ). + DATA(lv_contextid) = mo_server->get_response_cookie( 'sap-contextid' ). + IF lv_contextid IS NOT INITIAL. +* server->response->delete_cookie( 'sap-contextid' ). + mo_server->delete_response_cookie( 'sap-contextid' ). +* server->response->set_header_field( name = 'sap-contextid' value = lv_contextid ). + mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ). + ENDIF. + ENDIF. + ELSE. +* lv_contextid = server->request->get_header_field( 'sap-contextid' ). + lv_contextid = mo_server->get_header_field( 'sap-contextid' ). + IF lv_contextid IS NOT INITIAL. +* server->response->set_header_field( name = 'sap-contextid' value = lv_contextid ). + mo_server->set_header_field( n = 'sap-contextid' v = lv_contextid ). + ENDIF. + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/02/z2ui5_cl_http_handler.clas.testclasses.abap b/src/02/z2ui5_cl_http_handler.clas.testclasses.abap deleted file mode 100644 index 99c01241..00000000 --- a/src/02/z2ui5_cl_http_handler.clas.testclasses.abap +++ /dev/null @@ -1,25 +0,0 @@ -CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING - DURATION MEDIUM - RISK LEVEL HARMLESS. - - PUBLIC SECTION. - PROTECTED SECTION. - - PRIVATE SECTION. - METHODS test_get FOR TESTING RAISING cx_static_check. - -ENDCLASS. - - -CLASS ltcl_unit_test IMPLEMENTATION. - - METHOD test_get. - - DATA(lv_resp) = z2ui5_cl_http_handler=>main( `` ). - IF lv_resp IS INITIAL. - cl_abap_unit_assert=>fail( 'HTTP GET' ). - ENDIF. - - ENDMETHOD. - -ENDCLASS. diff --git a/src/02/z2ui5_cl_http_handler.clas.xml b/src/02/z2ui5_cl_http_handler.clas.xml index d4eeb85b..a1496e54 100644 --- a/src/02/z2ui5_cl_http_handler.clas.xml +++ b/src/02/z2ui5_cl_http_handler.clas.xml @@ -5,12 +5,11 @@ Z2UI5_CL_HTTP_HANDLER E - abap2UI5 - http handler + abap2UI5 - http get handler 1 X X X - X diff --git a/src/02/z2ui5_if_types.intf.abap b/src/02/z2ui5_if_types.intf.abap index fe7c6d9b..9956d8ca 100644 --- a/src/02/z2ui5_if_types.intf.abap +++ b/src/02/z2ui5_if_types.intf.abap @@ -9,12 +9,15 @@ INTERFACE z2ui5_if_types TYPES ty_t_name_value TYPE STANDARD TABLE OF ty_s_name_value WITH EMPTY KEY. TYPES: - BEGIN OF ty_s_http_request_get, - t_config TYPE ty_t_name_value, + BEGIN OF ty_s_http_config, + src TYPE string, + theme TYPE string, content_security_policy TYPE string, + styles_css TYPE string, + title TYPE string, + t_add_config TYPE ty_t_name_value, custom_js TYPE string, - t_param TYPE ty_t_name_value, - END OF ty_s_http_request_get. + END OF ty_s_http_config. TYPES: BEGIN OF ty_s_http_handler_attributes,