0% found this document useful (0 votes)
9 views6 pages

rrrr

The document outlines a method for processing purchase orders (PO) in an ABAP program, including fetching user data, sending email notifications to approvers, and updating PO release statuses. It incorporates logic for handling various transaction codes related to PO management and includes functionality for saving PO layouts in a Document Management System (DMS) upon final approval. Additionally, the document details the structure of data handling and error management during the email sending process.

Uploaded by

sslsreekanth800
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views6 pages

rrrr

The document outlines a method for processing purchase orders (PO) in an ABAP program, including fetching user data, sending email notifications to approvers, and updating PO release statuses. It incorporates logic for handling various transaction codes related to PO management and includes functionality for saving PO layouts in a Document Management System (DMS) upon final approval. Additionally, the document details the structure of data handling and error management during the email sending process.

Uploaded by

sslsreekanth800
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

SELECT SINGLE * FROM usr21 INTO @DATA(wa_usr21_l1) WHERE bname = @header_data-

ernam.
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM adr6 INTO @DATA(wa_adr6_l1) WHERE addrnumber =
@wa_usr21_l1-addrnumber AND persnumber = @wa_usr21_l1-persnumber.
IF sy-subrc EQ 0 .
wa_user_master-smtp_addr = wa_adr6_l1-smtp_addr.
ENDIF.
ENDIF.

METHOD if_ex_me_process_po_cust~post .

DATA : wa_items TYPE REF TO if_purchase_order_item_mm,


wa_ekko TYPE mepoitem,
po_no TYPE na_objkey,
im_objkey TYPE na_objkey,
it_ekko TYPE TABLE OF mepoitem,
it_tcode TYPE TABLE OF selopt.

DATA(po_hdu) = im_header->get_data( ).
DATA(it_po_idu) = im_header->get_items( ).

REFRESH : it_ekko.

SELECT SINGLE sender_uname FROM zsender_mail INTO @DATA(sender_uname).

LOOP AT it_po_idu INTO DATA(wa_po_idu).


wa_items ?= wa_po_idu-item.
wa_ekko = wa_items->get_data( ).
APPEND wa_ekko TO it_ekko.
CLEAR : wa_ekko.
ENDLOOP.

CALL FUNCTION 'ZMM_PO_DATA_UPDATE' IN UPDATE TASK


EXPORTING
im_ebeln = im_ebeln
header = po_hdu
item = it_ekko.

"""""""""""""Begin of to Update PO approver Date in Staging Table """""""""""""

DATA : wa_po_release_status TYPE zmm_po_release_s.


CLEAR : po_no,im_objkey,wa_po_release_status.
DATA(header_data) = im_header->get_data( ).

FIELD-SYMBOLS : <fs_value> TYPE any .


DATA : lv_field TYPE string.
DATA : wa_po_log TYPE zmm_po_log.

IF sy-tcode = 'ME29N' or sy-tcode = 'ME22N' or sy-tcode = 'ME21N' or sy-tcode =


'ME23N' or sy-tcode = 'ZME28' .

DATA : lv_str_len TYPE string,


lv_fieldname TYPE string.

CLEAR : lv_fieldname.
BREAK sap_abap1.
********************************************************31.07.2024
DATA : zmm_po_reset TYPE zmm_po_reset.
IMPORT zmm_po_reset TO zmm_po_reset FROM MEMORY ID 'ZMM_PO_RESET_1'.
********************************************************31.07.2024
lv_str_len = strlen( header_data-frgzu ).
CONCATENATE 'FRGC' lv_str_len INTO lv_fieldname.
"To Get Release Code
SELECT SINGLE * FROM t16fs INTO @DATA(wa_t16fs) WHERE frggr = @header_data-
frggr AND frgsx = @header_data-frgsx .
IF sy-subrc EQ 0.
ASSIGN COMPONENT lv_fieldname OF STRUCTURE wa_t16fs TO <fs_value>.
ENDIF.

"To Get Version


SELECT SINGLE revno FROM ekko INTO @DATA(lv_revno) WHERE ebeln = @header_data-
ebeln.
IF lv_revno IS INITIAL.
lv_revno = '00000000'.
ENDIF.

