AMDP

  1 1AMDP开发实例-实例演示
  2 CLASS zcl_amdp_demo DEFINITION
  3   PUBLIC
  4   FINAL
  5   CREATE PUBLIC .
  6   PUBLIC SECTION.
  7     INTERFACES if_amdp_marker_hdb.
  8     TYPES:BEGIN OF ty_flight,
  9             carrid TYPE sflight-carrid,
 10             connid TYPE sflight-connid,
 11             fldate TYPE sflight-fldate,
 12             rate   TYPE p LENGTH 5 DECIMALS 2,
 13           END OF ty_flight.
 14     TYPES:tt_flight TYPE TABLE OF ty_flight.
 15 
 16     METHODS: get_flight
 17       IMPORTING
 18         VALUE(iv_mandt)  TYPE mandt
 19         VALUE(iv_carrid) TYPE s_carr_id
 20       EXPORTING
 21         VALUE(et_flight) TYPE tt_flight.
 22   PROTECTED SECTION.
 23   PRIVATE SECTION.
 24 ENDCLASS.
 25 CLASS zcl_amdp_demo IMPLEMENTATION.
 26   METHOD get_flight BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
 27                     OPTIONS READ-ONLY USING sflight.
 28     et_flight =  SELECT CARRID, CONNID,fldate,
 29             AVG(TO_DECIMAL(SEATSOCC + SEATSOCC_B + SEATSOCC_F) /  TO_DECIMAL( SEATSMAX + SEATSMAX_B + SEATSMAX_F)) AS RATE
 30            FROM SFLIGHT
 31            WHERE MANDT = :IV_MANDT
 32            AND   CARRID = :IV_CARRID
 33            GROUP BY
 34             CARRID ,
 35             CONNID,
 36             fldate;
 37   ENDMETHOD.
 38 ENDCLASS.
 39 
 40 REPORT zcl_amdp_call.
 41  DATA:GT_FLIGHT TYPE zcl_amdp_demo=>tt_flight,
 42       gs_flight TYPE zcl_amdp_demo=>ty_flight.
 43  data:lo_flight type REF TO zcl_amdp_demo.
 44   PARAMETERS p_carrid TYPE sflight-carrid.
 45   try.
 46   lo_flight = new zcl_amdp_demo( ).
 47   lo_flight->get_flight(
 48   EXPORTING
 49     iv_mandt = sy-mandt
 50     iv_carrid = p_carrid
 51   IMPORTING
 52     et_flight = GT_FLIGHT
 53   ).
 54   CATCH cx_amdp_error INTO DATA(error).
 55   ENDTRY.
 56   LOOP AT GT_FLIGHT INTO gs_flight.
 57     WRITE: / gs_flight-CARRID,
 58     gs_flight-CONNID.
 59   ENDLOOP.
 60 2AMDP开发实例-select-options
 61 CLASS zcl_amdp_so DEFINITION
 62   PUBLIC
 63   FINAL
 64   CREATE PUBLIC .
 65   PUBLIC SECTION.
 66     INTERFACES if_amdp_marker_hdb.
 67     TYPES:BEGIN OF ty_flight,
 68             carrid TYPE sflight-carrid,
 69             connid TYPE sflight-connid,
 70             fldate TYPE sflight-fldate,
 71             rate   TYPE p LENGTH 5 DECIMALS 2,
 72           END OF ty_flight.
 73     TYPES:tt_flight TYPE TABLE OF ty_flight.
 74 
 75     METHODS get_flight_so
 76       IMPORTING
 77         VALUE(iv_mandt)  TYPE mandt
 78         VALUE(iv_where) TYPE string
 79       EXPORTING
 80         VALUE(et_flight) TYPE tt_flight.
 81   PROTECTED SECTION.
 82   PRIVATE SECTION.
 83 ENDCLASS.
 84 
 85 
 86 
 87 CLASS zcl_amdp_so IMPLEMENTATION.
 88 METHOD  get_flight_so BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
 89                       OPTIONS READ-ONLY USING sflight.
 90   vt_flight =  SELECT CARRID, CONNID,fldate,
 91             AVG(TO_DECIMAL(SEATSOCC + SEATSOCC_B + SEATSOCC_F) /  TO_DECIMAL( SEATSMAX + SEATSMAX_B + SEATSMAX_F)) AS RATE
 92            FROM SFLIGHT
 93            WHERE MANDT = :IV_MANDT
 94            GROUP BY
 95             CARRID ,
 96             CONNID,
 97             fldate;
 98  et_flight = APPLY_FILTER ( :vt_flight , :iv_where );
 99 
