0% found this document useful (0 votes)
94 views12 pages

FUNCTION ZBPM Update Generic Form Data.

This function updates the status of generic forms in different modules like overtime, allowances, GGP, etc. based on the input status. It first checks the form type and then updates the relevant table by committing the changes. It also sends process termination notifications for some status values.

Uploaded by

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

FUNCTION ZBPM Update Generic Form Data.

This function updates the status of generic forms in different modules like overtime, allowances, GGP, etc. based on the input status. It first checks the form type and then updates the relevant table by committing the changes. It also sends process termination notifications for some status values.

Uploaded by

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

FUNCTION zbpm_update_generic_form_data.

*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IV_ID) TYPE CHAR20
*" VALUE(IV_DOCUMENT_STATUS) TYPE CHAR20 OPTIONAL
*" VALUE(IV_PROCESS_INSTANCE_ID) TYPE CHAR50 OPTIONAL
*" VALUE(IV_FORM_TYPE) TYPE CHAR10
*" VALUE(IV_MATRIX_APP) TYPE CHAR255 OPTIONAL
*" EXPORTING
*" VALUE(EV_STATUS) TYPE CHAR1
*"----------------------------------------------------------------------
DATA: lv_status TYPE char100,
ls_ovet_req TYPE zbpm_ovt_reqdat,
ls_allowance_req TYPE zbpm_allo_req,
ls_ggp_header TYPE zbpm_ggp_header,
ls_incident TYPE zbpm_incident,
lv_doc_status TYPE char20,
lv_lifnr TYPE lifnr,
lt_ven_err TYPE bapiret2_t,
lt_ven_log TYPE STANDARD TABLE OF zbpm_vend_err,
lv_index TYPE i,
lt_pr_vendor TYPE zbpm_tt_vendor_pr,
lv_banfn TYPE banfn,
lv_prupstatus TYPE flag,
lv_err_msg TYPE char255,
lv_ven_doc_status TYPE char20,
lt_ref TYPE STANDARD TABLE OF string,
lv_doc_id TYPE zdtmg_docid,
lv_lifn_temp TYPE lifnr,
lv_entity_type TYPE zbpm_plant-entity_type,
lv_return TYPE flag.

IF iv_form_type IS NOT INITIAL.


TRANSLATE iv_form_type TO UPPER CASE.
ENDIF.

IF iv_form_type EQ 'OVERTIME'.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Approved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'OT' " Document Type
* iv_doc_number = ls_allowance_req-docid
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
UPDATE zbpm_ovt_req SET document_status = iv_document_status
process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

ls_ovet_req-id = iv_id.
ls_ovet_req-transactionid = iv_id.
ls_ovet_req-document_status = iv_document_status.
ls_ovet_req-process_instance_id = iv_process_instance_id.
ls_ovet_req-matrix_approvers = iv_matrix_app.
MODIFY zbpm_ovt_reqdat FROM ls_ovet_req.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.
ELSEIF iv_form_type EQ 'ALLOWANCE'.

SELECT SINGLE *
FROM zbpm_allo_req INTO ls_allowance_req
WHERE docid EQ iv_id.
IF sy-subrc EQ 0.

SELECT SINGLE processflow INTO @DATA(lv_process_flow)


FROM zbpm_allo_pro_ty
WHERE type EQ @ls_allowance_req-type.

SELECT SINGLE b~im_manager INTO @DATA(lv_imm_id)


FROM zbpm_allo_req AS a
INNER JOIN zbpm_user_detail AS b
ON a~requested_by EQ b~user_name
WHERE docid EQ @iv_id.

IF lv_process_flow IS INITIAL OR lv_imm_id IS INITIAL.


ev_status = abap_true.
ENDIF.
ENDIF.
** Start of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Approved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'AL' " Document Type
* iv_doc_number = ls_allowance_req-docid
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_allo_req SET document_status = iv_document_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

