.
99 | ENDIF.
100 | ENDIF.
101 | CATCH cx_root.
102 | CONTINUE.
103 | ENDTRY.
104 | ENDLOOP.
105 | ENDMETHOD.
106 |
107 | METHOD htmleml.
108 | CHECK filters-p_sendem = 'X'.
109 | TRY.
110 | DATA(email) = NEW zcl_email( ).
111 |
112 | LOOP AT filters-s_email INTO DATA(ls_email).
113 | email->add_recipient( CONV #( ls_email-low ) ).
114 | ENDLOOP.
115 |
116 | LOOP AT filters-s_dlinam INTO DATA(ls_dlinam).
117 | email->add_dl_recipients( ls_dlinam-low ).
118 | ENDLOOP.
119 |
120 | DATA lv_expiry_dt TYPE dats.
121 |
122 | SELECT carrid, connid, fldate, price
123 | UP TO 10 ROWS FROM sflight INTO TABLE @DATA(lt_sflight).
124 |
125 | lv_expiry_dt = sy-datum + 10. "add logic to get user id expiry date
126 |
127 | DATA(lv_days) = lv_expiry_dt - sy-datum.
128 |
129 | email->set_sender( iv_address = 'do@not.reply' iv_visible_name = 'Do not reply ' ).
130 |
131 | email->set_placeholder_itab(
132 | EXPORTING placeholder_name = '&SFLIGHT_TAB&'
133 | placeholder_itab = lt_sflight ).
134 |
135 | email->set_placeholder(
136 | EXPORTING
137 | placeholder_name = '&USER_FIRST_NAME&'
138 | placeholder_value = CONV #( 'User firstname' ) ).
139 |
140 | email->set_placeholder(
141 | EXPORTING
142 | placeholder_name = '&USER_ID&'
143 | placeholder_value = CONV #( 'user_id' ) ).
144 |
145 | email->set_placeholder(
146 | EXPORTING
147 | placeholder_name = '&EXPIRY_DT&'
148 | placeholder_value = |{ lv_expiry_dt DATE = ISO }| ).
149 |
150 | email->set_placeholder(
151 | EXPORTING
152 | placeholder_name = '&DAYS&'
153 | placeholder_value = CONV #( lv_days ) ).
154 |
155 | email->set_subject_body_template(
156 | EXPORTING
157 | template_id = filters-pemltmpt "Email body from Email template
158 | doctype = 'HTM' ).
159 |
160 | email->set_send_immediately( abap_false ).
161 | email->send( ).
162 |
163 | CATCH cx_bcs_send INTO DATA(ex).
164 | MESSAGE ex->get_text( ) TYPE 'S'.
165 | ENDTRY.
166 |
167 | ENDMETHOD.
168 |
169 | METHOD spolpdf.
170 | CHECK filters-p_sendem = 'X'.
171 |
172 | TRY.
173 | DATA(email) = NEW zcl_email( ).
174 |
175 | LOOP AT filters-s_email INTO DATA(ls_email).
176 | email->add_recipient( CONV #( ls_email-low ) ).
177 | ENDLOOP.
178 |
179 | LOOP AT filters-s_dlinam INTO DATA(ls_dlinam).
180 | email->add_dl_recipients( ls_dlinam-low ).
181 | ENDLOOP.
182 |
183 | email->set_sender( iv_address = 'do@not.reply' iv_visible_name = 'Do not reply' ).
184 |
185 | email->set_placeholder(
186 | EXPORTING
187 | placeholder_name = '&USER_FIRST_NAME&'
188 | placeholder_value = CONV #( 'User firstname' ) ).
189 |
190 | email->add_attachment(
191 | EXPORTING
192 | iv_doctype = 'pdf' " Document Type
193 | "iv_description = " Short Description of Contents
194 | iv_filename = |{ filters-pspool }.pdf| " File Name (with Extension)
195 | iv_contents_bin =
196 | NEW zcl_spool_to_pdf( )->convert( filters-pspool ) ). " Binary Document Content
197 |
198 | email->set_body_so10( text_name = filters-pso10txt ).
199 | email->set_subject_so10( text_name = '' ).
200 | email->set_subject( 'Email Demo2 PDF attachment' ).
201 |
202 | email->set_send_immediately( abap_false ).
203 | email->send( ).
204 |
205 | CATCH zcx_email INTO DATA(lx_email).
206 | MESSAGE lx_email->get_text( ) TYPE 'S'.
207 | CATCH cx_bcs_send INTO DATA(ex) .
208 | MESSAGE ex->get_text( ) TYPE 'S'.
209 | ENDTRY.
210 | ENDMETHOD.
211 |
212 | METHOD otfpdf.
213 | CHECK filters-p_sendem = 'X'.
214 |
215 | TRY.
216 | DATA(email) = NEW zcl_email( ).
217 |
218 | LOOP AT filters-s_email INTO DATA(ls_email).
219 | email->add_recipient( CONV #( ls_email-low ) ).
220 | ENDLOOP.
221 |
222 | LOOP AT filters-s_dlinam INTO DATA(ls_dlinam).
223 | email->add_dl_recipients( ls_dlinam-low ).
224 | ENDLOOP.
225 |
226 | email->set_sender( iv_address = 'do@not.reply' iv_visible_name = 'Do not reply' ).
227 |
228 | email->set_placeholder(
229 | EXPORTING
230 | placeholder_name = '&USER_FIRST_NAME&'
231 | placeholder_value = CONV #( 'User firstname' ) ).
232 |
233 | TRY.
234 | "DATA(otfdata) = sf_example_01( ).
235 | DATA(lv_contents_bin) = NEW zcl_otf_to_pdf( )->convert( sf_example_01( ) ).
236 |
237 | email->add_attachment(
238 | EXPORTING
239 | iv_doctype = 'pdf' " Document Type
240 | "iv_description = " Short Description of Contents
241 | iv_filename = |OTF_TO_PDF.pdf| " File Name (with Extension)
242 | iv_contents_bin = lv_contents_bin ). " Binary Document Content
243 | CATCH zcx_email INTO DATA(lx_email).
244 | MESSAGE lx_email->get_text( ) TYPE 'S'.
245 | ENDTRY.
246 |
247 |
248 | email->set_body_so10( text_name = filters-pso10txt ).
249 | email->set_subject_so10( text_name = '' ).
250 | email->set_subject( 'Email OTF_TO_PDF attachment' ).
251 |
252 | email->set_send_immediately( abap_false ).
253 | email->send( ).
254 |
255 | CATCH zcx_email INTO lx_email.
256 | MESSAGE lx_email->get_text( ) TYPE 'S'.
257 | CATCH cx_bcs_send INTO DATA(ex) .
258 | MESSAGE ex->get_text( ) TYPE 'S'.
259 | ENDTRY.
260 |
261 | ENDMETHOD.
262 |
263 | METHOD itabxls.
264 | CHECK filters-p_sendem = 'X'.
265 |
266 | TRY.
267 | DATA(email) = NEW zcl_email( ).
268 |
269 | LOOP AT filters-s_email INTO DATA(ls_email).
270 | email->add_recipient( CONV #( ls_email-low ) ).
271 | ENDLOOP.
272 |
273 | LOOP AT filters-s_dlinam INTO DATA(ls_dlinam).
274 | email->add_dl_recipients( ls_dlinam-low ).
275 | ENDLOOP.
276 |
277 | email->set_sender( iv_address = 'do@not.reply' iv_visible_name = 'Do not reply ' ).
278 |
279 | email->set_placeholder(
280 | EXPORTING
281 | placeholder_name = '&USER_FIRST_NAME&'
282 | placeholder_value = CONV #( 'User firstname' ) ).
283 |
284 | SELECT carrid, connid, fldate, price
285 | UP TO 10 ROWS FROM sflight INTO TABLE @DATA(lt_sflight).
286 |
287 | IF lt_sflight IS NOT INITIAL.
288 |
289 | email->add_attachment(
290 | EXPORTING
291 | iv_doctype = |XLS| " Document Type
292 | iv_filename = |itab_to_excel.xls| " File Name (with Extension)
293 | iv_contents_bin = NEW zcl_itab_to_xls( )->convert( lt_sflight ) ). " Binary Document Content
294 | ENDIF.
295 |
296 | email->set_subject_body_template(
297 | EXPORTING
298 | template_id = filters-pemltmpt "Email body from Email template
299 | doctype = 'HTM' ).
300 |
301 | email->set_send_immediately( abap_false ).
302 | email->send( ).
303 |
304 | CATCH zcx_email INTO DATA(lx_email).
305 | MESSAGE lx_email->get_text( ) TYPE 'S'.
306 | CATCH cx_bcs_send INTO DATA(ex) .
307 | MESSAGE ex->get_text( ) TYPE 'S'.
308 | ENDTRY.
309 | ENDMETHOD.
310 |
311 | METHOD zipattach.
312 | CHECK filters-p_sendem = 'X'.
313 |
314 | TRY.
315 | DATA(email) = NEW zcl_email( ).
316 |
317 | LOOP AT filters-s_email INTO DATA(ls_email).
318 | email->add_recipient( CONV #( ls_email-low ) ).
319 | ENDLOOP.
320 |
321 | LOOP AT filters-s_dlinam INTO DATA(ls_dlinam).
322 | email->add_dl_recipients( ls_dlinam-low ).
323 | ENDLOOP.
324 |
325 | email->set_sender( iv_address = 'do@not.reply' iv_visible_name = 'Do not reply ' ).
326 |
327 | email->set_placeholder(
328 | EXPORTING
329 | placeholder_name = '&USER_FIRST_NAME&'
330 | placeholder_value = CONV #( 'User firstname' ) ).
331 |
332 | SELECT carrid, connid, fldate, price
333 | UP TO 10 ROWS FROM sflight INTO TABLE @DATA(lt_sflight).
334 |
335 | IF lt_sflight IS NOT INITIAL.
336 | email->add_zip_attachments( EXPORTING
337 | i_zip_filename = 'attach.zip'
338 | it_attachments = VALUE bcst_attachment(
339 | ( doctype = 'HTM'
340 | filename = |itab_to_HTML.html|
341 | contents_txt = NEW zcl_itab_to_html( )->convert( lt_sflight ) )
342 | ( doctype = 'XLS'
343 | filename = |itab_to_excel.xls|
344 | contents_bin = NEW zcl_itab_to_xls( )->convert( lt_sflight ) )
345 | )
346 | ).
347 | ENDIF.
348 |
349 | email->set_subject_body_template(
350 | EXPORTING
351 | template_id = filters-pemltmpt "Email body from Email template
352 | doctype = 'HTM' ).
353 |
354 | email->set_send_immediately( abap_false ).
355 | email->send( ).
356 |
357 | CATCH zcx_email INTO DATA(lx_email).
358 | MESSAGE lx_email->get_text( ) TYPE 'S'.
359 | CATCH cx_bcs_send INTO DATA(ex) .
360 | MESSAGE ex->get_text( ) TYPE 'S'.
361 | ENDTRY.
362 | ENDMETHOD.
363 |
364 | METHOD sf_example_01.
365 | DATA:
366 | fm_name TYPE rs38l_fnam,
367 | ls_output_options TYPE ssfcompop,
368 | ls_control_parameters TYPE ssfctrlop,
369 | ls_job_output_info TYPE ssfcrescl,
370 | customer TYPE scustom,
371 | bookings TYPE ty_bookings,
372 | connections TYPE ty_connections.
373 |
374 | * get data
375 | SELECT SINGLE * FROM scustom INTO customer WHERE id = '1'.
376 | CHECK sy-subrc = 0.
377 |
378 | SELECT *
379 | FROM sbook INTO TABLE bookings
380 | WHERE customid = customer-id
381 | AND carrid = 'LH'
382 | ORDER BY PRIMARY KEY.
383 |
384 | IF bookings[] IS NOT INITIAL.
385 | SELECT * FROM spfli INTO TABLE connections
386 | FOR ALL ENTRIES IN bookings
387 | WHERE carrid = bookings-carrid
388 | AND connid = bookings-connid
389 | ORDER BY PRIMARY KEY.
390 | ENDIF.
391 |
392 | * print data
393 | CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
394 | EXPORTING
395 | formname = 'SF_EXAMPLE_01'
396 | IMPORTING
397 | fm_name = fm_name
398 | EXCEPTIONS
399 | no_form = 1
400 | no_function_module = 2
401 | OTHERS = 3.
402 |
403 | IF sy-subrc <> 0.
404 | * error handling
405 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
406 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
407 | EXIT.
408 | ENDIF.
409 |
410 | ls_control_parameters-getotf = 'X'.
411 | ls_control_parameters-no_dialog = 'X'.
412 | ls_output_options-tddest = |LP01|.
413 |
414 | * now call the generated function module
415 | CALL FUNCTION fm_name
416 | EXPORTING
417 | control_parameters = ls_control_parameters
418 | output_options = ls_output_options
419 | customer = customer
420 | bookings = bookings
421 | connections = connections
422 | IMPORTING
423 | * document_output_info =
424 | job_output_info = ls_job_output_info
425 | * job_output_options =
426 | EXCEPTIONS
427 | formatting_error = 1
428 | internal_error = 2
429 | send_error = 3
430 | user_canceled = 4
431 | OTHERS = 5.
432 |
433 | IF sy-subrc <> 0.
434 | * error handling
435 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
436 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
437 | ELSE.
438 | otfdata = ls_job_output_info-otfdata.
439 | ENDIF.
440 | ENDMETHOD.
441 |
442 | METHOD process.
443 |
444 | IF 'X' = filters-phtmleml.
445 | htmleml( ).
446 | ENDIF.
447 | IF 'X' = filters-pspl2pdf.
448 | spolpdf( ).
449 | ENDIF.
450 | IF 'X' = filters-potf2pdf.
451 | otfpdf( ).
452 | ENDIF.
453 | IF 'X' = filters-pitb2xls.
454 | itabxls( ).
455 | ENDIF.
456 | IF 'X' = filters-pzipatt.
457 | zipattach( ).
458 | ENDIF.
459 |
460 | ENDMETHOD.
461 |
462 | ENDCLASS.
463 |
464 | PARAMETERS:
465 | "HTML Email body
466 | phtmleml AS CHECKBOX DEFAULT 'X' USER-COMMAND abcd,
467 | "Email spool as PDF attachment
468 | pspl2pdf AS CHECKBOX DEFAULT 'X' USER-COMMAND abcd,
469 | "Email OTF as PDF attachment
470 | potf2pdf AS CHECKBOX DEFAULT 'X' USER-COMMAND abcd,
471 | "Itab to XLS attachment
472 | pitb2xls AS CHECKBOX DEFAULT 'X' USER-COMMAND abcd,
473 | "ZIP attachment
474 | pzipatt AS CHECKBOX DEFAULT 'X' USER-COMMAND abcd,
475 | "Spool request number
476 | pspool TYPE rspoid MODIF ID spl, " DEFAULT '30594',
477 | "Email body from Email template
478 | pemltmpt TYPE smtg_tmpl_id MODIF ID tmp DEFAULT 'ZET_DEMO',
479 | "Email body from so10 text
480 | pso10txt TYPE tdobname MODIF ID spl DEFAULT 'ZEMAIL_DEMO2_BODY'.
481 |
482 | DATA :
483 | soemail TYPE ad_smtpadr,
484 | gv_so_dli_nam TYPE so_dli_nam,
485 | gs_restrict TYPE sscr_restrict.
486 |
487 | SELECTION-SCREEN BEGIN OF BLOCK rdblk WITH FRAME TITLE blkttl.
488 | PARAMETERS p_sendem AS CHECKBOX MODIF ID gr1 DEFAULT 'X'. "Send Mail
489 | SELECT-OPTIONS s_email FOR soemail NO INTERVALS MODIF ID gr1. "E-Mail Address
490 | SELECT-OPTIONS s_dlinam FOR gv_so_dli_nam NO INTERVALS MATCHCODE OBJECT /aif/so_dli_nam.
491 | SELECTION-SCREEN END OF BLOCK rdblk.
492 |
493 | AT SELECTION-SCREEN OUTPUT.
494 | IF pspl2pdf = 'X' OR
495 | pzipatt = 'X'.
496 | DATA(lv_active) = 1.
497 | ELSE.
498 | lv_active = 0.
499 | ENDIF.
500 |
501 | IF phtmleml = 'X' OR pitb2xls = 'X'.
502 | DATA(lv_active1) = 1.
503 | ELSE.
504 | lv_active1 = 0.
505 | ENDIF.
506 |
507 | LOOP AT SCREEN.
508 | CASE screen-group1.
509 | WHEN 'SPL'.
510 | screen-active = lv_active.
511 | MODIFY SCREEN.
512 | WHEN 'TMP'.
513 | screen-active = lv_active1.
514 | MODIFY SCREEN.
515 | ENDCASE.
516 | ENDLOOP.
517 |
518 | INITIALIZATION.
519 |
520 | SELECT rqident UP TO 1 ROWS
521 | FROM tsp01 INTO pspool
522 | ORDER BY rqcretime DESCENDING.
523 | ENDSELECT.
524 |
525 | s_email[] = VALUE #( sign = 'I' option = 'EQ'
526 | ( low = 'test@test.com' ) ).
527 |
528 | START-OF-SELECTION.
529 | IF pspool IS INITIAL.
530 | SELECT rqident UP TO 1 ROWS
531 | FROM tsp01 INTO pspool
532 | ORDER BY rqcretime DESCENDING.
533 | ENDSELECT.
534 | ENDIF.
535 |
536 | pemltmpt = COND #( WHEN pemltmpt IS INITIAL THEN |ZET_DEMO| ELSE pemltmpt ).
537 | pso10txt = COND #( WHEN pso10txt IS INITIAL THEN |ZEMAIL_DEMO2_BODY| ELSE pso10txt ).
538 |
539 | DATA(email_demo) = NEW zcl_email_demo( ).
540 | email_demo->process( ).
541 |
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Email
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/zcl_email.clas.abap:
--------------------------------------------------------------------------------
1 | "! Email
2 | CLASS zcl_email DEFINITION
3 | PUBLIC
4 | INHERITING FROM cl_bcs_message
5 | FINAL
6 | CREATE PUBLIC.
7 |
8 | PUBLIC SECTION.
9 |
10 | METHODS:
11 | "! set email body from so10 text
12 | set_body_so10
13 | IMPORTING
14 | text_name TYPE tdobname
15 | language TYPE bcs_language DEFAULT sy-langu
16 | doctype TYPE bcs_doctype DEFAULT 'txt'
17 | tdid TYPE thead-tdid DEFAULT 'ST'
18 | tdobject TYPE thead-tdobject DEFAULT 'TEXT',
19 |
20 | "! set email subject from so10 text
21 | set_subject_so10
22 | IMPORTING
23 | text_name TYPE tdobname
24 | language TYPE bcs_language DEFAULT sy-langu
25 | doctype TYPE bcs_doctype DEFAULT 'txt'
26 | tdid TYPE thead-tdid DEFAULT 'ST'
27 | tdobject TYPE thead-tdobject DEFAULT 'TEXT',
28 |
29 | "! set email body and subject from email Template id
30 | set_subject_body_template
31 | IMPORTING
32 | template_id TYPE smtg_tmpl_id
33 | language TYPE bcs_language DEFAULT sy-langu
34 | doctype TYPE bcs_doctype DEFAULT 'txt',
35 |
36 | "! set placeholder
37 | set_placeholder
38 | IMPORTING
39 | placeholder_name TYPE string
40 | placeholder_value TYPE string,
41 |
42 | "! Add recipient email id from SAP DL
43 | add_dl_recipients
44 | IMPORTING
45 | dlinam TYPE so_dli_nam
46 | copy TYPE bcs_copy OPTIONAL,
47 |
48 | "! set Itab Placeholder
49 | set_placeholder_itab
50 | IMPORTING
51 | placeholder_name TYPE string
52 | VALUE(placeholder_itab) TYPE STANDARD TABLE,
53 |
54 | "! add ZIP attachments
55 | add_zip_attachments
56 | IMPORTING
57 | i_zip_doctype TYPE bcs_doctype DEFAULT 'zip'
58 | i_zip_description TYPE bcs_description OPTIONAL
59 | i_zip_filename TYPE bcs_filename DEFAULT 'attach.zip'
60 | i_codepage TYPE bcs_codepage OPTIONAL
61 | it_attachments TYPE bcst_attachment
62 | RAISING
63 | zcx_email.
64 |
65 | CLASS-METHODS:
66 | "! validate email id
67 | is_emailid_valid
68 | IMPORTING
69 | emailid TYPE ad_smtpadr
70 | RETURNING
71 | VALUE(is_emailid_valid) TYPE abap_bool .
72 |
73 | PROTECTED SECTION.
74 | PRIVATE SECTION.
75 |
76 | DATA gt_data_key TYPE if_smtg_email_template=>ty_gt_data_key .
77 |
78 | METHODS:
79 | "! Replace placeholder than CDS
80 | replace_placeholder
81 | IMPORTING replace_string TYPE string
82 | RETURNING VALUE(result) TYPE string,
83 |
84 | "! read so10 text
85 | read_so10_text
86 | IMPORTING text_name TYPE tdobname
87 | language TYPE bcs_language DEFAULT sy-langu
88 | doctype TYPE bcs_doctype DEFAULT 'txt'
89 | tdid TYPE thead-tdid DEFAULT 'ST'
90 | tdobject TYPE thead-tdobject DEFAULT 'TEXT'
91 | RETURNING VALUE(r_contents_txt) TYPE string,
92 |
93 | "! DL public or private
94 | is_dl_shared
95 | IMPORTING dl_name TYPE so_dli_nam
96 | RETURNING VALUE(r_shared_dl) TYPE so_text001.
97 |
98 | ENDCLASS.
99 |
100 | CLASS zcl_email IMPLEMENTATION.
101 |
102 | METHOD add_dl_recipients.
103 |
104 | DATA :
105 | li_dli TYPE TABLE OF sodlienti1.
106 |
107 | DATA(lv_shared_dli) = is_dl_shared( dlinam ).
108 |
109 | CALL FUNCTION 'SO_DLI_READ_API1'
110 | EXPORTING
111 | dli_name = dlinam
112 | shared_dli = lv_shared_dli
113 | TABLES
114 | dli_entries = li_dli
115 | EXCEPTIONS
116 | dli_not_exist = 1
117 | operation_no_authorization = 2
118 | parameter_error = 3
119 | x_error = 4
120 | OTHERS = 5.
121 | IF sy-subrc = 0.
122 | LOOP AT li_dli INTO DATA(ls_dli).
123 | add_recipient(
124 | iv_address = CONV #( ls_dli-member_adr ) " Communication Address (for INT, FAX, SMS, and so on)
125 | iv_visible_name = CONV #( ls_dli-full_name ) " Display Name of an Address
126 | iv_copy = copy ). " Copy Recipients (None, CC, BCC)
127 |
128 | ENDLOOP.
129 | ENDIF.
130 |
131 | ENDMETHOD.
132 |
133 | METHOD add_zip_attachments.
134 |
135 | DATA:
136 | lv_xstring TYPE xstring.
137 |
138 | IF it_attachments IS NOT INITIAL.
139 | TRY.
140 | DATA(lo_zippers) = NEW cl_abap_zip( ). "" Zip class Declaration
141 |
142 | LOOP AT it_attachments INTO DATA(ls_attachments).
143 | CLEAR lv_xstring.
144 |
145 | IF ls_attachments-contents_txt IS INITIAL AND
146 | ls_attachments-contents_bin IS INITIAL.
147 | ELSE.
148 | IF ls_attachments-contents_txt IS NOT INITIAL.
149 |
150 | lv_xstring =
151 | cl_bcs_convert=>string_to_xstring( iv_string = ls_attachments-contents_txt
152 | iv_codepage = CONV #( ls_attachments-codepage ) ). "'4103'
153 |
154 | ELSEIF ls_attachments-contents_bin IS NOT INITIAL..
155 | lv_xstring = ls_attachments-contents_bin.
156 | ENDIF.
157 |
158 | "Xstring to binary
159 | "add file to zip
160 | lo_zippers->add( name = ls_attachments-filename
161 | content = lv_xstring ).
162 |
163 | ENDIF.
164 | ENDLOOP.
165 |
166 | CLEAR lv_xstring.
167 | "save zip
168 | lv_xstring = lo_zippers->save( ).
169 |
170 | CATCH cx_bcs.
171 | "MESSAGE e445(so).
172 | zcx_email=>raise_t100( iv_msgid = 'SO'
173 | iv_msgno = 445 ).
174 | ENDTRY.
175 |
176 | add_attachment( iv_doctype = i_zip_doctype " Document Type
177 | iv_description = i_zip_description " Short Description of Contents
178 | iv_filename = i_zip_filename " File Name (with Extension)
179 | iv_contents_bin = lv_xstring ). " Binary Document Content
180 |
181 | ENDIF.
182 | ENDMETHOD.
183 |
184 | METHOD is_dl_shared.
185 |
186 | SELECT SINGLE owntp, ownyr, ownno
187 | FROM soid INTO @DATA(ls_soid)
188 | WHERE objnam = @dl_name AND
189 | dlitp EQ 'DLI'.
190 |
191 | IF ls_soid IS INITIAL.
192 | "shared DL
193 | r_shared_dl = 'X'.
194 | ELSE.
195 | "Private DL
196 | r_shared_dl = space.
197 | ENDIF.
198 | ENDMETHOD.
199 |
200 | METHOD is_emailid_valid.
201 | DATA ls_address TYPE sx_address.
202 | ls_address-type = 'INT'.
203 | ls_address-address = emailid.
204 |
205 | CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL'
206 | EXPORTING
207 | address_unstruct = ls_address
208 | EXCEPTIONS
209 | error_address_type = 1
210 | error_address = 2
211 | error_group_address = 3
212 | OTHERS = 4.
213 | IF sy-subrc EQ 0.
214 | is_emailid_valid = abap_true.
215 | ENDIF.
216 | ENDMETHOD.
217 |
218 | METHOD read_so10_text.
219 | DATA :
220 | li_lines TYPE TABLE OF tline,
221 | lw_lines TYPE tline.
222 |
223 | DATA: lv_no_of_lines LIKE sy-tabix,
224 | lv_changed(1) TYPE c.
225 |
226 | DATA: lv_header TYPE thead.
227 |
228 | IF text_name IS NOT INITIAL.
229 |
230 | CALL FUNCTION 'READ_TEXT'
231 | EXPORTING
232 | id = tdid "'ST'
233 | language = language
234 | name = text_name
235 | object = tdobject "'TEXT'
236 | IMPORTING
237 | header = lv_header
238 | TABLES
239 | lines = li_lines
240 | EXCEPTIONS
241 | id = 1
242 | language = 2
243 | name = 3
244 | not_found = 4
245 | object = 5
246 | reference_check = 6
247 | wrong_access_to_archive = 7
248 | OTHERS = 8.
249 |
250 | IF sy-subrc <> 0.
251 | * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
252 | * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
253 | ELSE.
254 |
255 | LOOP AT gt_data_key INTO DATA(ls_data_key).
256 | CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
257 | EXPORTING
258 | name = ls_data_key-name
259 | value = ls_data_key-value.
260 | ENDLOOP.
261 |
262 | DESCRIBE TABLE li_lines LINES lv_no_of_lines.
263 |
264 | CALL FUNCTION 'TEXT_SYMBOL_REPLACE'
265 | EXPORTING
266 | endline = lv_no_of_lines
267 | header = lv_header
268 | init = ' '
269 | option_dialog = ' '
270 | program = sy-cprog
271 | IMPORTING
272 | changed = lv_changed
273 | newheader = lv_header
274 | TABLES
275 | lines = li_lines.
276 |
277 | LOOP AT li_lines INTO lw_lines.
278 | IF lw_lines-tdformat = '=' OR
279 | lw_lines-tdformat = ' '. " Continuous Text
280 | r_contents_txt = r_contents_txt && lw_lines-tdline.
281 | ELSE.
282 | r_contents_txt = r_contents_txt && cl_abap_char_utilities=>cr_lf && lw_lines-tdline.
283 | ENDIF.
284 | ENDLOOP.
285 | ENDIF.
286 | ENDIF.
287 | ENDMETHOD.
288 |
289 | METHOD replace_placeholder.
290 | result = replace_string.
291 | LOOP AT gt_data_key INTO DATA(ls_data_key).
292 | REPLACE ALL OCCURRENCES OF ls_data_key-name IN result WITH ls_data_key-value.
293 | ENDLOOP.
294 | ENDMETHOD.
295 |
296 | METHOD set_body_so10.
297 | "get Email body from so10 text.
298 | set_main_doc(
299 | EXPORTING
300 | iv_contents_txt = " Main Documet, First Body Part
301 | read_so10_text( EXPORTING text_name = text_name
302 | language = language
303 | doctype = doctype
304 | tdid = tdid
305 | tdobject = tdobject )
306 | iv_doctype = doctype ). " Document Category
307 |
308 | ENDMETHOD.
309 |
310 |
311 | METHOD set_placeholder.
312 | APPEND VALUE #( name = placeholder_name
313 | value = placeholder_value )
314 | TO gt_data_key.
315 | ENDMETHOD.
316 |
317 | METHOD set_placeholder_itab.
318 |
319 | APPEND VALUE #( name = placeholder_name
320 | "Convert ITAB to HTML. zcl_itab_to_html
321 | value = NEW zcl_itab_to_html( )->convert( placeholder_itab ) )
322 | TO gt_data_key.
323 | ENDMETHOD.
324 |
325 | METHOD set_subject_body_template.
326 |
327 | " read headers
328 | SELECT SINGLE cds_view FROM smtg_tmpl_hdr
329 | INTO @DATA(lv_cds_view)
330 | WHERE id EQ @template_id
331 | AND version EQ 'A'. "GC_VERSION_ACTIVE
332 | IF sy-subrc EQ 0.
333 | IF lv_cds_view IS NOT INITIAL.
334 | DATA(lt_data_key) = gt_data_key.
335 | ENDIF.
336 |
337 | TRY.
338 | DATA(lo_email_api) = cl_smtg_email_api=>get_instance( iv_template_id = template_id ).
339 |
340 | lo_email_api->render(
341 | EXPORTING
342 | iv_language = language
343 | it_data_key = lt_data_key
344 | IMPORTING
345 | ev_subject = DATA(lv_subject)
346 | ev_body_html = DATA(lv_body_html)
347 | ev_body_text = DATA(lv_body_text) ).
348 |
349 | CATCH cx_smtg_email_common INTO DATA(ex). " E-Mail API Exceptions
350 | ENDTRY.
351 |
352 | IF doctype EQ 'HTM'.
353 | DATA(lv_mailbody) = lv_body_html.
354 | ELSE.
355 | lv_mailbody = lv_body_text.
356 | ENDIF.
357 |
358 | IF lv_cds_view IS INITIAL.
359 | lv_mailbody = replace_placeholder( lv_mailbody ).
360 | lv_subject = replace_placeholder( lv_subject ).
361 | ENDIF.
362 |
363 | set_subject( lv_subject ).
364 |
365 | set_main_doc( iv_contents_txt = lv_mailbody " Main Documet, First Body Part
366 | iv_doctype = doctype ). " Document Category
367 |
368 | ENDIF.
369 | ENDMETHOD.
370 |
371 | METHOD set_subject_so10.
372 | "get Email subject from so10 text.
373 | set_subject( iv_subject = read_so10_text( text_name = text_name
374 | language = language
375 | doctype = doctype
376 | tdid = tdid
377 | tdobject = tdobject ) ).
378 | ENDMETHOD.
379 | ENDCLASS.
380 |
--------------------------------------------------------------------------------
/src/zcl_email.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_EMAIL
7 | E
8 | Email
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | ADD_DL_RECIPIENTS
17 | 7
18 | Add recipient email id from SAP DL
19 |
20 |
21 | ADD_DL_RECIPIENTS
22 | E
23 | Add recipient email id from SAP DL
24 |
25 |
26 | ADD_DL_RECIPIENTS
27 | W
28 | Add recipient email id from SAP DL
29 |
30 |
31 | ADD_DL_RECIPIENTS
32 | Z
33 | Add recipient email id from SAP DL
34 |
35 |
36 | ADD_DL_RECIPIENTS
37 | a
38 | Add recipient email id from SAP DL
39 |
40 |
41 | ADD_DL_RECIPIENTS
42 | 묩
43 | Add recipient email id from SAP DL
44 |
45 |
46 | ADD_DL_RECIPIENTS
47 | 뱋
48 | Add recipient email id from SAP DL
49 |
50 |
51 | ADD_ZIP_ATTACHMENTS
52 | E
53 | add ZIP attachments
54 |
55 |
56 | IS_DL_SHARED
57 | E
58 | DL public or private
59 |
60 |
61 | IS_EMAILID_VALID
62 | 7
63 | validate email id
64 |
65 |
66 | IS_EMAILID_VALID
67 | E
68 | validate email id
69 |
70 |
71 | IS_EMAILID_VALID
72 | W
73 | validate email id
74 |
75 |
76 | IS_EMAILID_VALID
77 | Z
78 | validate email id
79 |
80 |
81 | IS_EMAILID_VALID
82 | a
83 | validate email id
84 |
85 |
86 | IS_EMAILID_VALID
87 | 묩
88 | validate email id
89 |
90 |
91 | IS_EMAILID_VALID
92 | 뱋
93 | validate email id
94 |
95 |
96 | READ_SO10_TEXT
97 | E
98 | read so10 text
99 |
100 |
101 | REPLACE_PLACEHOLDER
102 | 7
103 | Replace placeholder than CDS
104 |
105 |
106 | REPLACE_PLACEHOLDER
107 | E
108 | Replace placeholder than CDS
109 |
110 |
111 | REPLACE_PLACEHOLDER
112 | W
113 | Replace placeholder than CDS
114 |
115 |
116 | REPLACE_PLACEHOLDER
117 | Z
118 | Replace placeholder than CDS
119 |
120 |
121 | REPLACE_PLACEHOLDER
122 | a
123 | Replace placeholder than CDS
124 |
125 |
126 | REPLACE_PLACEHOLDER
127 | 묩
128 | Replace placeholder than CDS
129 |
130 |
131 | REPLACE_PLACEHOLDER
132 | 뱋
133 | Replace placeholder than CDS
134 |
135 |
136 | SET_BODY_SO10
137 | 7
138 | set email body from so10 text
139 |
140 |
141 | SET_BODY_SO10
142 | E
143 | set email body from so10 text
144 |
145 |
146 | SET_BODY_SO10
147 | W
148 | set email body from so10 text
149 |
150 |
151 | SET_BODY_SO10
152 | Z
153 | set email body from so10 text
154 |
155 |
156 | SET_BODY_SO10
157 | a
158 | set email body from so10 text
159 |
160 |
161 | SET_BODY_SO10
162 | 묩
163 | set email body from so10 text
164 |
165 |
166 | SET_BODY_SO10
167 | 뱋
168 | set email body from so10 text
169 |
170 |
171 | SET_PLACEHOLDER
172 | 7
173 | set placeholder
174 |
175 |
176 | SET_PLACEHOLDER
177 | E
178 | set placeholder
179 |
180 |
181 | SET_PLACEHOLDER
182 | W
183 | set placeholder
184 |
185 |
186 | SET_PLACEHOLDER
187 | Z
188 | set placeholder
189 |
190 |
191 | SET_PLACEHOLDER
192 | a
193 | set placeholder
194 |
195 |
196 | SET_PLACEHOLDER
197 | 묩
198 | set placeholder
199 |
200 |
201 | SET_PLACEHOLDER
202 | 뱋
203 | set placeholder
204 |
205 |
206 | SET_PLACEHOLDER_ITAB
207 | 7
208 | set placeholder internal table
209 |
210 |
211 | SET_PLACEHOLDER_ITAB
212 | E
213 | set Itab Placeholder
214 |
215 |
216 | SET_PLACEHOLDER_ITAB
217 | W
218 | set placeholder internal table
219 |
220 |
221 | SET_PLACEHOLDER_ITAB
222 | Z
223 | set placeholder internal table
224 |
225 |
226 | SET_PLACEHOLDER_ITAB
227 | a
228 | set placeholder internal table
229 |
230 |
231 | SET_PLACEHOLDER_ITAB
232 | 묩
233 | set placeholder internal table
234 |
235 |
236 | SET_PLACEHOLDER_ITAB
237 | 뱋
238 | set placeholder internal table
239 |
240 |
241 | SET_SUBJECT_BODY_TEMPLATE
242 | 7
243 | set email body and subject from email Template id
244 |
245 |
246 | SET_SUBJECT_BODY_TEMPLATE
247 | E
248 | set email body and subject from email Template id
249 |
250 |
251 | SET_SUBJECT_BODY_TEMPLATE
252 | W
253 | set email body and subject from email Template id
254 |
255 |
256 | SET_SUBJECT_BODY_TEMPLATE
257 | Z
258 | set email body and subject from email Template id
259 |
260 |
261 | SET_SUBJECT_BODY_TEMPLATE
262 | a
263 | set email body and subject from email Template id
264 |
265 |
266 | SET_SUBJECT_BODY_TEMPLATE
267 | 묩
268 | set email body and subject from email Template id
269 |
270 |
271 | SET_SUBJECT_BODY_TEMPLATE
272 | 뱋
273 | set email body and subject from email Template id
274 |
275 |
276 | SET_SUBJECT_SO10
277 | E
278 | set email subject from so10 text
279 |
280 |
281 |
282 |
283 | SET_SUBJECT_BODY_TEMPLATE
284 | DOCTYPE
285 | 7
286 | HTM HTML or txt Text
287 |
288 |
289 | SET_SUBJECT_BODY_TEMPLATE
290 | DOCTYPE
291 | E
292 | HTM HTML or txt Text
293 |
294 |
295 | SET_SUBJECT_BODY_TEMPLATE
296 | DOCTYPE
297 | W
298 | HTM HTML or txt Text
299 |
300 |
301 | SET_SUBJECT_BODY_TEMPLATE
302 | DOCTYPE
303 | Z
304 | HTM HTML or txt Text
305 |
306 |
307 | SET_SUBJECT_BODY_TEMPLATE
308 | DOCTYPE
309 | a
310 | HTM HTML or txt Text
311 |
312 |
313 | SET_SUBJECT_BODY_TEMPLATE
314 | DOCTYPE
315 | 묩
316 | HTM HTML or txt Text
317 |
318 |
319 | SET_SUBJECT_BODY_TEMPLATE
320 | DOCTYPE
321 | 뱋
322 | HTM HTML or txt Text
323 |
324 |
325 |
326 |
327 |
328 |
--------------------------------------------------------------------------------
/src/zcl_itab_to_html.clas.abap:
--------------------------------------------------------------------------------
1 | "! Converts the internal table into HTML format
2 | CLASS zcl_itab_to_html DEFINITION PUBLIC CREATE PUBLIC.
3 | PUBLIC SECTION.
4 | METHODS:
5 |
6 | constructor
7 | IMPORTING
8 | table_id TYPE string OPTIONAL
9 | table_class TYPE string OPTIONAL
10 | table_style TYPE string DEFAULT 'width: 80%; border: #999 1px solid; border-collapse: collapse;'
11 | tr_class TYPE string OPTIONAL
12 | tr_style TYPE string OPTIONAL
13 | th_class TYPE string OPTIONAL
14 | th_style TYPE string DEFAULT 'font-weight: bold; border: #999 1px solid; background: #eee;'
15 | td_class TYPE string OPTIONAL
16 | td_style TYPE string DEFAULT 'border: #999 1px solid;',
17 |
18 | convert
19 | IMPORTING tbl TYPE ANY TABLE
20 | RETURNING VALUE(ret) TYPE string.
21 |
22 | PROTECTED SECTION.
23 | TYPES:
24 | BEGIN OF t_table_description,
25 | name TYPE string,
26 | title TYPE string,
27 | description TYPE string,
28 | END OF t_table_description,
29 | t_table_description_t TYPE STANDARD TABLE OF t_table_description WITH KEY name.
30 |
31 |
32 | DATA:
33 | cellpadding TYPE i VALUE 0,
34 | cellspacing TYPE i VALUE 0,
35 |
36 | table_class TYPE string VALUE '',
37 | table_id TYPE string VALUE '',
38 | table_style TYPE string VALUE '',
39 |
40 | tr_class TYPE string VALUE '',
41 | tr_style TYPE string VALUE '',
42 |
43 | th_class TYPE string VALUE '',
44 | th_style TYPE string VALUE '',
45 |
46 | td_class TYPE string VALUE '',
47 | td_style TYPE string VALUE ''.
48 |
49 | METHODS:
50 | get_description
51 | IMPORTING tbl TYPE ANY TABLE
52 | RETURNING VALUE(ret) TYPE t_table_description_t,
53 |
54 | title
55 | IMPORTING desc TYPE t_table_description_t
56 | RETURNING VALUE(ret) TYPE string,
57 |
58 | table_params
59 | RETURNING VALUE(ret) TYPE string,
60 | tr_params
61 | RETURNING VALUE(ret) TYPE string,
62 | th_params
63 | RETURNING VALUE(ret) TYPE string,
64 | td_params
65 | RETURNING VALUE(ret) TYPE string,
66 |
67 | value_to_string
68 | IMPORTING field TYPE string val TYPE any
69 | RETURNING VALUE(ret) TYPE string,
70 |
71 | footer
72 | IMPORTING desc TYPE t_table_description_t
73 | RETURNING VALUE(ret) TYPE string.
74 | ENDCLASS.
75 |
76 |
77 |
78 | CLASS zcl_itab_to_html IMPLEMENTATION.
79 |
80 |
81 | METHOD constructor.
82 | IF table_id IS SUPPLIED.
83 | me->table_id = table_id.
84 | ENDIF.
85 | IF table_class IS SUPPLIED.
86 | me->table_class = table_class.
87 | ENDIF.
88 | "IF table_style IS SUPPLIED.
89 | me->table_style = table_style.
90 | "ENDIF.
91 |
92 | IF tr_class IS SUPPLIED.
93 | me->tr_class = tr_class.
94 | ENDIF.
95 | IF tr_style IS SUPPLIED.
96 | me->tr_style = tr_style.
97 | ENDIF.
98 |
99 | IF th_class IS SUPPLIED.
100 | me->th_class = th_class.
101 | ENDIF.
102 | "IF th_style IS SUPPLIED.
103 | me->th_style = th_style.
104 | "ENDIF.
105 |
106 | IF td_class IS SUPPLIED.
107 | me->td_class = td_class.
108 | ENDIF.
109 | "IF td_style IS SUPPLIED.
110 | me->td_style = td_style.
111 | "ENDIF.
112 | ENDMETHOD.
113 |
114 |
115 | METHOD convert.
116 | DATA(descr) = get_description( tbl ).
117 | DATA(tr) = tr_params( ).
118 | DATA(td) = td_params( ).
119 |
120 | DATA row TYPE string VALUE ''.
121 | LOOP AT tbl ASSIGNING FIELD-SYMBOL().
122 | CLEAR row.
123 | LOOP AT descr ASSIGNING FIELD-SYMBOL().
124 | ASSIGN COMPONENT -name OF STRUCTURE TO FIELD-SYMBOL().
125 | row = |{ row } { value_to_string( field = -name val = ) } | |.
126 | ENDLOOP.
127 |
128 | ret = |{ ret } { row }
|.
129 | ENDLOOP.
130 |
131 |
132 | ret = |{ title( descr ) }{ ret }{ footer( descr ) }|.
133 | ENDMETHOD.
134 |
135 |
136 | METHOD footer.
137 | ret = ||.
138 | ENDMETHOD.
139 |
140 |
141 | METHOD get_description.
142 | DATA(description) = CAST cl_abap_tabledescr( cl_abap_tabledescr=>describe_by_data( tbl ) ).
143 | DATA(components) = CAST cl_abap_structdescr( description->get_table_line_type( ) )->get_components( ).
144 |
145 | LOOP AT components ASSIGNING FIELD-SYMBOL().
146 | DATA(elemdescr) = CAST cl_abap_elemdescr( -type )."->get_ddic_field( ).
147 |
148 | elemdescr->get_ddic_field(
149 | RECEIVING
150 | p_flddescr = DATA(elem)
151 | EXCEPTIONS
152 | not_found = 1
153 | no_ddic_type = 2
154 | OTHERS = 3 ).
155 | IF sy-subrc <> 0.
156 | APPEND VALUE #( name = -name title = -name description = -name ) TO ret.
157 | ELSE.
158 | APPEND VALUE #( name = -name title = elem-reptext description = elem-fieldtext ) TO ret.
159 | ENDIF.
160 | ENDLOOP.
161 | ENDMETHOD.
162 |
163 |
164 | METHOD table_params.
165 | IF table_id <> ''.
166 | ret = |{ ret } id="{ table_id }"|.
167 | ENDIF.
168 |
169 | IF table_class <> ''.
170 | ret = |{ ret } class="{ table_class }"|.
171 | ENDIF.
172 |
173 | IF table_style <> ''.
174 | ret = |{ ret } style="{ table_style }"|.
175 | ENDIF.
176 | ENDMETHOD.
177 |
178 |
179 | METHOD td_params.
180 | IF td_class <> ''.
181 | ret = |{ ret } class="{ td_class }"|.
182 | ENDIF.
183 |
184 | IF td_style <> ''.
185 | ret = |{ ret } style="{ td_style }"|.
186 | ENDIF.
187 | ENDMETHOD.
188 |
189 |
190 | METHOD th_params.
191 | IF th_class <> ''.
192 | ret = |{ ret } class="{ th_class }"|.
193 | ENDIF.
194 |
195 | IF th_style <> ''.
196 | ret = |{ ret } style="{ th_style }"|.
197 | ENDIF.
198 | ENDMETHOD.
199 |
200 |
201 | METHOD title.
202 | DATA(th) = th_params( ).
203 |
204 | LOOP AT desc ASSIGNING FIELD-SYMBOL(- ).
205 | ret = |{ ret }
{ - -title }
| |.
206 | ENDLOOP.
207 |
208 | ret = | { ret }
|.
209 | ENDMETHOD.
210 |
211 |
212 | METHOD tr_params.
213 | IF tr_class <> ''.
214 | ret = |{ ret } class="{ tr_class }"|.
215 | ENDIF.
216 |
217 | IF tr_style <> ''.
218 | ret = |{ ret } style="{ tr_style }"|.
219 | ENDIF.
220 | ENDMETHOD.
221 |
222 |
223 | METHOD value_to_string.
224 | ret = CONV string( val ).
225 | ENDMETHOD.
226 | ENDCLASS.
227 |
--------------------------------------------------------------------------------
/src/zcl_itab_to_html.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ITAB_TO_HTML
7 | E
8 | Converts the internal table into HTML format
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_itab_to_xls.clas.abap:
--------------------------------------------------------------------------------
1 | "! Converts the internal table into excel_xml
2 | CLASS zcl_itab_to_xls DEFINITION
3 | PUBLIC
4 | CREATE PUBLIC.
5 |
6 | PUBLIC SECTION.
7 |
8 | METHODS constructor.
9 |
10 | METHODS convert
11 | IMPORTING
12 | tbl TYPE ANY TABLE
13 | alv_disvariant TYPE disvariant OPTIONAL
14 | RETURNING
15 | VALUE(ret) TYPE xstring.
16 | PROTECTED SECTION.
17 |
18 | ENDCLASS.
19 |
20 |
21 |
22 | CLASS zcl_itab_to_xls IMPLEMENTATION.
23 |
24 |
25 | METHOD constructor.
26 | ENDMETHOD.
27 |
28 |
29 | METHOD convert.
30 | DATA :
31 | mt_data TYPE REF TO data,
32 | salv TYPE REF TO cl_salv_table.
33 |
34 | FIELD-SYMBOLS:
35 | TYPE STANDARD TABLE.
36 |
37 | GET REFERENCE OF tbl INTO mt_data.
38 |
39 | ASSIGN mt_data->* TO .
40 | TRY .
41 | cl_salv_table=>factory(
42 | EXPORTING
43 | list_display = abap_false
44 | IMPORTING
45 | r_salv_table = salv
46 | CHANGING
47 | t_table = ).
48 | CATCH cx_salv_msg.
49 |
50 | ENDTRY.
51 |
52 | IF alv_disvariant-variant IS NOT INITIAL.
53 | DATA:
54 | lr_layout TYPE REF TO cl_salv_layout.
55 |
56 | lr_layout = salv->get_layout( ).
57 |
58 | lr_layout->set_key( VALUE #(
59 | report = COND #( WHEN alv_disvariant-report IS INITIAL THEN sy-cprog
60 | ELSE alv_disvariant-report )
61 | handle = alv_disvariant-handle ) ).
62 |
63 | lr_layout->set_initial_layout( alv_disvariant-variant ).
64 |
65 | ENDIF.
66 |
67 | ret = salv->to_xml( xml_type = if_salv_bs_xml=>c_type_excel_xml ).
68 |
69 | ENDMETHOD.
70 | ENDCLASS.
71 |
--------------------------------------------------------------------------------
/src/zcl_itab_to_xls.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_ITAB_TO_XLS
7 | E
8 | Converts the internal table into excel_xml
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/zcl_spool_to_pdf.clas.abap:
--------------------------------------------------------------------------------
1 | "! Converts the Spool into PDF
2 | CLASS zcl_spool_to_pdf DEFINITION
3 | PUBLIC
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | METHODS constructor .
9 | METHODS convert
10 | IMPORTING spoolid TYPE rspoid
11 | RETURNING VALUE(pdf_file_xstring) TYPE xstring
12 | "pdf_file_size TYPE i
13 | RAISING zcx_email.
14 |
15 | PROTECTED SECTION.
16 |
17 | ENDCLASS.
18 |
19 |
20 |
21 | CLASS zcl_spool_to_pdf IMPLEMENTATION.
22 |
23 |
24 | METHOD constructor.
25 | ENDMETHOD.
26 |
27 |
28 | METHOD convert.
29 | DATA rq TYPE tsp01.
30 | DATA bin_size TYPE i.
31 | DATA dummy TYPE TABLE OF rspoattr.
32 |
33 | * ------------ get attributes of spool request ---------------------
34 | CALL FUNCTION 'RSPO_GET_ATTRIBUTES_SPOOLJOB'
35 | EXPORTING
36 | rqident = spoolid
37 | IMPORTING
38 | rq = rq
39 | TABLES
40 | attributes = dummy
41 | EXCEPTIONS
42 | no_such_job = 1
43 | OTHERS = 2.
44 | IF sy-subrc <> 0.
45 | zcx_email=>raise_t100( EXPORTING iv_msgid = 'PO'
46 | iv_msgno = 126
47 | iv_msgv1 = CONV #( spoolid ) ).
48 | ENDIF.
49 |
50 | * --- convert spool request into PDF, dependent on document type ---
51 | IF rq-rqdoctype = 'OTF' OR rq-rqdoctype = 'SMART'.
52 | CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
53 | EXPORTING
54 | src_spoolid = spoolid
55 | no_dialog = 'X'
56 | pdf_destination = 'X'
57 | no_background = 'X'
58 | IMPORTING
59 | "pdf_bytecount = pdf_file_size
60 | bin_file = pdf_file_xstring
61 | EXCEPTIONS
62 | err_no_otf_spooljob = 1
63 | err_no_spooljob = 2
64 | err_no_permission = 3
65 | err_conv_not_possible = 4
66 | err_bad_dstdevice = 5
67 | user_cancelled = 6
68 | err_spoolerror = 7
69 | err_temseerror = 8
70 | err_btcjob_open_failed = 9
71 | err_btcjob_submit_failed = 10
72 | err_btcjob_close_failed = 11
73 | OTHERS = 12.
74 | IF sy-subrc <> 0.
75 | zcx_email=>raise_t100( EXPORTING iv_msgid = 'PO'
76 | iv_msgno = 712
77 | iv_msgv1 = CONV #( sy-subrc )
78 | iv_msgv2 = CONV #( 'CONVERT_OTFSPOOLJOB_2_PDF' ) ).
79 | ENDIF.
80 | ELSEIF rq-rqdoctype = 'LIST'.
81 | CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
82 | EXPORTING
83 | src_spoolid = spoolid
84 | no_dialog = 'X'
85 | pdf_destination = 'X'
86 | no_background = 'X'
87 | IMPORTING
88 | "pdf_bytecount = pdf_file_size
89 | bin_file = pdf_file_xstring
90 | EXCEPTIONS
91 | err_no_abap_spooljob = 1
92 | err_no_spooljob = 2
93 | err_no_permission = 3
94 | err_conv_not_possible = 4
95 | err_bad_destdevice = 5
96 | user_cancelled = 6
97 | err_spoolerror = 7
98 | err_temseerror = 8
99 | err_btcjob_open_failed = 9
100 | err_btcjob_submit_failed = 10
101 | err_btcjob_close_failed = 11
102 | OTHERS = 12.
103 | IF sy-subrc <> 0.
104 | zcx_email=>raise_t100( EXPORTING iv_msgid = 'PO'
105 | iv_msgno = 712
106 | iv_msgv1 = CONV #( sy-subrc )
107 | iv_msgv2 = CONV #( 'CONVERT_OTFSPOOLJOB_2_PDF' ) ).
108 | ENDIF.
109 | ELSE.
110 | zcx_email=>raise_t100( EXPORTING iv_msgid = 'PO'
111 | iv_msgno = 789
112 | iv_msgv1 = CONV #( rq-rqdoctype ) ).
113 |
114 | ENDIF.
115 |
116 | ENDMETHOD.
117 | ENDCLASS.
118 |
--------------------------------------------------------------------------------
/src/zcl_spool_to_pdf.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_SPOOL_TO_PDF
7 | E
8 | Converts the Spool into PDF
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 | CONVERT
17 | PDF_FILE_XSTRING
18 | E
19 | PDF BIN FILE
20 |
21 |
22 | CONVERT
23 | SPOOLID
24 | E
25 | Spool request number
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/zcx_email.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcx_email DEFINITION
2 | PUBLIC
3 | INHERITING FROM cx_static_check
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | INTERFACES if_t100_message .
9 |
10 | DATA msgv1 TYPE symsgv READ-ONLY .
11 | DATA msgv2 TYPE symsgv READ-ONLY .
12 | DATA msgv3 TYPE symsgv READ-ONLY .
13 | DATA msgv4 TYPE symsgv READ-ONLY .
14 | DATA mv_longtext TYPE string READ-ONLY .
15 |
16 | METHODS constructor
17 | IMPORTING
18 | textid LIKE if_t100_message=>t100key OPTIONAL
19 | previous LIKE previous OPTIONAL
20 | msgv1 TYPE symsgv OPTIONAL
21 | msgv2 TYPE symsgv OPTIONAL
22 | msgv3 TYPE symsgv OPTIONAL
23 | msgv4 TYPE symsgv OPTIONAL
24 | longtext TYPE csequence OPTIONAL .
25 | CLASS-METHODS raise_t100
26 | IMPORTING
27 | VALUE(iv_msgid) TYPE symsgid DEFAULT sy-msgid
28 | VALUE(iv_msgno) TYPE symsgno DEFAULT sy-msgno
29 | VALUE(iv_msgv1) TYPE symsgv DEFAULT sy-msgv1
30 | VALUE(iv_msgv2) TYPE symsgv DEFAULT sy-msgv2
31 | VALUE(iv_msgv3) TYPE symsgv DEFAULT sy-msgv3
32 | VALUE(iv_msgv4) TYPE symsgv DEFAULT sy-msgv4
33 | ix_previous TYPE REF TO cx_root OPTIONAL
34 | iv_longtext TYPE csequence OPTIONAL
35 | RAISING
36 | zcx_email .
37 | PROTECTED SECTION.
38 | PRIVATE SECTION.
39 | ENDCLASS.
40 |
41 |
42 |
43 | CLASS zcx_email IMPLEMENTATION.
44 |
45 |
46 | METHOD constructor ##ADT_SUPPRESS_GENERATION.
47 |
48 | super->constructor( previous = previous ).
49 |
50 | me->msgv1 = msgv1.
51 | me->msgv2 = msgv2.
52 | me->msgv3 = msgv3.
53 | me->msgv4 = msgv4.
54 | mv_longtext = longtext.
55 |
56 | CLEAR me->textid.
57 |
58 | IF textid IS INITIAL.
59 | if_t100_message~t100key = if_t100_message=>default_textid.
60 | ELSE.
61 | if_t100_message~t100key = textid.
62 | ENDIF.
63 |
64 | ENDMETHOD.
65 |
66 |
67 | METHOD raise_t100.
68 | DATA: ls_t100_key TYPE scx_t100key.
69 |
70 | ls_t100_key-msgid = iv_msgid.
71 | ls_t100_key-msgno = iv_msgno.
72 | ls_t100_key-attr1 = 'MSGV1'.
73 | ls_t100_key-attr2 = 'MSGV2'.
74 | ls_t100_key-attr3 = 'MSGV3'.
75 | ls_t100_key-attr4 = 'MSGV4'.
76 |
77 | IF iv_msgid IS INITIAL.
78 | CLEAR ls_t100_key.
79 | ENDIF.
80 |
81 | RAISE EXCEPTION NEW zcx_email( textid = ls_t100_key
82 | msgv1 = iv_msgv1
83 | msgv2 = iv_msgv2
84 | msgv3 = iv_msgv3
85 | msgv4 = iv_msgv4
86 | previous = ix_previous
87 | longtext = iv_longtext ).
88 | ENDMETHOD.
89 | ENDCLASS.
90 |
--------------------------------------------------------------------------------
/src/zcx_email.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCX_EMAIL
7 | E
8 | ZEmail general exceptions
9 | 40
10 | 1
11 | X
12 | X
13 | X
14 |
15 |
16 |
17 | CONSTRUCTOR
18 | E
19 | CONSTRUCTOR
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/zet_demo.smtg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | ZET_DEMO
8 | A
9 | X
10 |
11 |
12 |
13 | ZET_DEMO
14 | A
15 | E
16 | ||Flight details and air fare||
17 | ||Flight details and air fare||
18 |
19 |
20 |
21 |
22 | ZET_DEMO
23 | A
24 | E
25 | ||Flight details and air fare||
26 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
27 | <html>
28 | <head>
29 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
30 | <title></title>
31 | </head>
32 | <body style="background-color:gray">
33 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
34 | <tbody>
35 | <tr>
36 | <td>
37 | <p>Hello &USER_FIRST_NAME&!</p>
38 | </td>
39 | </tr>
40 | <tr>
41 | <td>
42 | <p>We would like to inform you about Flight details and air fare.</p>
43 | </td>
44 | </tr>
45 | <tr> <td>
46 | &SFLIGHT_TAB&
47 | </td> </tr>
48 | <tr>
49 | <td>
50 | <p style="line-height:0.2">Thank you.</p>
51 | <p style="line-height:0.2">TATA Air.</p>
52 | </td>
53 | </tr>
54 | </tbody>
55 | </table>
56 | <br>
57 | </body>
58 | </html>
59 |
60 |
61 |
62 | ZET_DEMO
63 | A
64 | W
65 | ||Flight details and air fare||
66 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
67 | <html>
68 | <head>
69 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
70 | <title></title>
71 | </head>
72 | <body style="background-color:gray">
73 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
74 | <tbody>
75 | <tr>
76 | <td>
77 | <p>Hello &USER_FIRST_NAME&!</p>
78 | </td>
79 | </tr>
80 | <tr>
81 | <td>
82 | <p>We would like to inform you about Flight details and air fare.</p>
83 | </td>
84 | </tr>
85 | <tr> <td>
86 | &SFLIGHT_TAB&
87 | </td> </tr>
88 | <tr>
89 | <td>
90 | <p style="line-height:0.2">Thank you.</p>
91 | <p style="line-height:0.2">TATA Air.</p>
92 | </td>
93 | </tr>
94 | </tbody>
95 | </table>
96 | <br>
97 | </body>
98 | </html>
99 |
100 |
101 |
102 | ZET_DEMO
103 | A
104 | 묩
105 | ||Flight details and air fare||
106 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
107 | <html>
108 | <head>
109 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
110 | <title></title>
111 | </head>
112 | <body style="background-color:gray">
113 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
114 | <tbody>
115 | <tr>
116 | <td>
117 | <p>Hello &USER_FIRST_NAME&!</p>
118 | </td>
119 | </tr>
120 | <tr>
121 | <td>
122 | <p>We would like to inform you about Flight details and air fare.</p>
123 | </td>
124 | </tr>
125 | <tr> <td>
126 | &SFLIGHT_TAB&
127 | </td> </tr>
128 | <tr>
129 | <td>
130 | <p style="line-height:0.2">Thank you.</p>
131 | <p style="line-height:0.2">TATA Air.</p>
132 | </td>
133 | </tr>
134 | </tbody>
135 | </table>
136 | <br>
137 | </body>
138 | </html>
139 |
140 |
141 |
142 | ZET_DEMO
143 | A
144 | 뱋
145 | ||Flight details and air fare||
146 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
147 | <html>
148 | <head>
149 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
150 | <title></title>
151 | </head>
152 | <body style="background-color:gray">
153 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
154 | <tbody>
155 | <tr>
156 | <td>
157 | <p>Hello &USER_FIRST_NAME&!</p>
158 | </td>
159 | </tr>
160 | <tr>
161 | <td>
162 | <p>We would like to inform you about Flight details and air fare.</p>
163 | </td>
164 | </tr>
165 | <tr> <td>
166 | &SFLIGHT_TAB&
167 | </td> </tr>
168 | <tr>
169 | <td>
170 | <p style="line-height:0.2">Thank you.</p>
171 | <p style="line-height:0.2">TATA Air.</p>
172 | </td>
173 | </tr>
174 | </tbody>
175 | </table>
176 | <br>
177 | </body>
178 | </html>
179 |
180 |
181 |
182 | ZET_DEMO
183 | A
184 | Z
185 | ||Flight details and air fare||
186 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
187 | <html>
188 | <head>
189 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
190 | <title></title>
191 | </head>
192 | <body style="background-color:gray">
193 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
194 | <tbody>
195 | <tr>
196 | <td>
197 | <p>Hello &USER_FIRST_NAME&!</p>
198 | </td>
199 | </tr>
200 | <tr>
201 | <td>
202 | <p>We would like to inform you about Flight details and air fare.</p>
203 | </td>
204 | </tr>
205 | <tr> <td>
206 | &SFLIGHT_TAB&
207 | </td> </tr>
208 | <tr>
209 | <td>
210 | <p style="line-height:0.2">Thank you.</p>
211 | <p style="line-height:0.2">TATA Air.</p>
212 | </td>
213 | </tr>
214 | </tbody>
215 | </table>
216 | <br>
217 | </body>
218 | </html>
219 |
220 |
221 |
222 | ZET_DEMO
223 | A
224 | 7
225 | ||Flight details and air fare||
226 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
227 | <html>
228 | <head>
229 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
230 | <title></title>
231 | </head>
232 | <body style="background-color:gray">
233 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
234 | <tbody>
235 | <tr>
236 | <td>
237 | <p>Hello &USER_FIRST_NAME&!</p>
238 | </td>
239 | </tr>
240 | <tr>
241 | <td>
242 | <p>We would like to inform you about Flight details and air fare.</p>
243 | </td>
244 | </tr>
245 | <tr> <td>
246 | &SFLIGHT_TAB&
247 | </td> </tr>
248 | <tr>
249 | <td>
250 | <p style="line-height:0.2">Thank you.</p>
251 | <p style="line-height:0.2">TATA Air.</p>
252 | </td>
253 | </tr>
254 | </tbody>
255 | </table>
256 | <br>
257 | </body>
258 | </html>
259 |
260 |
261 |
262 | ZET_DEMO
263 | A
264 | a
265 | ||Flight details and air fare||
266 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
267 | <html>
268 | <head>
269 | <meta name="generator" content="HTML Tidy for SAP R/3 (vers 25 March 2009), see www.w3.org">
270 | <title></title>
271 | </head>
272 | <body style="background-color:gray">
273 | <table align="center" border="0" cellpadding="5" cellspacing="5" width="750" bgcolor="white" style="font-family:Arial; font-weight: bolder; font-size: 15px; letter-spacing: 0.025em; color:black; padding-right:20px; padding-left:20px">
274 | <tbody>
275 | <tr>
276 | <td>
277 | <p>Hello &USER_FIRST_NAME&!</p>
278 | </td>
279 | </tr>
280 | <tr>
281 | <td>
282 | <p>We would like to inform you about Flight details and air fare.</p>
283 | </td>
284 | </tr>
285 | <tr> <td>
286 | &SFLIGHT_TAB&
287 | </td> </tr>
288 | <tr>
289 | <td>
290 | <p style="line-height:0.2">Thank you.</p>
291 | <p style="line-height:0.2">TATA Air.</p>
292 | </td>
293 | </tr>
294 | </tbody>
295 | </table>
296 | <br>
297 | </body>
298 | </html>
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
--------------------------------------------------------------------------------