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.
DATA: l_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.
DATA: l_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 banfn, frgkz, ernam, afnam
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_id, crea_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 = 0 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_id) INDEX 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_container) WHERE element = 'E_T_REL_CODES'.
IF l_f_wf_stat EQ 'CANCELLED'.
DATA(l_f_rcode) = 'L1'.
EXIT.
ELSEIF l_r_container-value+2(1) NE '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_appr) WITH KEY objid = sy-uname.
IF sy-subrc EQ 0.
DATA(lv_flag) = abap_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.
Comments
Post a Comment