Saltar al contenido

Agregue el comportamiento transaccional a sus servicios de datos centrales

En este tutorial, donde sea XXX aparecer, utilice un número (p. ej. 000).


Paso 2: crea una definición de comportamiento

  1. Haga clic derecho en su definición de datos ZI_BOOKING_XXX y seleccione Nueva definición de comportamiento.

  2. Informe, asegúrese de que su tipo de implementación no esté administrado y haga clic en Siguiente>.

    Crea una definición de comportamiento

  3. Hacer clic Finalizar para completar su solicitud de transporte.

    Crea una definición de comportamiento

  4. Comprueba el resultado. Se crea una definición de comportamiento vacío para la implementación no administrada.

    Crea una definición de comportamiento

Hecho

Inicie sesión para responder la pregunta

Paso 3: aplique una definición de comportamiento

  1. Dar un alias (booking) y especifique el maestro de bloqueo. Definir el campo de la tabla LastChangedAt don ETag encargarse de. Reemplace la siguiente codificación:
    unmanaged implementation in class z_i_booking_xxx unique;
    
    define behavior for ZI_Booking_xxx alias booking
    lock master
    etag LastChangedAt
    {
      create;
      update;
      delete;
    }
    
    
  2. Guardar y activar.

    Aplicar una definición de comportamiento

Hecho

Inicie sesión para responder la pregunta

Paso 4: crear una implementación de comportamiento

  1. Haga clic con el botón derecho en su definición de comportamiento y seleccione Nueva implementación de comportamiento.

    Cree una implementación conductual

  2. Da el nombre Z_I_BOOKING_XXX y descripción y haga clic en Hacia adelante.

    Cree una implementación conductual

  3. Envíe una solicitud de transporte si es necesario y haga clic en Finalizar.

    Cree una implementación conductual

Hecho

Inicie sesión para responder la pregunta

