quarta-feira, 7 de janeiro de 2026

AMDP - Chamada de método sem criar CDS

 CLASS zcl_bloqueio_miro_tm DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
  PUBLIC SECTION.

    TYPES: BEGIN OF ty_services,
             srvpos TYPE esll-srvpos,
           END OF ty_services.
    TYPES: tty_services TYPE STANDARD TABLE OF ty_services WITH DEFAULT KEY.

    INTERFACES if_amdp_marker_hdb.

    CLASS-METHODS check_bloqueio IMPORTING iv_sheet_service TYPE essr-lblni
                                 CHANGING  cs_invfo         TYPE invfo
                                           cs_bseg          TYPE bseg.
    CLASS-METHODS get_service IMPORTING VALUE(iv_sheet_service) TYPE essr-lblni
                              EXPORTING VALUE(et_service_nr)    TYPE tty_services.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.


CLASS zcl_bloqueio_miro_tm IMPLEMENTATION.

  METHOD check_bloqueio.
    TRY.
        get_service( EXPORTING
                        iv_sheet_service = iv_sheet_service
                      IMPORTING
                        et_service_nr    = DATA(lt_services) ).
      CATCH cx_amdp_error INTO DATA(lx_error).
    ENDTRY.
    CHECK lt_services[] IS NOT INITIAL.
    SELECT sign, opti, lpad( low, 18, '0' ) AS low  , lpad( high, 18, '0' ) AS high
      FROM tvarvc
     WHERE name = 'ZTM_TIPOSERVICO_BLOQUEIO'
     INTO TABLE @DATA(lt_tipo_servico).
    CHECK sy-subrc = 0 AND lt_tipo_servico[] IS NOT INITIAL.
    CHECK lt_services[ 1 ]-srvpos IN lt_tipo_servico.
    cs_invfo-zlspr = 'Y'.
    cs_bseg-zlspr = 'Y'.
  ENDMETHOD.

  METHOD get_service BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS
             READ-ONLY USING essr esll.
    DECLARE lv_sub_packno "$ABAP.type( PACKNO )";
    lt_sub_packno = SELECT DISTINCT SUB_PACKNO
                     FROM essr
                          INNER JOIN esll
                          on esll.packno = essr.packno
                     WHERE lblni = :iv_sheet_service;
    IF record_count( :lt_sub_packno ) > 0 then
        lv_sub_packno = :lt_sub_packno.SUB_PACKNO[ 1 ];
        et_service_nr = SELECT DISTINCT srvpos
                          from esll
                         where esll.packno = :lv_sub_packno ;
    end if;
  ENDMETHOD.

ENDCLASS.

Nenhum comentário:

Postar um comentário