* ls_ovet_req-id = iv_id.
* ls_ovet_req-transactionid = iv_id.
* ls_ovet_req-document_status = iv_document_status.
* ls_ovet_req-process_instance_id = iv_process_instance_id.
* ls_ovet_req-matrix_approvers = iv_matrix_app.
* modify zbpm_ovt_reqdat from ls_ovet_req.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'GGP'.

UPDATE zbpm_ggp_header SET document_status = iv_document_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'MRF'.

lv_doc_status = iv_document_status.
IF iv_document_status EQ 'Cancelled'.

SELECT SINGLE gi_done INTO @DATA(lv_gi)


FROM zbpm_idmmat_itm
WHERE id EQ @iv_id.

IF lv_gi EQ abap_true.
lv_doc_status = 'Partially Delivered'.
ENDIF.
ENDIF.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Delivere
d' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'MR' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_idmmat SET document_status = lv_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'IR'.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Resolved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'IR' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_incident SET document_status = iv_document_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ELSE.
IF iv_document_status = 'Need More Info'.
"Send notification email to Department PICs
CLEAR: ls_incident.
ls_incident-id = iv_id.
ls_incident-process_instance_id = iv_process_instance_id.

CALL FUNCTION 'ZBPM_NOTIFY_INCIDENT'


EXPORTING
iv_docid = ls_incident-id
iv_processid = ls_incident-process_instance_id.
ENDIF.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'IDMMRP'. "IDM MRP

* If status is Approved, try to post ERP changes first


IF iv_document_status = 'Approved'.
CALL FUNCTION 'ZBPM_POST_IDMMRP_APPROVED'
EXPORTING
iv_id = iv_id
iv_werks = '3300'
IMPORTING
ev_status = ev_status.

IF ev_status = abap_true.
lv_doc_status = 'Pending Update'.
ev_status = 'F'. "Failed to update all materials
ENDIF.
ENDIF.

IF lv_doc_status IS INITIAL.
lv_doc_status = iv_document_status.
ENDIF.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Approved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'IM' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_idmmrp_hdr SET document_status = lv_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'VENPR' OR iv_form_type EQ 'VENER'.


lv_ven_doc_status = iv_document_status.

IF iv_document_status EQ 'Verified'.
SELECT SINGLE *
FROM zbpm_vendor_req INTO @DATA(ls_vendor)
WHERE docid EQ @iv_id.

IF sy-subrc EQ 0.

"Addition by Leo, FRDK903661 BPMCI_1891


"Add logic to stop process if company code is non-SAP
CLEAR lv_entity_type.
IF iv_form_type = 'VENPR' AND iv_document_status = 'Verified'.
SELECT SINGLE entity_type
INTO lv_entity_type
FROM zbpm_plant
WHERE werks = ls_vendor-company.
ENDIF.
"End of addition by Leo FRDK903661

IF ls_vendor-existing EQ abap_false.
lv_lifnr = ls_vendor-lifnr.
ELSE.
lv_lifnr = ls_vendor-ex_lifnr.
ENDIF.

IF lv_lifnr IS INITIAL.
ev_status = abap_true.

ELSE.

SELECT SINGLE *
FROM zbpm_vend_err
INTO @DATA(ls_error)
WHERE docid EQ @iv_id AND
message NE @space.
IF sy-subrc NE 0.

IF iv_form_type EQ 'VENPR'.

SELECT *
FROM zbpm_pur_req_itm
INTO TABLE @DATA(lt_pur_itm)
WHERE banfn EQ @ls_vendor-refid AND
lifnr EQ @iv_id.

lv_banfn = ls_vendor-refid.

LOOP AT lt_pur_itm ASSIGNING FIELD-SYMBOL(<fs_pur_itm>).


APPEND INITIAL LINE TO lt_pr_vendor ASSIGNING FIELD-
SYMBOL(<fs_pr_vendo>).
<fs_pr_vendo>-bnfpo = <fs_pur_itm>-bnfpo.
<fs_pr_vendo>-lifnr = lv_lifnr.
ENDLOOP.