Paso 5: aplique una clase de comportamiento

  1. Sustituya el siguiente código en tipos locales:

    CLASS lcl_buffer DEFINITION.
    * 1) define the data buffer
      PUBLIC SECTION.
    
        TYPES: BEGIN OF ty_buffer.
            INCLUDE TYPE   ztbooking_xxx AS data.
        TYPES: flag TYPE c LENGTH 1,
               END OF ty_buffer.
    
        TYPES tt_bookings TYPE SORTED TABLE OF ty_buffer WITH UNIQUE KEY booking.
    
        CLASS-DATA mt_buffer TYPE tt_bookings.
    ENDCLASS.
    
    CLASS lcl_handler DEFINITION final INHERITING FROM cl_abap_behavior_handler.
      PRIVATE SECTION.
        METHODS modify FOR BEHAVIOR IMPORTING
          roots_to_create    FOR CREATE booking
          roots_to_update    FOR UPDATE booking
          roots_to_delete    FOR DELETE booking.
    
        METHODS read FOR BEHAVIOR
          IMPORTING it_booking_key FOR READ booking RESULT et_booking.
    
        METHODS lock FOR BEHAVIOR
          IMPORTING it_booking_key FOR LOCK booking.
    ENDCLASS.
    
    CLASS lcl_handler implementation.
      METHOD modify.
    
        " %cid = control field
    
        LOOP AT roots_to_delete INTO DATA(ls_delete).
          IF ls_delete-booking IS INITIAL.
            ls_delete-booking = mapped-booking[ %cid = ls_delete-%cid_ref ]-booking.
          ENDIF.
    
          READ TABLE lcl_buffer=>mt_buffer WITH KEY booking = ls_delete-booking ASSIGNING field-symbol(<ls_buffer>).
          IF sy-subrc = 0.
            IF <ls_buffer>-flag = 'C'.
              DELETE TABLE lcl_buffer=>mt_buffer WITH TABLE KEY booking = ls_delete-booking.
            ELSE.
              <ls_buffer>-flag = 'D'.
            ENDIF.
          ELSE.
            INSERT VALUE #( flag = 'D' booking = ls_delete-booking ) INTO TABLE lcl_buffer=>mt_buffer.
          ENDIF.
        ENDLOOP.
    
        " handle create
        IF roots_to_create IS NOT INITIAL.
    
          SELECT SINGLE MAX( booking ) FROM ztbooking_xxx INTO @DATA(lv_max_booking).
        ENDIF.
    
        LOOP AT roots_to_create INTO DATA(ls_create).
          ADD 1 TO lv_max_booking.
          ls_create-%data-booking = lv_max_booking.
          GET TIME STAMP FIELD DATA(zv_tsl).
          ls_create-%data-lastchangedat = zv_tsl.
          INSERT VALUE #( flag = 'C' data = CORRESPONDING #( ls_create-%data ) ) INTO TABLE lcl_buffer=>mt_buffer.
    
          IF ls_create-%cid IS NOT INITIAL.
            INSERT VALUE #( %cid = ls_create-%cid  booking = ls_create-booking ) INTO TABLE mapped-booking.
          ENDIF.
        ENDLOOP.
    
        " handle update
        IF roots_to_update IS NOT INITIAL.
          LOOP AT roots_to_update INTO DATA(ls_update).
            IF ls_update-booking IS INITIAL.
              ls_update-booking = mapped-booking[ %cid = ls_update-%cid_ref ]-booking.
            ENDIF.
    
            READ TABLE lcl_buffer=>mt_buffer WITH KEY booking = ls_update-booking ASSIGNING <ls_buffer>.
            IF sy-subrc <> 0.
    
              SELECT SINGLE * FROM ztbooking_xxx WHERE booking = @ls_update-booking INTO @DATA(ls_db).
              INSERT VALUE #( flag = 'U' data = ls_db ) INTO TABLE lcl_buffer=>mt_buffer ASSIGNING <ls_buffer>.
            ENDIF.
    
            IF ls_update-%control-customername IS NOT INITIAL..
              <ls_buffer>-customername = ls_update-customername.
            ENDIF.
            IF ls_update-%control-cost  IS NOT INITIAL..
              <ls_buffer>-cost = ls_update-cost.
            ENDIF.
            IF ls_update-%control-dateoftravel   IS NOT INITIAL..
              <ls_buffer>-dateoftravel  = ls_update-dateoftravel .
            ENDIF.
            IF ls_update-%control-currencycode  IS NOT INITIAL..
              <ls_buffer>-currencycode = ls_update-currencycode.
            ENDIF.
            GET TIME STAMP FIELD DATA(zv_tsl2).
            <ls_buffer>-lastchangedat = zv_tsl2.
          ENDLOOP.
        ENDIF.
      ENDMETHOD.
    
      METHOD read.
        LOOP AT it_booking_key INTO DATA(ls_booking_key).
          " check if it is in buffer (and not deleted).
          READ TABLE lcl_buffer=>mt_buffer WITH KEY booking = ls_booking_key-booking INTO DATA(ls_booking).
          IF sy-subrc = 0 AND ls_booking-flag <> 'U'.
            INSERT CORRESPONDING #( ls_booking-data ) INTO TABLE et_booking.
          ELSE.
            SELECT SINGLE * FROM ztbooking_xxx WHERE booking = @ls_booking_key-booking INTO @DATA(ls_db).
            IF sy-subrc = 0.
              INSERT CORRESPONDING #( ls_db ) INTO TABLE et_booking.
            ELSE.
              INSERT VALUE #( booking = ls_booking_key-booking ) INTO TABLE failed-booking.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDMETHOD.
    
      METHOD lock.
       "provide the appropriate lock handling if required
      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 save.
        DATA lt_data TYPE STANDARD TABLE OF ztbooking_xxx.
    
        lt_data = VALUE #(  FOR row IN lcl_buffer=>mt_buffer WHERE  ( flag = 'C' ) (  row-data ) ).
        IF lt_data IS NOT INITIAL.
          INSERT ztbooking_xxx FROM TABLE @lt_data.
        ENDIF.
        lt_data = VALUE #(  FOR row IN lcl_buffer=>mt_buffer WHERE  ( flag = 'U' ) (  row-data ) ).
        IF lt_data IS NOT INITIAL.
          UPDATE ztbooking_xxx FROM TABLE @lt_data.
        ENDIF.
        lt_data = VALUE #(  FOR row IN lcl_buffer=>mt_buffer WHERE  ( flag = 'D' ) (  row-data ) ).
        IF lt_data IS NOT INITIAL.
          DELETE ztbooking_xxx FROM TABLE @lt_data.
        ENDIF.
      ENDMETHOD.
    
      METHOD finalize.
      ENDMETHOD.
    
      METHOD check_before_save.
      ENDMETHOD.
    ENDCLASS.
    
  2. Guardar y activar.

    Funciones abiertas de SAP Fiori

  3. Vuelve a tu conexión de servicio Z_I_BOOKING_XXX y abra la vista previa de la aplicación SAP Fiori elements a la derecha.

    Funciones abiertas de SAP Fiori

  4. Actualice y pruebe su aplicación en el navegador. Ahora puede eliminar, agregar y editar objetos en su aplicación.

    Comprobar el resultado

Hecho

Inicie sesión para responder la pregunta