11 Amdp

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

create function getCircleA( radius integer )

returns area decimal(5,2) as begin

area = 3.14 * radius * radius;

end;

select getCircleA( 5 ) from dummy;

alter function getSupplierData( )


returns table( bp_id varchar(40), company_name varchar(80) )
as begin

return select bp_id, company_name from saphanadb.snwd_bpa


where bp_role = 02;

end;

select * from getSupplierData( );

*&---------------------------------------------------------------------*
*& Report zjan_call_procedure_proxy
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zjan_call_procedure_proxy.

data: lv_seg_key type ZIF_ZJAN_PROCEDURE_PROXY=>iv_seg_key,


lt_work type STANDARD TABLE OF ZIF_ZJAN_PROCEDURE_PROXY=>it_work_tab,
lt_cat type STANDARD TABLE OF ZIF_ZJAN_PROCEDURE_PROXY=>it_cat_tab,
out_cat type STANDARD TABLE OF ZIF_ZJAN_PROCEDURE_PROXY=>et_cat_tab.

call DATABASE PROCEDURE zjan_procedure_proxy


EXPORTING
iv_seg_key = lv_seg_key
it_work_tab = lt_work
it_cat_tab = lt_cat
IMPORTING
et_cat_tab = out_cat
.

BREAK-POINT.

CLASS zjan_amdp_demo DEFINITION


PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
class-methods get_oia EXPORTING value(et_oia) type ztt_oia.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zjan_amdp_demo IMPLEMENTATION.

METHOD get_oia by DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT


OPTIONS READ-ONLY using snwd_bpa snwd_so_inv_head
zdp_cust snwd_so_inv_item.

declare lv_client varchar(3);


declare lv_to_curr varchar(3);
declare lv_today date;
declare lv_user varchar(10);
declare lv_th_gross decimal(15,2);
declare lv_th_days integer;

select current_date into lv_today from dummy;

select session_context('CLIENT'),
ucase(session_context('APPLICATIONUSER'))
into lv_client, lv_user from dummy;

select mandt, currency_code, max_gross_amount,


max_open_days into lv_client, lv_to_curr, lv_th_gross, lv_th_days
from zdp_cust where id = :lv_user;

lt_open = select bp.bp_id, bp.company_name,


floor( seconds_between(
to_timestamp(left(inv.changed_at,14),'YYYYMMDDHHMISS'),
to_timestamp(localtoutc(now(),'CET'))
) / ( 24 * 60 * 60 ) ) as open_days
from snwd_so_inv_head as inv inner join snwd_bpa as bp
on inv.buyer_guid = bp.node_key where
inv.payment_status = '' and
bp.client = :lv_client;

lt_open_days = select bp_id, avg(open_days) as open_days from :lt_open


group by bp_id;

lt_all_amount = select bp_id, company_name, sum( item.gross_amount ) as


gross_amount,
item.currency_code from snwd_so_inv_item as item inner join
snwd_so_inv_head as head
on item.parent_key = head.node_key inner join snwd_bpa as bpa
on bpa.node_key = head.buyer_guid
where head.payment_status = '' and
bpa.client = :lv_client group by bp_id, company_name, item.currency_code ;

lt_amounts = CE_CONVERSION(
:lt_all_amount,
[
family = 'currency',
method = 'ERP',
steps = 'shift,convert,shift_back',
client = :lv_client,
source_unit_column = 'CURRENCY_CODE',
target_unit = :lv_to_curr,
reference_date = :lv_today,
output_unit_column = 'CURR_CODE_OP'
], [gross_amount]
);
lt_final_gross = select bp_id, company_name, sum( gross_amount )
as gross_amount, :lv_to_curr as currency_code from :lt_amounts
group by bp_id, company_name, :lv_to_curr;

lt_oia = select snwd_bpa.bp_id, gross.company_name, open_days as


open_days,
gross.gross_amount as gross_amount,
gross.currency_code as currency_code,
'' as tagging from snwd_bpa inner join :lt_open_days as dats
on snwd_bpa.bp_id = dats.bp_id inner join :lt_final_gross as gross
on gross.bp_id = snwd_bpa.bp_id ;

et_oia = select lv_client as client,


bp_id, company_name, gross_amount, open_days as
avg_open_days,
currency_code, case when gross_amount > :lv_th_gross and
open_days > :lv_th_days then 'X'
else '' end as tagging
from :lt_oia;

ENDMETHOD.

ENDCLASS.

*&---------------------------------------------------------------------*
*& Report zcall_amdp_oia
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zcall_amdp_oia.

try.
zjan_amdp_demo=>get_oia(
IMPORTING
et_oia = data(itab)
).
catch cx_amdp_error into data(lo_ex).
WRITE : / lo_ex->get_text( ).
endtry.

cl_demo_output=>display_data(
EXPORTING
value = itab
* name =
).

You might also like