PO rejection notification & rejection comments for Fiori

 Business Purpose : 

1. Rejection Comments pop-Up in Po screen while rejecting the PO
2. Rejection Comments need to save in PO header text rejection comments
3. Include rejection comments in the email Notification.
4. include rejection comments for Fiori Side (Work Flow)
5.change the sender ID for PO rejection notification.

Logic For First Point: 
step1: Create a Badi Implementation : ME_PROCESS_PO_CUST










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.
    APPENDlv_body TO text.
    CLEAR:lv_body.

**Space
    CONCATENATE ' ' ' ' INTO lv_body SEPARATED BY space.
    APPENDlv_body TO text.
    CLEAR:lv_body.

    CLEARlv_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.
        APPENDlv_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.


      CLEARlv_sender.
      lv_sender 'noreply@abc.in'.

      "" Sender
      IF NOT lv_sender IS INITIAL.
        DATA(lo_sendercl_cam_address_bcs=>create_internet_addresslv_sender ).
      ENDIF.

      TRY.
          lr_send_request->set_senderlo_sender ).
        CATCH cx_send_req_bcs.
      ENDTRY.


      "Step 5: Set Document to be sent
      TRY.
          lr_send_request->set_documenti_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.

      DATAlv_email TYPE ad_smtpadr.
      CLEAR:lv_email.
      lv_email lt_reclist[ ]-receiver.

      IF lv_email IS NOT INITIAL.
        TRY.
            lr_recipient cl_cam_address_bcs=>create_internet_addressi_address_string lv_email ).
          CATCH cx_address_bcs .
        ENDTRY.
        lr_send_request->add_recipienti_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.

I wrote the logic in the method: 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_textFOR 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

Popular posts from this blog

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)