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.