100 ENDMETHOD.
101 ENDCLASS.
102 
103 
104 REPORT zcl_amdp_call_so.
105 TABLES:SFLIGHT.
106 DATA:gt_flight TYPE zcl_amdp_so=>tt_flight,
107      gs_flight TYPE zcl_amdp_so=>ty_flight.
108 DATA:lo_flight TYPE REF TO zcl_amdp_so.
109 DATA:l_where TYPE string.
110 DATA:lt_named_seltabs TYPE cl_shdb_seltab=>tt_named_seltables,
111      lw_named_seltabs LIKE LINE OF lt_named_seltabs.
112 
113 *PARAMETERS p_carrid TYPE sflight-carrid.
114 SELECT-OPTIONS:s_carrid FOR sflight-carrid.
115 TRY.
116 
117     CLEAR: lt_named_seltabs ,lw_named_seltabs.
118     lw_named_seltabs-name = 'CARRID'.
119     lw_named_seltabs-dref = REF #( s_carrid[] ).
120     APPEND lw_named_seltabs TO lt_named_seltabs.
121     l_where = cl_shdb_seltab=>combine_seltabs(
122    it_named_seltabs = lt_named_seltabs
123     ).
124     lo_flight = NEW zcl_amdp_so( ).
125     lo_flight->get_flight_so(
126     EXPORTING
127       iv_mandt = sy-mandt
128       iv_where  = l_where
129     IMPORTING
130       et_flight = gt_flight
131     ).
132   CATCH cx_amdp_error INTO DATA(error).
133 ENDTRY.
134 LOOP AT gt_flight INTO gs_flight.
135   WRITE: / gs_flight-carrid,
136   gs_flight-connid.
137   CLEAR gs_flight.
138 ENDLOOP.
139 3.AMDP开发-amdp调用
140 CLASS zcl_amdp_co DEFINITION
141   PUBLIC
142   FINAL
143   CREATE PUBLIC .
144   PUBLIC SECTION.
145     INTERFACES if_amdp_marker_hdb.
146     TYPES:BEGIN OF ty_flight,
147             carrid   TYPE sflight-carrid,
148             carrname TYPE scarr-carrname,
149             connid   TYPE sflight-connid,
150             fldate   TYPE sflight-fldate,
151             currency TYPE sflight-currency,
152             price    TYPE sflight-price,
153           END OF ty_flight.
154     TYPES:tt_flight TYPE TABLE OF ty_flight,
155           tt_scarr  TYPE TABLE OF scarr.
156     METHODS: get_flight_name
157       IMPORTING
158         VALUE(iv_mandt)  TYPE mandt
159         VALUE(iv_carrid) TYPE s_carr_id
160       EXPORTING
161         VALUE(et_scarr)  TYPE tt_scarr.
162     METHODS: get_flight_info
163       IMPORTING
164         VALUE(iv_mandt)  TYPE mandt
165         VALUE(iv_carrid) TYPE s_carr_id
166         VALUE(iv_connid) TYPE s_conn_id
167       EXPORTING
168         VALUE(et_flight) TYPE tt_flight.
169   PROTECTED SECTION.
170   PRIVATE SECTION.
171 ENDCLASS.
172 
173 
174 
175 CLASS zcl_amdp_co IMPLEMENTATION.
176   METHOD  get_flight_name BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
177                         OPTIONS READ-ONLY USING scarr.
178     et_scarr = SELECT *
179           FROM scarr
180           WHERE mandt = :iv_mandt
181           and carrid = :iv_carrid;
182   ENDMETHOD.
183   METHOD  get_flight_info BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
184                         OPTIONS READ-ONLY USING sflight zcl_amdp_co=>get_flight_name.
185     CALL "ZCL_AMDP_CO=>GET_FLIGHT_NAME"(
186     iv_mandt => :iv_mandt ,
187     iv_carrid => :iv_carrid,
188     et_scarr => :vt_scarr
189     );
190 
191   ET_FLIGHT =   SELECT      S.carrid,
192               V.carrname ,
193               S.connid   ,
194               S.fldate   ,
195               S.currency ,
196               S.price
197   FROM SFLIGHT AS S INNER JOIN :vt_scarr AS V
198   ON S.MANDT = V.MANDT AND S.CARRID = V.CARRID
199   WHERE S.MANDT = :IV_MANDT
200   AND S.CARRID = :IV_CARRID
201   AND S.CONNID = :IV_CONNID;
202   ENDMETHOD.
203 EnDCLASS.
204 
205 REPORT zcl_amdp_call_co.
206 DATA:gt_flight TYPE zcl_amdp_co=>tt_flight,
207      gs_flight TYPE zcl_amdp_co=>ty_flight.
208 DATA:lo_flight TYPE REF TO zcl_amdp_co.
209 PARAMETERS p_carrid TYPE sflight-carrid.
210 PARAMETERS p_connid TYPE sflight-connid.
211 TRY.
212     lo_flight = NEW zcl_amdp_co( ).
213     lo_flight->get_flight_info(
214     EXPORTING
215       iv_mandt = sy-mandt
216       iv_carrid = p_carrid
217       iv_connid = p_connid
218     IMPORTING
219       et_flight = gt_flight
220     ).
221   CATCH cx_amdp_error INTO DATA(error).
222 ENDTRY.
223 LOOP AT gt_flight INTO gs_flight.
224   WRITE: / gs_flight-carrid,
225    gs_flight-carrname,
226   gs_flight-connid.
227 
228 ENDLOOP.
229 4amdp   badi
230 SE20
231  
232  
233 interface ZIF_S4H_AMDP_BADI
234   public .
235 INTERFACES if_amdp_marker_hdb.
236     interfaces IF_BADI_INTERFACE .
237 TYPES:BEGIN OF ty_flight,
238             carrid TYPE sflight-carrid,
239             connid TYPE sflight-connid,
240             fldate TYPE sflight-fldate,
241             rate   TYPE p LENGTH 5 DECIMALS 2,
242           END OF ty_flight.
243     TYPES:tt_flight TYPE TABLE OF ty_flight.
244 
245     METHODS: execute
246       IMPORTING
247         VALUE(iv_mandt)  TYPE mandt
248       CHANGING
249         VALUE(et_flight) TYPE tt_flight.
250 
251 
252 endinterface.
253  
254 class ZFCL_S4H_AMDP_BADI definition
255   public
256   final
257   create public .
258 public section.
259   INTERFACES if_amdp_marker_hdb.
260   interfaces IF_BADI_INTERFACE .
261   interfaces ZIF_S4H_AMDP_BADI .
262   METHODS: TOPN
263       IMPORTING
264         VALUE(iv_mandt)  TYPE mandt
265       EXPORTING
266         VALUE(et_flight) TYPE ZIF_S4H_AMDP_BADI=>tt_flight.
267 protected section.
268 private section.
269 ENDCLASS.
270 CLASS ZFCL_S4H_AMDP_BADI IMPLEMENTATION.
271 METHOD  TOPN BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
272                         OPTIONS READ-ONLY USING sflight.
273     et_flight =  SELECT CARRID, CONNID,fldate,
274             AVG(TO_DECIMAL(SEATSOCC + SEATSOCC_B + SEATSOCC_F) /  TO_DECIMAL( SEATSMAX + SEATSMAX_B + SEATSMAX_F)) AS RATE
275            FROM SFLIGHT
276            WHERE MANDT = :IV_MANDT
277            GROUP BY
278             CARRID ,
279             CONNID,
280             fldate;
281   ENDMETHOD.
282   METHOD  ZIF_S4H_AMDP_BADI~execute BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
283                         OPTIONS READ-ONLY USING  ZFCL_S4H_AMDP_BADI=>TOPN.
284      CALL "ZFCL_S4H_AMDP_BADI=>TOPN"(
285         IV_MANDT => :IV_MANDT,
286         et_flight => :ET_FLIGHT
287      );
288 
289   ENDMETHOD.
290 ENDCLASS.
291 
292  
293  
294 
295 
296 class ZCL_S4H_AMDP_BADI definition
297   public
298   final
299   create public .
300 public section.
301   INTERFACES if_amdp_marker_hdb.
302   interfaces IF_BADI_INTERFACE .
303   interfaces ZIF_S4H_AMDP_BADI .
304     METHODS: TOPN
305       IMPORTING
306         VALUE(iv_mandt)  TYPE mandt
307       EXPORTING
308         VALUE(et_flight) TYPE ZIF_S4H_AMDP_BADI=>tt_flight.
309 protected section.
310 private section.
311 ENDCLASS.
312 CLASS ZCL_S4H_AMDP_BADI IMPLEMENTATION.
313 METHOD  TOPN BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
314                         OPTIONS READ-ONLY USING sflight.
315     et_flight =  SELECT TOP 20 CARRID, CONNID,fldate,
316             AVG(TO_DECIMAL(SEATSOCC + SEATSOCC_B + SEATSOCC_F) /  TO_DECIMAL( SEATSMAX + SEATSMAX_B + SEATSMAX_F)) AS RATE
317            FROM SFLIGHT
318            WHERE MANDT = :IV_MANDT
319            GROUP BY
320             CARRID ,
321             CONNID,
322             fldate;
323 
324 
325   ENDMETHOD.
326   METHOD  ZIF_S4H_AMDP_BADI~execute BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
327                         OPTIONS READ-ONLY USING  ZCL_S4H_AMDP_BADI=>TOPN.
328      CALL "ZCL_S4H_AMDP_BADI=>TOPN"(
329         IV_MANDT => :IV_MANDT,
330         et_flight => :ET_FLIGHT
331      );
332   ENDMETHOD.
333 ENDCLASS.
334 
335 
336 
337 
338 
339 
340 
341 
342 
343 
344 
345 
346 
347 REPORT zcl_amdp_call_badi.
348 DATA:gt_flight TYPE zif_s4h_amdp_badi=>tt_flight,
349      gs_flight TYPE zif_s4h_amdp_badi=>ty_flight.
350 DATA:lo_flight TYPE REF TO zdf_s4h_amdp_badi.
351 *  PARAMETERS p_carrid TYPE sflight-carrid.
352 TRY.
353     GET BADI lo_flight.
354 *  lo_flight = new zcl_amdp_demo( ).
355     CALL BADI lo_flight->EXECUTE
356     EXPORTING
357       iv_mandt = sy-mandt
358     CHANGING
359       et_flight = gt_flight.
360 
361   CATCH cx_amdp_error INTO DATA(error).
362 ENDTRY.
363 LOOP AT gt_flight INTO gs_flight.
364   WRITE: / gs_flight-carrid,
365   gs_flight-connid.
366 
367 ENDLOOP.

 

posted @ 2023-03-07 10:40  ABAP-武汉  阅读(85)  评论(0)    收藏  举报