IF lt_pr_vendor IS NOT INITIAL.

CALL FUNCTION 'ZBPM_UPDATE_PR_VENDOR' DESTINATION 'Z_PI_COM


MON_CONNECTION_PRPO'
EXPORTING
iv_banfn = lv_banfn
it_vendor = lt_pr_vendor
IMPORTING
ev_status = lv_prupstatus
es_err_msg = lv_err_msg.

"Addition by Leo, FRDK903663 BPMCI_1891


IF lv_entity_type = 'NONSAP'.
"NON SAP will not have PR in ERP, Mimic update in ERP is
success.
lv_prupstatus = 'S'.
ENDIF.
"End of addition by Leo FRDK903663

IF lv_prupstatus EQ 'S'.
lv_prupstatus = abap_true.
ELSE.
UPDATE zbpm_pur_req_itm SET bapierr = lv_err_msg
WHERE banfn EQ lv_banfn AND
lifnr EQ iv_id.
ENDIF.

ELSE.
lv_prupstatus = abap_true.
ENDIF.

IF lv_prupstatus EQ abap_true.

IF ls_vendor-existing EQ abap_true.

UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr


name1 = ls_vendor-ex_name1
bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ iv_id.
ELSE.

UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr


bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ iv_id.
ENDIF.

COMMIT WORK AND WAIT.

CALL FUNCTION 'ZFM_BPM_RESUME_PR_PROCESS' IN BACKGROUND TAS


K DESTINATION 'Z_PI_COMMON_CONNECTION_PRPO'
EXPORTING
iv_docid = ls_vendor-refid
iv_vender_id = lv_lifnr.

COMMIT WORK AND WAIT.

ELSE.
ev_status = abap_true.
ENDIF.

ELSEIF iv_form_type EQ 'VENER'.

* CALL FUNCTION 'ZFM_BPM_RESUME_ER_PROCESS' IN BACKGROUND TASK


DESTINATION 'Z_PI_COMMON_CONNECTION_PRPO'
* EXPORTING
* iv_docid = ls_vendor-refid
* iv_vender_id = lv_lifnr.
*
* COMMIT WORK AND WAIT.
ENDIF.

IF ev_status IS INITIAL AND ls_vendor-multi_ref IS NOT INITIAL.


SPLIT ls_vendor-multi_ref AT ';' INTO TABLE lt_ref.
IF sy-subrc EQ 0.
LOOP AT lt_ref ASSIGNING FIELD-SYMBOL(<fs_ref>).
CLEAR: lv_banfn,lt_pr_vendor,lv_prupstatus,lv_err_msg,lv_
doc_id,lv_lifn_temp.

SPLIT <fs_ref> AT ':' INTO lv_banfn lv_lifn_temp.

IF lv_lifn_temp IS INITIAL.
SELECT SINGLE *
FROM zbpm_vendor_req INTO @DATA(ls_vendor_temp)
WHERE refid EQ @lv_banfn.

IF sy-subrc EQ 0.
lv_lifn_temp = ls_vendor_temp-docid.
ENDIF.
ENDIF.

SELECT *
FROM zbpm_pur_req_itm
INTO TABLE @DATA(lt_pur_itm_ref)
WHERE banfn EQ @lv_banfn AND
lifnr EQ @lv_lifn_temp.

* lv_banfn = <fs_ref>.
IF sy-subrc EQ 0.
LOOP AT lt_pur_itm_ref ASSIGNING FIELD-
SYMBOL(<fs_pur_itm_ref>).
APPEND INITIAL LINE TO lt_pr_vendor ASSIGNING FIELD-
SYMBOL(<fs_pr_vendo_ref>).
<fs_pr_vendo_ref>-bnfpo = <fs_pur_itm_ref>-bnfpo.
<fs_pr_vendo_ref>-lifnr = lv_lifnr.
ENDLOOP.
ENDIF.

