PO rejection notification & rejection comments for Fiori
Business Purpose :
1. Rejection Comments pop-Up in Po screen while rejecting the PO2. Rejection Comments need to save in PO header text rejection comments
write the below code in check method: IF_EX_ME_PROCESS_PO_CUST~CHECK
When I click the Rejection button, a popup appears.
Step2: The functional team is creating a header text, and we will store the content within that header text.
step3 & Step5:
IF_EX_ME_PROCESS_PO_CUST~POST : Write the logic for vendor email notification.
IF ls_mepoheader-procstat = '08'.
DATA : lr_send_request TYPE REF TO cl_bcs,
lr_document TYPE REF TO cl_document_bcs,
lr_recipient TYPE REF TO if_recipient_bcs,
lv_subject TYPE so_obj_des, " For Mail Subject from Method
lv_body TYPE soli. " For Mail Body (Content)
DATA : text TYPE bcsy_text,
sent_to_all TYPE os_boolean.
DATA:lv_sender TYPE ad_smtpadr.
DATA : lv_persnumber TYPE ad_persnum,
ls_adrp TYPE adrp.
DATA lt_rpbenerr TYPE TABLE OF rpbenerr.
DATA:lt_line TYPE TABLE OF tline.
DATA:lv_name TYPE thead-tdname.
" Step 1: Create instance of CL_BCS class
TRY.
lr_send_request = cl_bcs=>create_persistent( ).
CATCH cx_send_req_bcs .
ENDTRY.
" Step 2 : Mail Subject
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_mepoheader-ebeln
IMPORTING
output = lv_ebeln.
doc_chng-obj_descr = |{ sy-sysid }:|.
lv_subject = |{ doc_chng-obj_descr }The Purchase Order { lv_ebeln } Rejected|.
"Step 3: Add Mail Content (Body)
SELECT SINGLE persnumber
FROM usr21
INTO lv_persnumber
WHERE bname = sy-uname.
SELECT SINGLE *
FROM adrp
INTO ls_adrp
WHERE persnumber = lv_persnumber.
CONCATENATE 'The Purchase Order'
lv_ebeln 'has been rejected by'
ls_adrp-name_first
ls_adrp-name_last
'& awaiting your action.'
INTO lv_body SEPARATED BY space.
APPEND: lv_body TO text.
CLEAR:lv_body.
**Space
CONCATENATE ' ' ' ' INTO lv_body SEPARATED BY space.
APPEND: lv_body TO text.
CLEAR:lv_body.
CLEAR: lv_name.
lv_name = ls_mepoheader-ebeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = 'F25'
language = sy-langu
name = lv_name
object = 'EKKO'
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
" Implement suitable error handling here
ENDIF.
IF lt_line IS NOT INITIAL.
LOOP AT lt_line INTO DATA(ls_line).
CONCATENATE 'Rejection Comments :' ls_line-tdline INTO lv_body SEPARATED BY space.
APPEND: lv_body TO text.
CLEAR:lv_body.
ENDLOOP.
"Step 4: Add the Subject and Body to a Mail (Document)
TRY.
lr_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_subject = lv_subject
i_text = text
).
CATCH cx_document_bcs .
ENDTRY.
CLEAR: lv_sender.
lv_sender = 'noreply@abc.in'.
"" Sender
IF NOT lv_sender IS INITIAL.
DATA(lo_sender) = cl_cam_address_bcs=>create_internet_address( lv_sender ).
ENDIF.
TRY.
lr_send_request->set_sender( lo_sender ).
CATCH cx_send_req_bcs.
ENDTRY.
"Step 5: Set Document to be sent
TRY.
lr_send_request->set_document( i_document = lr_document ).
CATCH cx_send_req_bcs .
ENDTRY.
" Step 6 : Add Recipent to whom Mail has to be sent
CLEAR lt_reclist.
LOOP AT lt_usernam INTO ls_usernam.
*** target recipent(s)
CLEAR ls_reclist.
CALL FUNCTION 'HR_FBN_GET_USER_EMAIL_ADDRESS'
EXPORTING
user_id = ls_usernam
reaction = sy-msgty
IMPORTING
email_address = ls_reclist-receiver
* SUBRC =
TABLES
error_table = lt_rpbenerr.
ls_reclist-rec_type = 'U'.
APPEND ls_reclist TO lt_reclist.
ENDLOOP.
IF ls_mepoheader-bukrs EQ '1100' .
*** Set Sender
lv_uname = sy-uname.
sy-uname = 'WF-BATCH'.
ENDIF.
DATA: lv_email TYPE ad_smtpadr.
CLEAR:lv_email.
lv_email = lt_reclist[ 1 ]-receiver.
IF lv_email IS NOT INITIAL.
TRY.
lr_recipient = cl_cam_address_bcs=>create_internet_address( i_address_string = lv_email ).
CATCH cx_address_bcs .
ENDTRY.
lr_send_request->add_recipient( i_recipient = lr_recipient ).
ENDIF.
" Step 7 : Send the Document
sent_to_all = lr_send_request->send(
i_with_error_screen = ' ' ).
COMMIT WORK.
endif.
Step:4 : include rejection comments for Fiori Side (Work Flow)
Using the below badi: /IWWRK/BADI_WF_BEFORE_UPD_IB
When I reject the PO on the Fiori side, it triggers the above BADI, so I filtered it using the workflow ID.
before_update
METHOD /iwwrk/if_wf_wi_before_upd_ib~before_update.
DATA:
ls_object TYPE swr_obj_2,
lv_retcode TYPE sy-subrc,
lt_container TYPE TABLE OF swr_cont,
lv_po_number TYPE ebeln,
lv_subject TYPE string,
lv_sender_email TYPE ad_smtpadr,
lt_message_body TYPE soli_tab,
lv_text TYPE char255.
FIELD-SYMBOLS: <fs_container> TYPE swr_cont.
"Access the workflow data
CALL FUNCTION 'SAP_WAPI_GET_OBJECTS'
EXPORTING
workitem_id = is_wi_details-wi_id
IMPORTING
leading_object_2 = ls_object.
"Read the workflow's container data
CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'
EXPORTING
workitem_id = is_wi_details-wi_id
IMPORTING
return_code = lv_retcode
TABLES
simple_container = lt_container.
SET UPDATE TASK LOCAL.
" now we react on the decision the user has taken in the MyInbox
"0001 should be approve, 0002 reject
CASE iv_decision_key.
WHEN 0001. "Approved
WHEN 0002. "Rejected
DATA(lt_lines) = VALUE mmpur_t_text( FOR ls_notes IN it_wf_container_tab WHERE ( element = 'ACTION_COMMENTS' ) ( tdline = ls_notes-value ) ).
lv_po_number = ls_object-instid(10).
IF NOT lv_po_number IS INITIAL.
SELECT SINGLE ebeln,
ernam
FROM ekko
INTO @DATA(ls_ekko)
WHERE ebeln = @lv_po_number.
IF sy-subrc = 0.
"Fetch PR Initiator Email ID
SELECT SINGLE *
FROM p_user002
INTO @DATA(ls_puser002)
WHERE bname = @ls_ekko-ernam.
"Fetch Sender ID
SELECT SINGLE low
FROM tvarvc
INTO lv_sender_email
WHERE name = 'MODON_SEDER_EMAIL_ID'
AND type = 'P'.
lv_po_number = |{ lv_po_number ALPHA = OUT }|.
lv_subject = |The Purchase Order { lv_po_number } Rejected|.
SELECT SINGLE *
FROM p_user002
INTO @DATA(ls_appr)
WHERE bname = @sy-uname.
APPEND 'Hi,' TO lt_message_body.
APPEND INITIAL LINE TO lt_message_body.
APPEND |'The Purchase Order' { lv_po_number } has been rejected by { ls_appr-name_text } with below comments & awaiting your action.| TO lt_message_body.
APPEND INITIAL LINE TO lt_message_body.
APPEND 'Approver Comments:' TO lt_message_body.
LOOP AT lt_lines INTO DATA(ls_lines).
IF sy-subrc = 1.
CONCATENATE 'Approver Comments:' ls_lines-tdline INTO lv_text.
APPEND lv_text TO lt_message_body.
ELSE.
APPEND ls_lines-tdline TO lt_message_body.
ENDIF.
ENDLOOP.
CALL METHOD zcl_send_sms_email_attach=>send_email_attchmnt
EXPORTING
i_subject = CONV #( lv_subject ) " Short description of contents
t_message_body = lt_message_body " Text Table
i_recipient = ls_puser002-smtp_addr " E-Mail Address
i_sender = lv_sender_email " E-Mail Address
RECEIVING
r_sent_to_all = DATA(lv_sent_all). " Boolean
ENDIF.
ENDIF.
**** CALL FUNCTION 'CREATE_TEXT'
**** EXPORTING
**** fid = 'F25' "Reason for Rejection
**** flanguage = sy-langu
**** fname = lv_name
**** fobject = 'EKKO'
**** TABLES
**** flines = lt_lines
**** EXCEPTIONS
**** no_init = 1
**** no_save = 2
**** OTHERS = 3.
**** IF sy-subrc <> 0.
**** " Implement suitable error handling here
**** ENDIF.
ENDCASE.
ENDMETHOD.
Comments
Post a Comment