Sei sulla pagina 1di 5

Recopilación : colina.esteban@gmail.

com

Creando primer Abap Managed Database Procedure o AMDP

Básicamente creamos una clase, según se debe hacer desde eclipse.

Colocamos el nombre de la clase y alguna descriptión

Como la agregamos al paquete $TMP no pide orden, en caso contrario debemos escoger o crear una.

Twitter: @colinaesteban
Recopilación : colina.esteban@gmail.com

Ahora colocamos el código y las definiciones:

class zcl_salesorder_detail definition


public
final
create public .

public section.

interfaces : if_amdp_marker_hdb.

types: begin of ty_order,


vbeln type vbeln, "Sales order Number
posnr type posnr_va, "item Number
vkorg type vkorg, "Sales Organization
item_price type netwr_ap, "Item price
status type char30, "Ejemplo fkrel
end of ty_order.

types : tt_order type standard table of ty_order with empty key.

class-methods get_salesorder_details
importing value(iv_desde) type erdat
value(iv_hasta) type erdat
exporting value(et_order) type tt_order.

protected section.
private section.
endclass.

Twitter: @colinaesteban
Recopilación : colina.esteban@gmail.com

Al implementar la clase, el código interno dentro del método es SQL-script el cual tiene muchas ventajas sobre un simple sql, así
que se recomienda investigar cómo hacer consultas sobre consultas y poder usar las poderosas instrucciones que tiene:

class zcl_salesorder_detail implementation.


method get_salesorder_details by database procedure "Define AMDP Producedure
for hdb "Hana Database
language sqlscript "Define the database specific language
options read-only " Only reads are permited on the database tables
using vbak vbap. " Tablas que seran usadas

* to get sales order details


* Se tomo FKREL este porque en la tabla vbup no habia status registrados, solo como ejemplo.

et_order = SELECT vbak.vbeln,


vbap.posnr,
vbak.vkorg,
vbap.netwr as item_price,
CASE fkrel
WHEN ' ' then 'No fijado'
WHEN 'A' then 'Delivery-related billing'
WHEN 'B' then 'Relevant for order-related'
END AS status
FROM vbak AS vbak INNER JOIN vbap AS vbap
ON vbak.vbeln = vbap.vbeln
WHERE vbak.erdat >= iv_desde and
vbak.erdat <= iv_hasta;

endmethod.

endclass.

Ahora hacemos el programa para consumir el método AMDP recién creado:

Twitter: @colinaesteban
Recopilación : colina.esteban@gmail.com

Igual nos va a pedir orden, igual que la clase, así que aquí omitimos esa pantalla.

Luego colocamos el siguiente código para llamar nuestra clase estática recién creada y un alv rápido para mostrar la consulta.

*&---------------------------------------------------------------------*
*& Report zr_call_amdp
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zr_call_amdp. " Abap Manage Database Procedure

PARAMETERS: p_desde TYPE erdat,


p_hasta type erdat.

* To Call AMDP Method

zcl_salesorder_detail=>get_salesorder_details(
exporting
iv_desde = p_desde
iv_hasta = p_hasta
importing
et_order = data(lt_order) "Autodeclaracion de parametros para que tome el tipo de la tabla en la
clase
).

* To display Sales Order Details


cl_demo_output=>display_data( name = 'Sales Order Details'
value = lt_order ).

Twitter: @colinaesteban
Recopilación : colina.esteban@gmail.com

Ejecutamos el programa en un mandante con datos.

Aquí vemos la salida de la consulta:

Twitter: @colinaesteban

Potrebbero piacerti anche