terça-feira, 2 de outubro de 2018

SAP HANA Criando AMDP com input parameters

  Agora entrando no mundo HANA, tive minha primeira experiência desenvolvendo uma Calc view um pouco mais complexa utilizando os objetos do HANA no eclipse e criando uma função AMDP com input parameters, na chamada do método incluindo parãmetros SELECT-OPTIONS.

Vou colocar apenas o código do AMDP e da chamada do método no programa.

Observações:
- INTERFACE IF_AMDP_MARKER_HDB é obrigatorio.
- Criei a calculation view ZV_GUIAS
- Os PLACEHOLDERS são os input parameters: P_DTINI e P_DTFIM
- O parâmetro IV_WHERE é um SQL dinâmico que crio no programa de chamada
- Não tentem colocar * no select que dá merda.
- De preferência criem tipos especificos para retorno do SELECT

*==============================

CLASS zcl_teste_guias DEFINITION

 PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

    TYPES:

      BEGIN OF ty_guias,
        empresa   TYPE zv_guias-empresa,
        filial    TYPE zv_guias-filial,
        nf_id     TYPE zv_guias-nf_id,
        dt_lancto TYPE zv_guias-dt_lancto,
      END OF ty_guias,

      tyt_guias TYPE STANDARD TABLE OF ty_guias.

    DATA:
          tt_guias TYPE tyt_guias.

***********************************************************************
* Get Company details  based on input parameters                      *
***********************************************************************
    CLASS-METHODSget_guias
      IMPORTING
        VALUE(iv_clientTYPE mandt
        VALUE(iv_bukrs)  TYPE bukrs
        VALUE(iv_where)  TYPE string
        VALUE(iv_dtini)  TYPE dats
        VALUE(iv_dtfin)  TYPE dats
      EXPORTING
        VALUE(et_guias)  TYPE tyt_guias.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS zcl_teste_guias IMPLEMENTATION.
  METHOD get_guias BY DATABASE PROCEDURE
                          FOR HDB
                          LANGUAGE SQLSCRIPT
                          OPTIONS  READ-ONLY
                          USING  zv_guias.
***********************************************************************
* Get Company details  based on input parameters                      *
***********************************************************************

    tt_guias SELECT empresafilialnf_iddt_lancto
             from "ZV_GUIAS"
               PLACEHOLDER."$$P_DTINI$$"=> :i_dtini,
                 PLACEHOLDER."$$P_DTFIM$$"=> :i_dtfin )
             where MANDT  IV_CLIENT
               AND EMPRESA IV_BUKRS;

    et_guias apply_filter(:tt_guias:iv_where ;

  ENDMETHOD.

ENDCLASS.


*=====================================================

Chamada do AMDP no programa.

Observações:
- S_BUDAT e um parâmetro tipo select-options
- No retorno do metodo DATA(t_guias) não precisa declarar no programa, mas essa variável fica alocado na memória apenas na execução do form onde está.

* ============================================


  DATA(lv_wherecl_shdb_seltab=>combine_seltabs(
  it_named_seltabs VALUE #(
  name  'DT_LANCTO' dref REF #s_budat[] ).


  zcl_teste_guias=>get_guias(
  EXPORTING iv_bukrs p_bukrs
            iv_client p_mandt
            iv_where lv_where
            iv_dtini '20140101'
            iv_dtfin '99991231'
    IMPORTING
      et_guias DATA(t_guias).

  cl_demo_output=>display_datavalue t_guias ).