IF lt_pr_vendor IS NOT INITIAL.

CALL FUNCTION 'ZBPM_UPDATE_PR_VENDOR' DESTINATION 'Z_PI


_COMMON_CONNECTION_PRPO'
EXPORTING
iv_banfn = lv_banfn
it_vendor = lt_pr_vendor
IMPORTING
ev_status = lv_prupstatus
es_err_msg = lv_err_msg.

"Addition by Leo, FRDK903663 BPMCI_1891


IF lv_entity_type = 'NONSAP'.
"NON SAP will not have PR in ERP, Mimic update in ERP
is success.
lv_prupstatus = 'S'.
ENDIF.
"End of addition by Leo FRDK903663

IF lv_prupstatus EQ 'S'.
lv_prupstatus = abap_true.
ELSE.
UPDATE zbpm_pur_req_itm SET bapierr = lv_err_msg
WHERE banfn EQ lv_banfn AND
lifnr EQ lv_lifn_temp.
ENDIF.

ELSE.
lv_prupstatus = abap_true.
ENDIF.

IF lv_prupstatus EQ abap_true.

IF ls_vendor_temp-existing EQ abap_true.
UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr
name1 = ls_vendor_temp-
ex_name1
bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ lv_lifn_temp.
ELSE.
UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr
bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ lv_lifn_temp.
ENDIF.

COMMIT WORK AND WAIT.

lv_doc_id = lv_banfn.
CALL FUNCTION 'ZFM_BPM_RESUME_PR_PROCESS' IN BACKGROUND
TASK DESTINATION 'Z_PI_COMMON_CONNECTION_PRPO'
EXPORTING
iv_docid = lv_doc_id
iv_vender_id = lv_lifnr.

COMMIT WORK AND WAIT.

ELSE.
ev_status = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ELSE.
ev_status = 'E'.
lv_ven_doc_status = 'Pending Verification'.
ENDIF.
ENDIF.
ELSE.
ev_status = abap_true.
ENDIF.
ENDIF.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF lv_ven_doc_status EQ 'Cancelled' OR iv_document_status EQ 'Rejected
' OR iv_document_status EQ 'Verified'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'VN' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_vendor_req SET document_status = lv_ven_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
IF ev_status IS INITIAL.
ev_status = abap_true.
ENDIF.
ENDIF.
ENDIF.

"Addition by Leo, Supplier phase 2 ==> handle VENUI *******************


***************************************************************************
********
ELSEIF iv_form_type EQ 'VENUI' OR iv_form_type EQ 'VENCC'.

lv_ven_doc_status = iv_document_status.

IF iv_document_status EQ 'Verified'.
SELECT SINGLE *
FROM zbpm_vendor_req INTO ls_vendor
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.

IF ls_vendor-existing EQ abap_false.
lv_lifnr = ls_vendor-lifnr.
ELSE.
lv_lifnr = ls_vendor-ex_lifnr.
ENDIF.

IF lv_lifnr IS INITIAL.
ev_status = abap_true.
ELSE.

SELECT SINGLE *
FROM zbpm_vend_err
INTO ls_error
WHERE docid EQ iv_id AND
message NE space.

IF sy-subrc NE 0.
CLEAR ev_status.
ELSE.
ev_status = 'E'.
lv_ven_doc_status = 'Pending Verification'.
ENDIF.
ENDIF.
ELSE.
ev_status = abap_true.
ENDIF.
ENDIF.

UPDATE zbpm_vendor_req SET document_status = lv_ven_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
IF ev_status IS INITIAL.
ev_status = abap_true.
ENDIF.
ENDIF.
ENDIF.
"End of addition by Leo <TRLEO>
ENDIF.

CALL FUNCTION 'ZBPM_GET_TASK_DETAILS_UPDATE'


EXPORTING
iv_process_id = iv_process_instance_id
IMPORTING
ev_status = lv_status.

ENDFUNCTION.

You might also like