IF <fs_value> IS ASSIGNED .
SELECT SINGLE frgct FROM t16fd INTO @wa_po_release_status-frgct WHERE spras =
@sy-langu AND frggr = @header_data-frggr AND frgco = @<fs_value>.
wa_po_release_status-frggr = header_data-frggr.
wa_po_release_status-ebeln = header_data-ebeln.
wa_po_release_status-revno = lv_revno.
wa_po_release_status-frgco = <fs_value>.
IF zmm_po_reset-ebeln IS NOT INITIAL.
wa_po_release_status-frgco = 'L1'.
ENDIF.

wa_po_release_status-re_date = sy-datum.
wa_po_release_status-re_time = sy-uzeit.
MODIFY zmm_po_release_s FROM wa_po_release_status.
CLEAR : wa_po_release_status.
ENDIF.
"""""""""""""End of to Update PO approver Date in Staging Table """""""""""""
ENDIF.

IF header_data-memory <> 'X' ."OR lv_changes_check = ' '.

IF sy-tcode = 'ME29N' OR sy-tcode = 'ME21N' OR sy-tcode = 'ME22N' or sy-tcode


= 'ME23N' OR sy-tcode = 'ZME28'.
"""""""""""""Begin of Email notification for PO approvers"""""""""""""

DATA : it_user_master TYPE zuser_master_t,


wa_user_master TYPE LINE OF zuser_master_t.

DATA: lcl_v_wi_id TYPE sww_wiid, "Work Item ID


lv_wid_text TYPE char12,
it_text TYPE bcsy_text,
lv_string_text TYPE so_text255,
send_request TYPE REF TO cl_bcs,
document TYPE REF TO cl_document_bcs,
sender TYPE REF TO cl_sapuser_bcs,
recipient TYPE REF TO if_recipient_bcs,
bcs_exception TYPE REF TO cx_bcs,
sent_to_all TYPE os_boolean,
t16fd TYPE t16fd.

REFRESH : it_user_master.
CLEAR : lcl_v_wi_id,lv_wid_text,it_text,lv_string_text.
CLEAR : send_request,document,sender,recipient,bcs_exception.
**********************************************************31.07.2024 sreekanht
IF zmm_po_reset-ebeln IS NOT INITIAL.
CLEAR: header_data-frgzu,header_data-frgke .
ENDIF.
**********************************************************31.07.2024 sreekanht

CALL FUNCTION 'ZPO_USER_MASTER'


EXPORTING
frggr = header_data-frggr
frgsx = header_data-frgsx
frgzu = header_data-frgzu
IMPORTING
user_master = it_user_master
t16fd = t16fd.

BREAK sap_abap1.

wa_po_log-ebeln = im_ebeln.
wa_po_log-entry_date = sy-datum.
wa_po_log-entry_time = sy-uzeit.
wa_po_log-log = 'Start of Enchament'.
MODIFY zmm_po_log FROM wa_po_log.
CLEAR : wa_po_log.

"Below Logic to send Mail from PO Created to Final Approver


IF it_user_master IS NOT INITIAL.

WAIT UP TO 1 SECONDS.

LOOP AT it_user_master INTO wa_user_master WHERE bname <> 'DUMMY'.

IF wa_user_master-bname = 'L1'.
SELECT SINGLE * FROM usr21 INTO @DATA(wa_usr21_l1) WHERE bname =
@header_data-ernam.
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM adr6 INTO @DATA(wa_adr6_l1) WHERE addrnumber =
@wa_usr21_l1-addrnumber AND persnumber = @wa_usr21_l1-persnumber.
IF sy-subrc EQ 0 .
wa_user_master-smtp_addr = wa_adr6_l1-smtp_addr.
ENDIF.
ENDIF.
ENDIF.

REFRESH : it_text.
TRY.
send_request = cl_bcs=>create_persistent( ).
"Line-1
CONCATENATE 'Dear Colleague,' cl_abap_char_utilities=>newline INTO
lv_string_text.
APPEND lv_string_text TO it_text.
CLEAR lv_string_text.
"Line-1
CONCATENATE 'Release code' t16fd-frgco '-' t16fd-frgct
cl_abap_char_utilities=>newline INTO lv_string_text.
APPEND lv_string_text TO it_text.
CLEAR lv_string_text.
"Line-2
CONCATENATE 'PO ' header_data-ebeln 'is pending for release at your
end.'
cl_abap_char_utilities=>newline INTO lv_string_text SEPARATED BY
space.
APPEND lv_string_text TO it_text.
CLEAR lv_string_text.
"Line-3
APPEND 'Best Regards,' TO it_text.
"Line-4
APPEND 'IT Team.' TO it_text.

