mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-29 02:58:20 +08:00
update (#268)
* update * update * update * update * update * update * commit * update * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * update * update * update * update * update
This commit is contained in:
parent
0241be8668
commit
84533639b6
47
README.md
47
README.md
|
@ -1,5 +1,6 @@
|
||||||
# abap2UI5
|
# abap2UI5
|
||||||
Developing UI5 Apps in pure ABAP - follow this project on [**twitter**](https://twitter.com/OblomovDev) to keep up to date and don't forget to explore the [**demo repository**.](https://github.com/oblomov-dev/abap2UI5-demos)
|
<img width="800" alt="image" src="https://github.com/oblomov-dev/abap2UI5/assets/102328295/6adde0de-fe8d-4a9b-8c1e-cf0316e1de8b"><br><br>
|
||||||
|
Follow this project on [**twitter**](https://twitter.com/OblomovDev) to keep up to date and don't forget to explore the [**demo repository** :flashlight:](https://github.com/oblomov-dev/abap2UI5-demos)
|
||||||
#### Features
|
#### Features
|
||||||
* easy to use – implement just one interface for a standalone UI5 application
|
* easy to use – implement just one interface for a standalone UI5 application
|
||||||
* pure ABAP – development using 100% ABAP (no JavaScript, DDL, EML or Customizing)
|
* pure ABAP – development using 100% ABAP (no JavaScript, DDL, EML or Customizing)
|
||||||
|
@ -35,31 +36,9 @@ Developing UI5 Apps in pure ABAP - follow this project on [**twitter**](https://
|
||||||
* Development of UI5 Selection Screens in pure ABAP (former version) [(SCN - 22.01.2023)](https://blogs.sap.com/2023/01/22/abap2ui5-project-development-of-ui5-selection-screens-in-pure-abap-no-app-deployment-or-javascript-needed/)
|
* Development of UI5 Selection Screens in pure ABAP (former version) [(SCN - 22.01.2023)](https://blogs.sap.com/2023/01/22/abap2ui5-project-development-of-ui5-selection-screens-in-pure-abap-no-app-deployment-or-javascript-needed/)
|
||||||
* [work-in-progress] Launchpad integration with the following extension [(abap2UI5_ext-launchpad)](https://github.com/oblomov-dev/abap2UI5_ext-launchpad_app)
|
* [work-in-progress] Launchpad integration with the following extension [(abap2UI5_ext-launchpad)](https://github.com/oblomov-dev/abap2UI5_ext-launchpad_app)
|
||||||
|
|
||||||
#### Demo
|
|
||||||
<img src="https://user-images.githubusercontent.com/102328295/235298442-7e444942-3063-43ff-ad4d-6434ddcc169e.gif" style="width: 55vw; min-width: 330px;"/>
|
|
||||||
|
|
||||||
#### Installation
|
#### Installation
|
||||||
Install with [abapGit](https://abapgit.org), create a new HTTP service and replace the handler method with the following code snippet. For more information, check out this [documentation.](https://blogs.sap.com/2023/04/14/abap2ui5-6-7-installation-configuration-debugging/)
|
Install with [abapGit](https://abapgit.org) , create a new HTTP service and replace the handler method with the following code snippet:
|
||||||
|
##### Standard ABAP :computer:
|
||||||
##### ABAP for Cloud:
|
|
||||||
```abap
|
|
||||||
METHOD if_http_service_extension~handle_request.
|
|
||||||
|
|
||||||
z2ui5_cl_http_handler=>client = VALUE #(
|
|
||||||
t_header = request->get_header_fields( )
|
|
||||||
t_param = request->get_form_fields( )
|
|
||||||
body = request->get_text( ) ).
|
|
||||||
|
|
||||||
DATA(lv_resp) = SWITCH #( request->get_method( )
|
|
||||||
WHEN 'GET' THEN z2ui5_cl_http_handler=>http_get( )
|
|
||||||
WHEN 'POST' THEN z2ui5_cl_http_handler=>http_post( ) ).
|
|
||||||
|
|
||||||
response->set_status( 200 )->set_text( lv_resp ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Standard ABAP:
|
|
||||||
```abap
|
```abap
|
||||||
METHOD if_http_extension~handle_request.
|
METHOD if_http_extension~handle_request.
|
||||||
|
|
||||||
|
@ -81,9 +60,27 @@ METHOD if_http_extension~handle_request.
|
||||||
server->response->set_cdata( lv_resp ).
|
server->response->set_cdata( lv_resp ).
|
||||||
server->response->set_status( code = 200 reason = 'success' ).
|
server->response->set_status( code = 200 reason = 'success' ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
```
|
||||||
|
##### ABAP for Cloud :cloud:
|
||||||
|
```abap
|
||||||
|
METHOD if_http_service_extension~handle_request.
|
||||||
|
|
||||||
|
z2ui5_cl_http_handler=>client = VALUE #(
|
||||||
|
t_header = request->get_header_fields( )
|
||||||
|
t_param = request->get_form_fields( )
|
||||||
|
body = request->get_text( ) ).
|
||||||
|
|
||||||
|
DATA(lv_resp) = SWITCH #( request->get_method( )
|
||||||
|
WHEN 'GET' THEN z2ui5_cl_http_handler=>http_get( )
|
||||||
|
WHEN 'POST' THEN z2ui5_cl_http_handler=>http_post( ) ).
|
||||||
|
|
||||||
|
response->set_status( 200 )->set_text( lv_resp ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
```
|
```
|
||||||
#### FAQ
|
#### FAQ
|
||||||
|
* check out this [documentation](https://blogs.sap.com/2023/04/14/abap2ui5-6-7-installation-configuration-debugging/) for detailed installation guidelines<br>
|
||||||
* read these [instructions](https://blogs.sap.com/2023/02/22/abap2ui5-development-of-ui5-apps-in-pure-abap-1-3/) when you develop your first app<br>
|
* read these [instructions](https://blogs.sap.com/2023/02/22/abap2ui5-development-of-ui5-apps-in-pure-abap-1-3/) when you develop your first app<br>
|
||||||
* want to configure the theme, bootstrapping, language and title? see [configuration & debugging](https://blogs.sap.com/2023/04/14/abap2ui5-6-7-installation-configuration-debugging/)
|
* want to configure the theme, bootstrapping, language and title? see [configuration & debugging](https://blogs.sap.com/2023/04/14/abap2ui5-6-7-installation-configuration-debugging/)
|
||||||
* as always - your comments, questions, wishes and bugs are welcome, please create an [issue](https://github.com/oblomov-dev/ABAP2UI5/issues)
|
* as always - your comments, questions, wishes and bugs are welcome, please create an [issue](https://github.com/oblomov-dev/ABAP2UI5/issues)
|
||||||
|
|
|
@ -8,15 +8,11 @@ CLASS z2ui5_cl_app_hello_world DEFINITION PUBLIC.
|
||||||
DATA quantity TYPE string.
|
DATA quantity TYPE string.
|
||||||
DATA check_initialized TYPE abap_bool.
|
DATA check_initialized TYPE abap_bool.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS Z2UI5_CL_APP_HELLO_WORLD IMPLEMENTATION.
|
CLASS Z2UI5_CL_APP_HELLO_WORLD IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD z2ui5_if_app~main.
|
METHOD z2ui5_if_app~main.
|
||||||
|
|
||||||
IF check_initialized = abap_false.
|
IF check_initialized = abap_false.
|
||||||
|
|
|
@ -95,9 +95,6 @@ CLASS Z2UI5_CL_HTTP_HANDLER IMPLEMENTATION.
|
||||||
` onAfterRendering: function () {` && |\n| &&
|
` onAfterRendering: function () {` && |\n| &&
|
||||||
` sap.z2ui5.onAfter();` && |\n| &&
|
` sap.z2ui5.onAfter();` && |\n| &&
|
||||||
` },` && |\n| &&
|
` },` && |\n| &&
|
||||||
` do: function (value) {` && |\n| &&
|
|
||||||
` return value;` && |\n| &&
|
|
||||||
` },` && |\n| &&
|
|
||||||
` onEventFrontend: function (vAction) {` && |\n| &&
|
` onEventFrontend: function (vAction) {` && |\n| &&
|
||||||
|\n| &&
|
|\n| &&
|
||||||
` if (vAction == 'POPUP_CLOSE') {` && |\n| &&
|
` if (vAction == 'POPUP_CLOSE') {` && |\n| &&
|
||||||
|
@ -191,7 +188,7 @@ CLASS Z2UI5_CL_HTTP_HANDLER IMPLEMENTATION.
|
||||||
` return;` && |\n| &&
|
` return;` && |\n| &&
|
||||||
` }` && |\n| &&
|
` }` && |\n| &&
|
||||||
|\n| &&
|
|\n| &&
|
||||||
` var oModel = new sap.ui.model.json.JSONModel(sap.z2ui5.oResponse.OVIEWMODEL.oViewModel);` && |\n| &&
|
` var oModel = new sap.ui.model.json.JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| &&
|
||||||
` var oView = new sap.ui.core.mvc.XMLView.create({` && |\n| &&
|
` var oView = new sap.ui.core.mvc.XMLView.create({` && |\n| &&
|
||||||
` definition: sap.z2ui5.oResponse.PARAMS.XML_MAIN,` && |\n| &&
|
` definition: sap.z2ui5.oResponse.PARAMS.XML_MAIN,` && |\n| &&
|
||||||
` }).then(oView => {` && |\n| &&
|
` }).then(oView => {` && |\n| &&
|
||||||
|
|
|
@ -761,6 +761,8 @@ CLASS z2ui5_lcl_fw_handler DEFINITION.
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(result) TYPE REF TO z2ui5_lcl_fw_handler.
|
VALUE(result) TYPE REF TO z2ui5_lcl_fw_handler.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
METHODS set_app_leave
|
METHODS set_app_leave
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(result) TYPE REF TO z2ui5_lcl_fw_handler.
|
VALUE(result) TYPE REF TO z2ui5_lcl_fw_handler.
|
||||||
|
@ -777,9 +779,18 @@ CLASS z2ui5_lcl_fw_handler DEFINITION.
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(result) TYPE REF TO z2ui5_lcl_fw_handler.
|
VALUE(result) TYPE REF TO z2ui5_lcl_fw_handler.
|
||||||
|
|
||||||
METHODS request_end_model
|
CLASS-METHODS bind_front_2_back
|
||||||
|
IMPORTING
|
||||||
|
lo_model TYPE REF TO z2ui5_lcl_utility_tree_json
|
||||||
|
lo_app TYPE REF TO object
|
||||||
|
t_attri TYPE z2ui5_lcl_utility=>ty_t_attri ##NEEDED.
|
||||||
|
|
||||||
|
CLASS-METHODS bind_back_2_front
|
||||||
|
IMPORTING
|
||||||
|
lo_app TYPE REF TO object
|
||||||
|
t_attri TYPE z2ui5_lcl_utility=>ty_t_attri
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(r_view_model) TYPE REF TO z2ui5_lcl_utility_tree_json.
|
VALUE(result) TYPE string ##NEEDED.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
@ -1150,6 +1161,7 @@ CLASS z2ui5_lcl_fw_db IMPLEMENTATION.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
|
||||||
DATA(ls_db) = VALUE z2ui5_t_draft(
|
DATA(ls_db) = VALUE z2ui5_t_draft(
|
||||||
uuid = id
|
uuid = id
|
||||||
uuid_prev = db-id_prev
|
uuid_prev = db-id_prev
|
||||||
|
@ -1245,31 +1257,23 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
|
||||||
lo_resp->add_attribute( n = `PARAMS` v = z2ui5_lcl_utility=>trans_any_2_json( ms_next-s_set ) apos_active = abap_false ).
|
lo_resp->add_attribute( n = `PARAMS` v = z2ui5_lcl_utility=>trans_any_2_json( ms_next-s_set ) apos_active = abap_false ).
|
||||||
lo_resp->add_attribute( n = `S_MSG` v = z2ui5_lcl_utility=>trans_any_2_json( ms_next-s_msg ) apos_active = abap_false ).
|
lo_resp->add_attribute( n = `S_MSG` v = z2ui5_lcl_utility=>trans_any_2_json( ms_next-s_msg ) apos_active = abap_false ).
|
||||||
lo_resp->add_attribute( n = `ID` v = ms_db-id ).
|
lo_resp->add_attribute( n = `ID` v = ms_db-id ).
|
||||||
lo_resp->add_attribute_object( `OVIEWMODEL` )->add_attribute_instance( request_end_model( ) ).
|
|
||||||
|
lo_resp->add_attribute( n = `OVIEWMODEL` v = bind_back_2_front( lo_app = ms_db-o_app t_attri = ms_db-t_attri ) apos_active = abap_false ).
|
||||||
result = lo_resp->get_root( )->stringify( ).
|
result = lo_resp->get_root( )->stringify( ).
|
||||||
|
|
||||||
|
DELETE ms_db-t_attri WHERE bind_type = cs_bind_type-one_time.
|
||||||
z2ui5_lcl_fw_db=>create( id = ms_db-id db = ms_db ).
|
z2ui5_lcl_fw_db=>create( id = ms_db-id db = ms_db ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD set_app_client.
|
METHOD bind_front_2_back.
|
||||||
|
|
||||||
CONSTANTS c_prefix TYPE string VALUE `LO_APP->`.
|
CONSTANTS c_prefix TYPE string VALUE `LO_APP->`.
|
||||||
|
|
||||||
result = NEW #( ).
|
|
||||||
result->ms_db-id = z2ui5_lcl_utility=>get_uuid( ).
|
|
||||||
DATA(lv_id) = result->ms_db-id.
|
|
||||||
result->ms_db = z2ui5_lcl_fw_db=>load_app( id_prev ).
|
|
||||||
result->ms_db-id = lv_id.
|
|
||||||
result->ms_db-id_prev = id_prev.
|
|
||||||
|
|
||||||
DATA(lo_app) = CAST object( result->ms_db-o_app ) ##NEEDED.
|
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
|
|
||||||
DATA(lo_model) = mo_body->get_attribute( `OUPDATE` ).
|
LOOP AT t_attri REFERENCE INTO DATA(lr_attri)
|
||||||
|
|
||||||
LOOP AT result->ms_db-t_attri REFERENCE INTO DATA(lr_attri)
|
|
||||||
WHERE bind_type = cs_bind_type-two_way.
|
WHERE bind_type = cs_bind_type-two_way.
|
||||||
|
|
||||||
FIELD-SYMBOLS <attribute> TYPE any.
|
FIELD-SYMBOLS <attribute> TYPE any.
|
||||||
|
@ -1321,6 +1325,80 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
|
||||||
CATCH cx_root.
|
CATCH cx_root.
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD bind_back_2_front.
|
||||||
|
|
||||||
|
CONSTANTS c_prefix TYPE string VALUE `LO_APP->`.
|
||||||
|
|
||||||
|
DATA(r_view_model) = z2ui5_lcl_utility_tree_json=>factory( ).
|
||||||
|
r_view_model->mv_name = `oViewModel`.
|
||||||
|
DATA(lo_update) = r_view_model->add_attribute_object( `oUpdate` ).
|
||||||
|
|
||||||
|
LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
|
||||||
|
|
||||||
|
IF lr_attri->bind_type = cs_bind_type-one_time.
|
||||||
|
r_view_model->add_attribute( n = lr_attri->name v = lr_attri->data_stringify apos_active = abap_false ).
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
DATA(lo_actual) = COND #( WHEN lr_attri->bind_type = cs_bind_type-one_way
|
||||||
|
THEN r_view_model
|
||||||
|
ELSE lo_update ).
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <attribute> TYPE any.
|
||||||
|
DATA(lv_name) = c_prefix && to_upper( lr_attri->name ).
|
||||||
|
ASSIGN (lv_name) TO <attribute>.
|
||||||
|
z2ui5_lcl_utility=>raise( when = xsdbool( sy-subrc <> 0 ) ).
|
||||||
|
|
||||||
|
IF lr_attri->gen_kind IS NOT INITIAL.
|
||||||
|
lv_name = '<ATTRIBUTE>->*'.
|
||||||
|
ASSIGN (lv_name) TO <attribute>.
|
||||||
|
lr_attri->type_kind = lr_attri->gen_type_kind.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CASE lr_attri->type_kind.
|
||||||
|
|
||||||
|
WHEN `h`.
|
||||||
|
lo_actual->add_attribute( n = lr_attri->name
|
||||||
|
v = z2ui5_lcl_utility=>trans_any_2_json( <attribute> )
|
||||||
|
apos_active = abap_false ).
|
||||||
|
|
||||||
|
WHEN OTHERS.
|
||||||
|
|
||||||
|
CASE lr_attri->type.
|
||||||
|
|
||||||
|
WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
|
||||||
|
|
||||||
|
lo_actual->add_attribute(
|
||||||
|
n = lr_attri->name
|
||||||
|
v = SWITCH #( <attribute> WHEN abap_true THEN `true` ELSE `false` )
|
||||||
|
apos_active = abap_false ).
|
||||||
|
|
||||||
|
WHEN OTHERS.
|
||||||
|
|
||||||
|
lo_actual->add_attribute(
|
||||||
|
n = lr_attri->name
|
||||||
|
v = /ui2/cl_json=>serialize( <attribute> )
|
||||||
|
apos_active = abap_false ).
|
||||||
|
ENDCASE.
|
||||||
|
ENDCASE.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
result = r_view_model->stringify( ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD set_app_client.
|
||||||
|
|
||||||
|
result = NEW #( ).
|
||||||
|
result->ms_db-id = z2ui5_lcl_utility=>get_uuid( ).
|
||||||
|
DATA(lv_id) = result->ms_db-id.
|
||||||
|
result->ms_db = z2ui5_lcl_fw_db=>load_app( id_prev ).
|
||||||
|
result->ms_db-id = lv_id.
|
||||||
|
result->ms_db-id_prev = id_prev.
|
||||||
|
|
||||||
DATA(lo_arg) = mo_body->get_attribute( `ARGUMENTS` ).
|
DATA(lo_arg) = mo_body->get_attribute( `ARGUMENTS` ).
|
||||||
TRY.
|
TRY.
|
||||||
|
@ -1344,6 +1422,12 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
|
||||||
CATCH cx_root.
|
CATCH cx_root.
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
|
bind_front_2_back(
|
||||||
|
lo_model = mo_body->get_attribute( `OUPDATE` )
|
||||||
|
lo_app = result->ms_db-o_app
|
||||||
|
t_attri = result->ms_db-t_attri
|
||||||
|
).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1367,7 +1451,6 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
CREATE OBJECT result->ms_db-o_app TYPE (lv_classname).
|
CREATE OBJECT result->ms_db-o_app TYPE (lv_classname).
|
||||||
CATCH cx_root.
|
CATCH cx_root.
|
||||||
|
@ -1539,70 +1622,6 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD request_end_model.
|
|
||||||
|
|
||||||
CONSTANTS c_prefix TYPE string VALUE `LO_APP->`.
|
|
||||||
|
|
||||||
DATA(lo_app) = CAST object( ms_db-o_app ) ##NEEDED.
|
|
||||||
r_view_model = z2ui5_lcl_utility_tree_json=>factory( ).
|
|
||||||
r_view_model->mv_name = `oViewModel`.
|
|
||||||
DATA(lo_update) = r_view_model->add_attribute_object( `oUpdate` ).
|
|
||||||
|
|
||||||
LOOP AT ms_db-t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
|
|
||||||
|
|
||||||
IF lr_attri->bind_type = cs_bind_type-one_time.
|
|
||||||
r_view_model->add_attribute( n = lr_attri->name v = lr_attri->data_stringify apos_active = abap_false ).
|
|
||||||
CONTINUE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
DATA(lo_actual) = COND #( WHEN lr_attri->bind_type = cs_bind_type-one_way
|
|
||||||
THEN r_view_model
|
|
||||||
ELSE lo_update ).
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <attribute> TYPE any.
|
|
||||||
DATA(lv_name) = c_prefix && to_upper( lr_attri->name ).
|
|
||||||
ASSIGN (lv_name) TO <attribute>.
|
|
||||||
z2ui5_lcl_utility=>raise( when = xsdbool( sy-subrc <> 0 ) ).
|
|
||||||
|
|
||||||
IF lr_attri->gen_kind IS NOT INITIAL.
|
|
||||||
lv_name = '<ATTRIBUTE>->*'.
|
|
||||||
ASSIGN (lv_name) TO <attribute>.
|
|
||||||
lr_attri->type_kind = lr_attri->gen_type_kind.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CASE lr_attri->type_kind.
|
|
||||||
|
|
||||||
WHEN `h`.
|
|
||||||
lo_actual->add_attribute( n = lr_attri->name
|
|
||||||
v = z2ui5_lcl_utility=>trans_any_2_json( <attribute> )
|
|
||||||
apos_active = abap_false ).
|
|
||||||
|
|
||||||
WHEN OTHERS.
|
|
||||||
|
|
||||||
CASE lr_attri->type.
|
|
||||||
|
|
||||||
WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
|
|
||||||
|
|
||||||
lo_actual->add_attribute(
|
|
||||||
n = lr_attri->name
|
|
||||||
v = SWITCH #( <attribute> WHEN abap_true THEN `true` ELSE `false` )
|
|
||||||
apos_active = abap_false ).
|
|
||||||
|
|
||||||
WHEN OTHERS.
|
|
||||||
|
|
||||||
lo_actual->add_attribute(
|
|
||||||
n = lr_attri->name
|
|
||||||
v = /ui2/cl_json=>serialize( <attribute> )
|
|
||||||
apos_active = abap_false ).
|
|
||||||
ENDCASE.
|
|
||||||
ENDCASE.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
DELETE ms_db-t_attri WHERE bind_type = cs_bind_type-one_time.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS z2ui5_lcl_fw_client IMPLEMENTATION.
|
CLASS z2ui5_lcl_fw_client IMPLEMENTATION.
|
||||||
|
@ -1720,3 +1739,99 @@ CLASS z2ui5_lcl_fw_client IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS z2ui5_lcl_fw_view DEFINITION.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS read_view
|
||||||
|
RETURNING
|
||||||
|
VALUE(result) TYPE string.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS z2ui5_lcl_fw_view IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD read_view.
|
||||||
|
|
||||||
|
result = `<mvc:View ` && |\n| &&
|
||||||
|
` xmlns="sap.m" ` && |\n| &&
|
||||||
|
` xmlns:z2ui5="z2ui5" ` && |\n| &&
|
||||||
|
` xmlns:core="sap.ui.core" ` && |\n| &&
|
||||||
|
` xmlns:mvc="sap.ui.core.mvc" ` && |\n| &&
|
||||||
|
` xmlns:layout="sap.ui.layout" ` && |\n| &&
|
||||||
|
` xmlns:f="sap.f" ` && |\n| &&
|
||||||
|
` xmlns:form="sap.ui.layout.form" ` && |\n| &&
|
||||||
|
` xmlns:editor="sap.ui.codeeditor" ` && |\n| &&
|
||||||
|
` xmlns:mchart="sap.suite.ui.microchart" ` && |\n| &&
|
||||||
|
` xmlns:webc="sap.ui.webc.main" ` && |\n| &&
|
||||||
|
` xmlns:uxap="sap.uxap" ` && |\n| &&
|
||||||
|
` xmlns:sap="sap" ` && |\n| &&
|
||||||
|
` xmlns:text="sap.ui.richtextedito" ` && |\n| &&
|
||||||
|
` xmlns:html="http://www.w3.org/1999/xhtml" ` && |\n| &&
|
||||||
|
` displayBlock="true" ` && |\n| &&
|
||||||
|
` height="100%" ` && |\n| &&
|
||||||
|
` controllerName="z2ui5_controller" ` && |\n| &&
|
||||||
|
` > <Shell ` && |\n| &&
|
||||||
|
` > <Page ` && |\n| &&
|
||||||
|
` title="abap2UI5 - z2ui5_cl_app_hello_world" ` && |\n| &&
|
||||||
|
` > <form:SimpleForm ` && |\n| &&
|
||||||
|
` title="Hello World" ` && |\n| &&
|
||||||
|
` editable="true" ` && |\n| &&
|
||||||
|
` > <form:content ` && |\n| &&
|
||||||
|
` > <Title ` && |\n| &&
|
||||||
|
` text="Make an input here and send it to the server..." ` && |\n| &&
|
||||||
|
` /> <Label ` && |\n| &&
|
||||||
|
` text="quantity" ` && |\n| &&
|
||||||
|
` /> <Input ` && |\n| &&
|
||||||
|
` value="onEvent( {/oUpdate/QUANTITY} )` && |\n| &&
|
||||||
|
` /> <Label ` && |\n| &&
|
||||||
|
` text="product" ` && |\n| &&
|
||||||
|
` /> <Input ` && |\n| &&
|
||||||
|
` enabled="false" ` && |\n| &&
|
||||||
|
` value="{VALUE}" ` && |\n| &&
|
||||||
|
` /> <Button ` && |\n| &&
|
||||||
|
` press="onEvent( { 'EVENT' : 'BUTTON_POST', 'METHOD' : 'UPDATE' , 'isHoldView' : false })" ` && |\n| &&
|
||||||
|
` text="post" ` && |\n| &&
|
||||||
|
` /></form:content></form:SimpleForm></Page></Shell></mvc:View>`.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS z2ui5_lcl_fw_view_app DEFINITION.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES z2ui5_if_app.
|
||||||
|
|
||||||
|
DATA quantity TYPE string VALUE `10` ##NEEDED.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS z2ui5_lcl_fw_view_app IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD z2ui5_if_app~main.
|
||||||
|
|
||||||
|
DATA(lt_attri) = z2ui5_lcl_utility=>get_t_attri_by_ref( me ).
|
||||||
|
DATA(lv_view) = z2ui5_lcl_fw_view=>read_view( ).
|
||||||
|
|
||||||
|
SPLIT lv_view AT `{` INTO TABLE DATA(lt_view).
|
||||||
|
DELETE lt_view INDEX 1.
|
||||||
|
|
||||||
|
LOOP AT lt_view INTO DATA(lr_view).
|
||||||
|
SPLIT lr_view AT `}` INTO lr_view DATA(lv_dummy).
|
||||||
|
|
||||||
|
LOOP AT lt_attri REFERENCE INTO DATA(lr_attri).
|
||||||
|
IF lr_view = `/oUpdate/` && lr_attri->name.
|
||||||
|
lr_attri->bind_type = z2ui5_lcl_fw_handler=>cs_bind_type-two_way.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lr_view = lr_attri->name.
|
||||||
|
lr_attri->bind_type = z2ui5_lcl_fw_handler=>cs_bind_type-one_way.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
client->set_next( VALUE #( xml_main = lv_view ) ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
|
@ -522,7 +522,7 @@ CLASS ltcl_unit_02_app_start IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS <val> TYPE any.
|
FIELD-SYMBOLS <val> TYPE any.
|
||||||
UNASSIGN <val>.
|
UNASSIGN <val>.
|
||||||
DATA(lv_assign) = `OVIEWMODEL->OVIEWMODEL->QUANTITY->*`.
|
DATA(lv_assign) = `OVIEWMODEL->QUANTITY->*`.
|
||||||
ASSIGN lo_data->(lv_assign) TO <val>.
|
ASSIGN lo_data->(lv_assign) TO <val>.
|
||||||
IF <val> <> `500`.
|
IF <val> <> `500`.
|
||||||
cl_abap_unit_assert=>fail( msg = 'data binding - initial set oUpdate wrong' quit = 5 ).
|
cl_abap_unit_assert=>fail( msg = 'data binding - initial set oUpdate wrong' quit = 5 ).
|
||||||
|
@ -548,7 +548,7 @@ CLASS ltcl_unit_02_app_start IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS <val> TYPE any.
|
FIELD-SYMBOLS <val> TYPE any.
|
||||||
UNASSIGN <val>.
|
UNASSIGN <val>.
|
||||||
DATA(lv_assign) = `OVIEWMODEL->OVIEWMODEL->OUPDATE->QUANTITY->*`.
|
DATA(lv_assign) = `OVIEWMODEL->OUPDATE->QUANTITY->*`.
|
||||||
ASSIGN lo_data->(lv_assign) TO <val>.
|
ASSIGN lo_data->(lv_assign) TO <val>.
|
||||||
IF <val> <> `500`.
|
IF <val> <> `500`.
|
||||||
cl_abap_unit_assert=>fail( msg = 'data binding - initial set oUpdate wrong' quit = 5 ).
|
cl_abap_unit_assert=>fail( msg = 'data binding - initial set oUpdate wrong' quit = 5 ).
|
||||||
|
@ -907,7 +907,7 @@ CLASS ltcl_unit_03_app_ajax IMPLEMENTATION.
|
||||||
data = lo_data ).
|
data = lo_data ).
|
||||||
|
|
||||||
UNASSIGN <val>.
|
UNASSIGN <val>.
|
||||||
lv_assign = `OVIEWMODEL->OVIEWMODEL->OUPDATE->QUANTITY->*`.
|
lv_assign = `OVIEWMODEL->OUPDATE->QUANTITY->*`.
|
||||||
ASSIGN lo_data->(lv_assign) TO <val>.
|
ASSIGN lo_data->(lv_assign) TO <val>.
|
||||||
IF <val> <> `600`.
|
IF <val> <> `600`.
|
||||||
cl_abap_unit_assert=>fail( msg = 'data binding - frontend updated value wrong after roundtrip' quit = 5 ).
|
cl_abap_unit_assert=>fail( msg = 'data binding - frontend updated value wrong after roundtrip' quit = 5 ).
|
||||||
|
@ -1071,7 +1071,7 @@ CLASS ltcl_unit_04_deep_data IMPLEMENTATION.
|
||||||
UNASSIGN <val>.
|
UNASSIGN <val>.
|
||||||
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
|
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
|
||||||
FIELD-SYMBOLS <row> TYPE REF TO data.
|
FIELD-SYMBOLS <row> TYPE REF TO data.
|
||||||
DATA(lv_assign) = `OVIEWMODEL->OVIEWMODEL->T_TAB->*`.
|
DATA(lv_assign) = `OVIEWMODEL->T_TAB->*`.
|
||||||
ASSIGN lo_data->(lv_assign) TO <tab>.
|
ASSIGN lo_data->(lv_assign) TO <tab>.
|
||||||
ASSIGN <tab>[ 1 ] TO <row>.
|
ASSIGN <tab>[ 1 ] TO <row>.
|
||||||
|
|
||||||
|
@ -1119,7 +1119,7 @@ CLASS ltcl_unit_04_deep_data IMPLEMENTATION.
|
||||||
UNASSIGN <val>.
|
UNASSIGN <val>.
|
||||||
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
|
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
|
||||||
FIELD-SYMBOLS <row> TYPE REF TO data.
|
FIELD-SYMBOLS <row> TYPE REF TO data.
|
||||||
DATA(lv_assign) = `OVIEWMODEL->OVIEWMODEL->OUPDATE->T_TAB->*`.
|
DATA(lv_assign) = `OVIEWMODEL->OUPDATE->T_TAB->*`.
|
||||||
ASSIGN lo_data->(lv_assign) TO <tab>.
|
ASSIGN lo_data->(lv_assign) TO <tab>.
|
||||||
ASSIGN <tab>[ 1 ] TO <row>.
|
ASSIGN <tab>[ 1 ] TO <row>.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user