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-METHODS: get_guias
IMPORTING
VALUE(iv_client) TYPE 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 empresa, filial, nf_id, dt_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_where) = cl_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_data( value = t_guias ).