document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = it_text
* i_length = '12'
i_subject = | Release PO { header_data-ebeln } | ).

* Add document to send request


CALL METHOD send_request->set_document( document ).

sender = cl_sapuser_bcs=>create( sender_uname ).


CALL METHOD send_request->set_sender
EXPORTING
i_sender = sender.

recipient =
cl_cam_address_bcs=>create_internet_address( wa_user_master-smtp_addr ).
* Add recipient with its respective attributes to send request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'.

IF wa_user_master-bname <> 'L1'.


"For CC
SELECT SINGLE * FROM usr21 INTO @DATA(wa_usr211) WHERE bname =
@header_data-ernam.
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM adr6 INTO @DATA(wa_adr61) WHERE addrnumber =
@wa_usr211-addrnumber AND persnumber = @wa_usr211-persnumber.
IF sy-subrc EQ 0 .
recipient =
cl_cam_address_bcs=>create_internet_address( wa_adr61-smtp_addr ).
* Add recipient with its respective attributes to send request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'
i_copy = 'X'.
ENDIF.
ENDIF.
ENDIF.

"---------- Send document ---------------------------------------


CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = sent_to_all ).

FREE : send_request,document,sender,recipient,bcs_exception.

CATCH cx_bcs INTO DATA(lo_cx_bcx1).


ENDTRY.
ENDLOOP.

ENDIF.

wa_po_log-ebeln = im_ebeln.
wa_po_log-entry_date = sy-datum.
wa_po_log-entry_time = sy-uzeit.
wa_po_log-log = 'End of Enchament'.
MODIFY zmm_po_log FROM wa_po_log.
CLEAR : wa_po_log.

"""""""""""""End of Email notification for PO approvers"""""""""""""

"""""""""""""Begin of On Final Release on PO , PO Layout is Saved in DMS


System"""""""""""""
IF header_data-frgke = 'F'.
im_objkey = im_ebeln.
CALL FUNCTION 'ZMM_PO_LAYOUT_SAVE_IN_DMS'
EXPORTING
po_no = im_objkey
send_mail = abap_true. "++Changed Raju
ENDIF.
"""""""""""""End of On Final Release on PO , PO Layout is Saved in DMS
System"""""""""""""
ENDIF.

ENDIF.

SELECT * FROM zenhancement INTO TABLE @DATA(it_enhancement) WHERE object_status =


'X'.

"Object_Id : SCM_E_018
"Object Description : PO copy email to buyer ( PO Creator ) after final approval
" When release code F released send copy
READ TABLE it_enhancement INTO DATA(wa_enhancement) WITH KEY object =
'SCM_E_018'.
IF sy-subrc EQ 0.
IF header_data-frgke = 'F'.
BREAK sap_abap1.
po_no = im_ebeln.
"Call PO Layout : Data Filling Logic
zmm_cl_po=>po_layout_data( EXPORTING po_no = po_no IMPORTING po_data =
DATA(po_data) watermark = DATA(watermark) ).

APPEND VALUE #( sign = 'I' option = 'EQ' low = 'ME29N' high = 'ME29N' ) TO
it_tcode.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'ME29N' high = 'ME28' ) TO
it_tcode.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'ME29N' high = 'ZME28' ) TO
it_tcode.
SELECT * FROM cdhdr INTO TABLE @DATA(it_cdhdr) WHERE objectclas = 'EINKBELEG'
AND objectid = @po_data-po_header-ebeln AND tcode IN @it_tcode.
SORT it_cdhdr BY udate DESCENDING.
READ TABLE it_cdhdr INTO DATA(wa_cdhdr) INDEX 1.
IF sy-subrc EQ 0.
CONCATENATE wa_cdhdr-udate+6(2) wa_cdhdr-udate+4(2) wa_cdhdr-udate+0(4)
INTO po_data-po_header-aedat SEPARATED BY '.'.
ENDIF.

"Send PDF Layout to Buyer


CALL FUNCTION 'ZMM_PO_PDF_EMAIL_BUYER' IN UPDATE TASK
EXPORTING
po_data = po_data.
ENDIF.
ENDIF.

ENDMETHOD. "IF_EX_ME_PROCESS_PO_CUST~POST

You might also like