AUTO PO CHANGE(ME22N) USING BAPI
*&---------------------------------------------------------------------*
*& Report ZMM_PO_CHANGES*&---------------------------------------------------------------------*
************************************************************************
* Program : ZMM_PO_CHANGES
* Author :
* Created on : 03.01.2023
* Requested By : Functional Consultant
* Transport-No : 1234567890
*----------------------------------------------------------------------*
* Description : Cutover Object
* Assumption :
* Called from :
* Called to : N/A
* Includes : N/A
* Logical DB : N/A
*----------------------------------------------------------------------*
REPORT zmm_po_changes.
INCLUDE zmm_po_changes_top.
INCLUDE zmm_po_changes_sel.
INCLUDE zmm_po_changes_f01.
START-OF-SELECTION.
***Get File Data
PERFORM get_file.
*** Procees the Data
PERFORM process_data.
***Call the BAPI PO Change
PERFORM bapi_po_change.
*** Display The Error/Success Message
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Include ZMM_PO_CHANGES_TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_final,
po_no(10) TYPE c,
item(5) TYPE c,
del_date(10) TYPE c,
ind_status TYPE c,
reason(4) TYPE c,
text(60) TYPE c,
req_by(12) TYPE c,
END OF ty_final.
TYPES: BEGIN OF ty_hdr,
ebeln TYPE ebeln, " PO Number
ebelp TYPE ebelp, " PO Item Number
eindt(10) TYPE c, "eindt, " Delivery Date
revok TYPE dcm_revok, " Status "version completed"
rscod TYPE rscod, " Reason for change
txz01 TYPE txz01_dcm, " Description of version
crnam TYPE dcm_afnam, " Person requesting change
END OF ty_hdr.
TYPES: BEGIN OF ty_alv,
ebeln TYPE ebeln,
type TYPE bapi_mtype,
message TYPE bapi_msg,
END OF ty_alv.
DATA: lt_final TYPE TABLE OF ty_final,
ls_final TYPE ty_final.
DATA: lt_hdr TYPE TABLE OF ty_hdr,
ls_hdr TYPE ty_hdr.
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
gs_alv TYPE ty_alv.
CONSTANTS: lc_e TYPE char1 VALUE 'E',
lc_s TYPE char1 VALUE 'S'.
*& Include ZMM_PO_CHANGES_TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_final,
po_no(10) TYPE c,
item(5) TYPE c,
del_date(10) TYPE c,
ind_status TYPE c,
reason(4) TYPE c,
text(60) TYPE c,
req_by(12) TYPE c,
END OF ty_final.
TYPES: BEGIN OF ty_hdr,
ebeln TYPE ebeln, " PO Number
ebelp TYPE ebelp, " PO Item Number
eindt(10) TYPE c, "eindt, " Delivery Date
revok TYPE dcm_revok, " Status "version completed"
rscod TYPE rscod, " Reason for change
txz01 TYPE txz01_dcm, " Description of version
crnam TYPE dcm_afnam, " Person requesting change
END OF ty_hdr.
TYPES: BEGIN OF ty_alv,
ebeln TYPE ebeln,
type TYPE bapi_mtype,
message TYPE bapi_msg,
END OF ty_alv.
DATA: lt_final TYPE TABLE OF ty_final,
ls_final TYPE ty_final.
DATA: lt_hdr TYPE TABLE OF ty_hdr,
ls_hdr TYPE ty_hdr.
DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
gs_alv TYPE ty_alv.
CONSTANTS: lc_e TYPE char1 VALUE 'E',
lc_s TYPE char1 VALUE 'S'.
*&---------------------------------------------------------------------*
*& Include ZMM_PO_CHANGES_SEL
*&---------------------------------------------------------------------*
* Selection Screen Design
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
PERFORM file_upload.
*& Include ZMM_PO_CHANGES_SEL
*&---------------------------------------------------------------------*
* Selection Screen Design
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
PERFORM file_upload.
*&---------------------------------------------------------------------*
*& Include ZMM_PO_CHANGES_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_file .
DATA: lt_raw TYPE truxs_t_text_data.
* Convert the XL file to Internal Table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = abap_true
i_tab_raw_data = lt_raw
i_filename = p_file
TABLES
i_tab_converted_data = lt_final
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
MESSAGE 'File Conversion Error' TYPE 'E' DISPLAY LIKE 'S'.
ENDCASE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM process_data .
LOOP AT lt_final INTO ls_final.
DATA(ls_final1) = ls_final.
ls_hdr-ebeln = ls_final1-po_no.
ls_hdr-ebelp = ls_final1-item.
ls_hdr-eindt = ls_final1-del_date.
ls_hdr-revok = ls_final1-ind_status.
ls_hdr-rscod = ls_final1-reason.
ls_hdr-txz01 = ls_final1-text.
ls_hdr-crnam = ls_final1-req_by.
APPEND ls_hdr TO lt_hdr.
CLEAR: ls_hdr,ls_final1,ls_final.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM bapi_po_change .
DATA: lv_po_no TYPE bapimepoheader-po_number.
DATA: ls_version TYPE bapimedcm.
* Internal Table Declaration
DATA:
lt_del TYPE TABLE OF bapimeposchedule,
lt_delx TYPE TABLE OF bapimeposchedulx,
lt_return TYPE TABLE OF bapiret2.
* Work Area Declaration
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
ls_del TYPE bapimeposchedule,
ls_delx TYPE bapimeposchedulx,
ls_return TYPE bapiret2.
* Fill the Internal table data to Bapi structure
SORT lt_hdr BY ebeln.
LOOP AT lt_hdr INTO ls_hdr.
DATA(ls_hdr1) = ls_hdr.
*** Header Data Fill
lv_po_no = ls_hdr1-ebeln.
ls_header-po_number = ls_hdr1-ebeln.
*** Set the Flag
ls_headerx-po_number = abap_true.
ls_version-completed = ls_hdr1-revok.
ls_version-reason = ls_hdr1-rscod.
ls_version-description = ls_hdr1-txz01.
ls_version-req_by = ls_hdr1-crnam.
*** Item Data Fill
ls_del-po_item = ls_hdr1-ebelp.
ls_del-delivery_date = ls_hdr1-eindt.
APPEND ls_del TO lt_del.
*** Set the Flag
ls_delx-po_item = ls_hdr1-ebelp.
ls_delx-po_itemx = abap_true.
ls_delx-delivery_date = abap_true.
APPEND ls_delx TO lt_delx.
*** Call the BAPI PO Change
AT END OF ebeln.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = lv_po_no
poheader = ls_header
poheaderx = ls_headerx
versions = ls_version
TABLES
return = lt_return
poschedule = lt_del
poschedulex = lt_delx.
READ TABLE lt_return INTO ls_return WITH KEY type = lc_e.
IF sy-subrc = 0.
LOOP AT lt_return INTO ls_return.
gs_alv-ebeln = lv_po_no.
gs_alv-type = ls_return-type.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_alv-ebeln = lv_po_no.
gs_alv-type = lc_s.
gs_alv-message = TEXT-002.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
CLEAR: ls_header,ls_version,ls_del,ls_headerx,ls_delx,ls_return,lv_po_no.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_data .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'EBELN'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Po Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'STATUS'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_layout.
ls_layout-colwidth_optimize = abap_true.
ls_layout-zebra = abap_true.
lv_program = sy-repid.
* Display The Final Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lv_program
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*& Include ZMM_PO_CHANGES_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_file .
DATA: lt_raw TYPE truxs_t_text_data.
* Convert the XL file to Internal Table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = abap_true
i_tab_raw_data = lt_raw
i_filename = p_file
TABLES
i_tab_converted_data = lt_final
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
MESSAGE 'File Conversion Error' TYPE 'E' DISPLAY LIKE 'S'.
ENDCASE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM process_data .
LOOP AT lt_final INTO ls_final.
DATA(ls_final1) = ls_final.
ls_hdr-ebeln = ls_final1-po_no.
ls_hdr-ebelp = ls_final1-item.
ls_hdr-eindt = ls_final1-del_date.
ls_hdr-revok = ls_final1-ind_status.
ls_hdr-rscod = ls_final1-reason.
ls_hdr-txz01 = ls_final1-text.
ls_hdr-crnam = ls_final1-req_by.
APPEND ls_hdr TO lt_hdr.
CLEAR: ls_hdr,ls_final1,ls_final.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bapi_po_change
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM bapi_po_change .
DATA: lv_po_no TYPE bapimepoheader-po_number.
DATA: ls_version TYPE bapimedcm.
* Internal Table Declaration
DATA:
lt_del TYPE TABLE OF bapimeposchedule,
lt_delx TYPE TABLE OF bapimeposchedulx,
lt_return TYPE TABLE OF bapiret2.
* Work Area Declaration
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
ls_del TYPE bapimeposchedule,
ls_delx TYPE bapimeposchedulx,
ls_return TYPE bapiret2.
* Fill the Internal table data to Bapi structure
SORT lt_hdr BY ebeln.
LOOP AT lt_hdr INTO ls_hdr.
DATA(ls_hdr1) = ls_hdr.
*** Header Data Fill
lv_po_no = ls_hdr1-ebeln.
ls_header-po_number = ls_hdr1-ebeln.
*** Set the Flag
ls_headerx-po_number = abap_true.
ls_version-completed = ls_hdr1-revok.
ls_version-reason = ls_hdr1-rscod.
ls_version-description = ls_hdr1-txz01.
ls_version-req_by = ls_hdr1-crnam.
*** Item Data Fill
ls_del-po_item = ls_hdr1-ebelp.
ls_del-delivery_date = ls_hdr1-eindt.
APPEND ls_del TO lt_del.
*** Set the Flag
ls_delx-po_item = ls_hdr1-ebelp.
ls_delx-po_itemx = abap_true.
ls_delx-delivery_date = abap_true.
APPEND ls_delx TO lt_delx.
*** Call the BAPI PO Change
AT END OF ebeln.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = lv_po_no
poheader = ls_header
poheaderx = ls_headerx
versions = ls_version
TABLES
return = lt_return
poschedule = lt_del
poschedulex = lt_delx.
READ TABLE lt_return INTO ls_return WITH KEY type = lc_e.
IF sy-subrc = 0.
LOOP AT lt_return INTO ls_return.
gs_alv-ebeln = lv_po_no.
gs_alv-type = ls_return-type.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_alv-ebeln = lv_po_no.
gs_alv-type = lc_s.
gs_alv-message = TEXT-002.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
CLEAR: ls_header,ls_version,ls_del,ls_headerx,ls_delx,ls_return,lv_po_no.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_data .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'EBELN'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Po Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'STATUS'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_layout.
ls_layout-colwidth_optimize = abap_true.
ls_layout-zebra = abap_true.
lv_program = sy-repid.
* Display The Final Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lv_program
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
Comments
Post a Comment