Unable to edit The PR While PR in Approval stage

                                                            First Refer - PR Workflow Approval

Step 1: Adding non editable logic to PR

            * If The PR is in L1 stage L1 Will edit values. Other users will not edit the PR and raise error.

                Error: "PR: 0010000656 is under approval, can't be edited."

            * If The PR is in L3 stage. That PR can be edit by L3 Approvers only else raise error. 

                Error: "PR: 0010000656 is under approval, can't be edited."

            * If the PR is Fully approved No one can edit the PR.

                Error: "PR: 0010000655 is already approved, can’t be edited."

Step 2: Implement the BADI - ME_PROCESS_REQ_CUST

            Implemented class - ZCL_IM_CB_IMPL_AB_PR_ITEM

Step 3: Implement the method "IF_EX_ME_PROCESS_REQ_CUST~OPEN".

Step 4: Write Code.

          METHOD if_ex_me_process_req_cust~open.


    DATAl_r_pr_header    TYPE mereq_header,
          e_t_approvers    TYPE ztt_approvers,
          o_ref            TYPE REF TO zcl_ab_wf_mm_pr_approval,
          l_t_container    TYPE TABLE OF swr_cont,
          l_t_ep_approvers TYPE tswhactor,
          lv_msg           TYPE string,
          l_count          TYPE char1.
    DATAl_t_return   TYPE ewa_bapireturn_tab,
          l_t_rel_code TYPE ztt_rel_code,
          l_t_l1_appr  TYPE tswhactor,
          l_t_l2_appr  TYPE tswhactor,
          l_t_l3_appr  TYPE tswhactor.

    IF im_trtyp 'V'.
      l_r_pr_header =  im_header->get_data).
      SELECT SINGLE banfnfrgkzernamafnam
             FROM eban
             INTO @DATA(l_r_eban)
             WHERE banfn @l_r_pr_header-banfn.
      IF l_r_eban-frgkz '2'.
        lv_msg TEXT-t01.
        REPLACE 'XX' IN lv_msg WITH l_r_pr_header-banfn.
        MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'E'.
        ch_valid ' '.
      ENDIF.
      SELECT top_wi_idcrea_tmp
                FROM sww_wi2obj
                INTO TABLE @DATA(l_t_wi_id)
                WHERE wi_rh_task 'WS90200012'
                  AND catid 'CL'
                  AND instid @l_r_pr_header-banfn
                  AND typeid 'ZCL_AB_WF_MM_PR_APPROVAL'.
      IF sy-subrc AND l_t_wi_id IS NOT INITIAL .
        SORT l_t_wi_id DESCENDING BY top_wi_id.
        READ TABLE l_t_wi_id INTO DATA(l_r_wi_idINDEX 1.
        SELECT SINGLE wi_stat
              FROM swwwihead
              INTO @DATA(l_f_wf_stat)
              WHERE wi_id @l_r_wi_id-top_wi_id.
        CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'
          EXPORTING
            workitem_id      l_r_wi_id-top_wi_id
            language         sy-langu
            user             sy-uname
          TABLES
            simple_container l_t_container.
        IF l_t_container IS NOT INITIAL.
          LOOP AT l_t_container INTO DATA(l_r_containerWHERE element 'E_T_REL_CODES'.
            IF l_f_wf_stat EQ 'CANCELLED'.
              DATA(l_f_rcode'L1'.
              EXIT.
            ELSEIF l_r_container-value+2(1NE 'X'.
              l_f_rcode l_r_container-value+0(2).
              EXIT.
            ENDIF.
          ENDLOOP.
          IF l_f_rcode EQ 'L3'.
            CREATE OBJECT o_ref
              EXPORTING
                i_f_banfn l_r_pr_header-banfn.
            CALL METHOD o_ref->get_rel_codes
              EXPORTING
                i_f_banfn    l_r_pr_header-banfn       " Purchase Requisition Number
              IMPORTING
                e_t_return   l_t_return         " Table Type for BAPIRETURN
                e_t_rel_code l_t_rel_code       " PR Workflow Release Code
                e_t_l1_appr  l_t_l1_appr        " PR Workflow Approvers
                e_t_l2_appr  l_t_l2_appr        " PR Workflow Approvers
                e_t_l3_appr  l_t_l3_appr        " PR Workflow Approvers
                e_count      L_count.           " Single-Character Flag
            READ TABLE l_t_l3_appr INTO DATA(l_r_l3_apprWITH KEY objid sy-uname.
            IF sy-subrc EQ 0.
              DATA(lv_flagabap_true.
            ENDIF.
          ELSEIF l_f_rcode EQ 'L1' AND l_r_eban-ernam EQ sy-uname.
            lv_flag abap_true.
          ENDIF.
          IF lv_flag IS INITIAL.
            lv_msg TEXT-t02.
            REPLACE 'XX' IN lv_msg WITH l_r_pr_header-banfn.
            MESSAGE lv_msg TYPE 'I' DISPLAY LIKE 'E'.
            ch_valid ' '.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDMETHOD.
-------------------------Testing the PR-------------------------------------------
Step 1: Create PR.
Step 2: If you are PR initiator you can edit L1 stage PR otherwise not editable.
Step 3:  If the PR is in L3 Stage only L3 approvers can edit else throw error (I am not L3 Approver).


Step 4: If PR is fully Approved. No one can edit PR.


********************************Thank You*****************************
            

Comments

Popular posts from this blog

New syntax for append- VALUE (new syntax 7.4+) in ABAP

Read statement new syntax in ABAP. (7.4+).

Concatenation new syntax( 7.4+ ).