En este tutorial, donde sea XXX
aparecer, utilice un número (p. ej. 000
).
Paso 1: crea una definición de comportamiento
Clic derecho en
Z_I_ROOM_XXX
(definición de datos) y seleccione Nueva definición de comportamiento.Crea tu comportamiento de definición:
- Nombre:
Z_I_ROOM_XXX
- Suelte:
Behavior for Z_I_ROOM_XXX
- Entidad raíz:
Z_I_ROOM_XXX
Hacer clic Siguiente>.
- Nombre:
Hacer clic Finalizar.
Cree su definición de comportamiento con la siguiente codificación:
implementation unmanaged; define behavior for Z_I_ROOM_XXX alias room lock master etag master lastchangeddatetime { create; update; delete; field (mandatory) id; field (read only) lastchangedbyuser, lastchangeddatetime; }
Guardar y activar.
Hecho
Inicie sesión para responder la pregunta
Paso 2: crear una implementación conductual
Clic derecho en
Z_I_ROOM_XXX
(definición de comportamiento) y seleccione Nueva implementación de comportamiento.Crea tu implementación de transporte:
- Nombre:
Z_I_ROOM_BEHAVE_XXX
- Suelte:
Behavior implementation for Z_I_ROOM_XXX
- Definición de comportamiento:
Z_I_ROOM_XXX
Hacer clic Siguiente>.
- Nombre:
Hacer clic Finalizar.
Cree su implementación conductual con la siguiente codificación:
CLASS lcl_handler DEFINITION INHERITING FROM cl_abap_behavior_handler. PUBLIC SECTION. CLASS-DATA: mt_root_to_create TYPE STANDARD TABLE OF zroom_xxx WITH NON-UNIQUE DEFAULT KEY, mt_root_to_update TYPE STANDARD TABLE OF zroom_xxx WITH NON-UNIQUE DEFAULT KEY, mt_root_to_delete TYPE STANDARD TABLE OF zroom_xxx WITH NON-UNIQUE DEFAULT KEY. PRIVATE SECTION. TYPES: ty_action(2) TYPE c, tt_message TYPE TABLE OF symsg, tt_room_failed TYPE TABLE FOR FAILED z_i_room_xxx, tt_room_reported TYPE TABLE FOR REPORTED z_i_room_xxx. CONSTANTS: BEGIN OF cs_action, create TYPE ty_action VALUE '01', update TYPE ty_action VALUE '02', delete TYPE ty_action VALUE '03', END OF cs_action. METHODS: create FOR MODIFY IMPORTING roots_to_create FOR CREATE room, update FOR MODIFY IMPORTING roots_to_update FOR UPDATE room, delete FOR MODIFY IMPORTING roots_to_delete FOR DELETE room, lock FOR BEHAVIOR IMPORTING roots_to_lock FOR LOCK room, read FOR BEHAVIOR IMPORTING roots_to_read FOR READ room RESULT et_room, validate IMPORTING iv_action TYPE ty_action is_room TYPE zroom_xxx RETURNING VALUE(rv_message) TYPE string. ENDCLASS. CLASS lcl_handler IMPLEMENTATION. METHOD create. LOOP AT roots_to_create INTO DATA(ls_root_to_create). DATA(lv_message) = validate( iv_action = cs_action-create is_room = CORRESPONDING zroom_xxx( ls_root_to_create ) ). IF lv_message IS INITIAL. ls_root_to_create-lastchangedbyuser = sy-uname. GET TIME STAMP FIELD ls_root_to_create-lastchangeddatetime. INSERT CORRESPONDING #( ls_root_to_create ) INTO TABLE mapped-room. INSERT CORRESPONDING #( ls_root_to_create ) INTO TABLE mt_root_to_create. ELSE. APPEND VALUE #( %cid = ls_root_to_create-%cid id = ls_root_to_create-id %fail = VALUE #( cause = if_abap_behv=>cause-unspecific ) ) TO failed-room. APPEND VALUE #( %cid = ls_root_to_create-%cid id = ls_root_to_create-id %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = lv_message ) ) TO reported-room. ENDIF. ENDLOOP. ENDMETHOD. METHOD update. LOOP AT roots_to_update INTO DATA(ls_root_to_update). SELECT SINGLE FROM zroom_xxx FIELDS * WHERE id = @ls_root_to_update-id INTO @DATA(ls_room). DATA(lt_control_components) = VALUE string_table( ( `id` ) ( `seats` ) ( `location` ) ( `hasbeamer` ) ( `hasvideo` ) ( `userrating` ) ( `lastchangedbydatetime` ) ( `lastchangedbyuser` ) ). LOOP AT lt_control_components INTO DATA(lv_component_name). ASSIGN COMPONENT lv_component_name OF STRUCTURE ls_root_to_update-%control TO FIELD-SYMBOL(<lv_control_value>). CHECK <lv_control_value> = cl_abap_behavior_handler=>flag_changed. ASSIGN COMPONENT lv_component_name OF STRUCTURE ls_root_to_update TO FIELD-SYMBOL(<lv_new_value>). ASSIGN COMPONENT lv_component_name OF STRUCTURE ls_room TO FIELD-SYMBOL(<lv_old_value>). <lv_old_value> = <lv_new_value>. ENDLOOP. DATA(lv_message) = validate( iv_action = cs_action-update is_room = ls_room ). IF lv_message IS INITIAL. ls_root_to_update-lastchangedbyuser = sy-uname. GET TIME STAMP FIELD ls_root_to_update-lastchangeddatetime. INSERT ls_room INTO TABLE mt_root_to_update. ELSE. APPEND VALUE #( %cid = ls_root_to_update-%cid_ref id = ls_root_to_update-id %fail = VALUE #( cause = if_abap_behv=>cause-unspecific ) ) TO failed-room. APPEND VALUE #( %cid = ls_root_to_update-%cid_ref id = ls_root_to_update-id %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = lv_message ) ) TO reported-room. ENDIF. ENDLOOP. ENDMETHOD. METHOD delete. LOOP AT roots_to_delete INTO DATA(ls_root_to_delete). SELECT SINGLE FROM zroom_xxx FIELDS * WHERE id = @ls_root_to_delete-id INTO @DATA(ls_room). DATA(lv_message) = validate( iv_action = cs_action-delete is_room = ls_room ). IF lv_message IS INITIAL. INSERT CORRESPONDING #( ls_root_to_delete ) INTO TABLE mt_root_to_delete. ELSE. APPEND VALUE #( %cid = ls_root_to_delete-%cid_ref id = ls_root_to_delete-id %fail = VALUE #( cause = if_abap_behv=>cause-unspecific ) ) TO failed-room. APPEND VALUE #( %cid = ls_root_to_delete-%cid_ref id = ls_root_to_delete-id %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = lv_message ) ) TO reported-room. ENDIF. ENDLOOP. ENDMETHOD. METHOD lock. LOOP AT roots_to_lock INTO DATA(ls_root_to_lock). TRY. cl_abap_lock_object_factory=>get_instance( iv_name = 'EZROOMXXX')->enqueue( it_table_mode = VALUE if_abap_lock_object=>tt_table_mode( ( table_name = 'ZROOM_XXX' ) ) it_parameter = VALUE if_abap_lock_object=>tt_parameter( ( name = 'ID' value = REF #( ls_root_to_lock-id ) ) ) ). CATCH cx_abap_foreign_lock INTO DATA(lx_lock). APPEND VALUE #( id = ls_root_to_lock-id %fail = VALUE #( cause = if_abap_behv=>cause-locked ) ) TO failed-room. APPEND VALUE #( id = ls_root_to_lock-id %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = lx_lock->get_text( ) ) ) TO reported-room. CATCH cx_abap_lock_failure. ASSERT 1 = 0. ENDTRY. ENDLOOP. ENDMETHOD. METHOD read. LOOP AT roots_to_read INTO DATA(ls_root_to_read). SELECT SINGLE FROM z_i_room_xxx FIELDS * WHERE id = @ls_root_to_read-id INTO @DATA(ls_room). INSERT ls_room INTO TABLE et_room. ENDLOOP. ENDMETHOD. METHOD validate. "Add method from Tutorial: Create authorization in SAP Cloud Platform ABAP environment (Step 4) ENDMETHOD. ENDCLASS. CLASS lcl_saver DEFINITION INHERITING FROM cl_abap_behavior_saver. PROTECTED SECTION. METHODS finalize REDEFINITION. METHODS check_before_save REDEFINITION. METHODS save REDEFINITION. ENDCLASS. CLASS lcl_saver IMPLEMENTATION. METHOD finalize. ENDMETHOD. METHOD check_before_save. ENDMETHOD. METHOD save. INSERT zroom_xxx FROM TABLE @lcl_handler=>mt_root_to_create. UPDATE zroom_xxx FROM TABLE @lcl_handler=>mt_root_to_update. DELETE zroom_xxx FROM TABLE @lcl_handler=>mt_root_to_delete. ENDMETHOD. ENDCLASS.
Guardar y activar.
Hecho
Inicie sesión para responder la pregunta
Paso 3: crear una definición de servicio
Clic derecho en
Z_ROOM_XXX
, seleccione la ruta del menú Nuevo > Otro propósito del repositorio ABAP.Crea tu definición de servicio:
- Nombre:
Z_I_ROOM_SRV_XXX
- Suelte:
Room
Hacer clic Siguiente>.
- Nombre:
Hacer clic Finalizar.
Edite su definición de servicio:
@EndUserText.label: 'Room' define service Z_I_ROOM_SRV_XXX { expose Z_I_ROOM_XXX as Room; }
Guardar y activar.
Hecho
Inicie sesión para responder la pregunta
Paso 4: crea una carpeta de servicios
Clic derecho en
Z_I_ROOM_SRV_XXX
y seleccione Nueva conexión de servicio.Crea tu servicio vinculante:
- Nombre:
Z_I_ROOM_BND_XXX
- Suelte:
Room
- Tipo de encuadernación:
ODATA V2
- Definición de servicio:
Z_I_ROOM_SRV_XXX
Hacer clic Siguiente>.
- Nombre:
Hacer clic Finalizar.
Hacer clic Activar para activar su conexión de servicio.
Hecho
Inicie sesión para responder la pregunta
Paso 5: prueba el servicio con el navegador
Haga clic en URL de servicio para abrir su servicio.
Inicie sesión con su usuario desarrollador.
Verifique sus metadatos.
Hecho
Inicie sesión para responder la pregunta
Paso 6: Abrir vista previa para la aplicación Fiori Elements
Clic derecho en
Room
(Serie Entidad y Asociación) y seleccione Vista previa de la aplicación abierta de Fiori Elements.Inicie sesión con su usuario desarrollador.
Comprueba tu resultado.
Hecho
Inicie sesión para responder la pregunta