This program is to upload equipment master data from a tab delimited file using BAPI 'BAPI_EQUI_CREATE'. The first line of input file will have the header description of data-fields and hence the first line on the file will will not be processed. Further, In case of error the program also creates an error data file containing all the error records. This file will be created in the same input directory but name of the file will be .err<.txt>. At the end of the program-run a report containing record number, equipment number ( if there ), status and message will be displayed. This report will have the information for error as well as successful records.
REPORT Z_EQUIPMENT_MASTER_UPLOAD LINE-SIZE 200.
*----------------------------------------------------------------------*
* Written By: Ram Manohar Tiwari
*----------------------------------------------------------------------*
********************************************************************
* This program is used to upload equipment master data from a tab
* delimited file.
*
* The first line of input file will have the header description of
* data-fields and hence the fiirst line on the file will will not
* be processed.
*
* Further all the fields ( or at least the numeric fields like 0010 )
* should be specified as "text" while formatting the data in Excel file
* or else it will be uploaded as 10 and hence SAP might reject these
* records.
* Further, In case of error the progran also creates an error datafile
* containing all the error records. This file will be created in the
* same input directory but name of the file will be
*.err<.txt>.
* At the end of the program-run a report containing record number,
* equipment number ( if there ), status and message will be displayed.
* This report will have the information for error as well as successful
* records.
********************************************************************
*-----------------------------------------------------------------------
* SELECTION SCREEN
*-----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_INFILE LIKE rlgrap-filename obligatory.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
*-----------------------------------------------------------------------
data : gv_file_name LIKE rlgrap-filename.
DATA: BEGIN OF gt_upload OCCURS 0,
rec(3000) TYPE c,
END OF gt_upload.
DATA: BEGIN OF gt_header_fields OCCURS 0,
rec(3000) TYPE c,
END OF gt_header_fields.
data: Begin of gt_equipment_data occurs 0,
EQUI_NUMBER TYPE BAPI_ITOB_PARMS-EQUIPMENT,
VALID_DATE TYPE BAPI_ITOB_PARMS-INST_DATE,
FUNCLOC TYPE BAPI_ITOB_EQ_INSTALL-FUNCLOC,
SUPEQUI TYPE BAPI_ITOB_EQ_INSTALL-SUPEQUI,
MATERIAL TYPE BAPI_ITOB_EQ_ONLY-MATERIAL,
SERIALNO TYPE BAPI_ITOB_EQ_ONLY-SERIALNO,
EQUICATGRY TYPE BAPI_ITOB_EQ_ONLY-EQUICATGRY,
BATCH TYPE BAPI_ITOB_EQ_ONLY-BATCH,
READ_SUPEQ TYPE BAPI_ITOB_EQ_ONLY-READ_SUPEQ,
READ_FLOC TYPE BAPI_ITOB_EQ_ONLY-READ_FLOC,
OBJECTTYPE TYPE BAPI_ITOB-OBJECTTYPE,
OBJ_SIZE TYPE BAPI_ITOB-OBJ_SIZE,
OBJ_WEIGHT(16) TYPE C, "BAPI_ITOB-OBJ_WEIGHT,
UNIT_OF_WT TYPE BAPI_ITOB-UNIT_OF_WT,
MANFACTURE TYPE BAPI_ITOB-MANFACTURE,
MANCOUNTRY TYPE BAPI_ITOB-MANCOUNTRY,
COUNTR_ISO TYPE BAPI_ITOB-COUNTR_ISO,
MANSERNO TYPE BAPI_ITOB-MANSERNO,
MANMODEL TYPE BAPI_ITOB-MANMODEL,
CONSTYEAR TYPE BAPI_ITOB-CONSTYEAR,
CONSTMONTH TYPE BAPI_ITOB-CONSTMONTH,
START_FROM TYPE BAPI_ITOB-START_FROM,
PLANPLANT TYPE BAPI_ITOB-PLANPLANT,
MANPARNO TYPE BAPI_ITOB-MANPARNO,
PLANGROUP TYPE BAPI_ITOB-PLANGROUP,
CATPROFILE TYPE BAPI_ITOB-CATPROFILE,
WCTR_PLANT TYPE BAPI_ITOB-MAINTPLANT,
WORK_CTR(8) TYPE C, "BAPI_ITOB-WORK_CTR,
DESCRIPT TYPE BAPI_ITOB-DESCRIPT,
ABCINDIC TYPE BAPI_ITOB-ABCINDIC,
SORTFIELD TYPE BAPI_ITOB-SORTFIELD,
MAINTPLANT TYPE BAPI_ITOB-MAINTPLANT,
MAINTLOC TYPE BAPI_ITOB-MAINTLOC,
PP_WKCTR(8) TYPE C, "BAPI_ITOB-PP_WKCTR,
COSTCENTER TYPE BAPI_ITOB-COSTCENTER,
COMP_CODE TYPE BAPI_ITOB-COMP_CODE,
LONG_TEXT(2500) TYPE C,
end of gt_equipment_data.
data: Begin of gt_equipment_error_data occurs 0,
EQUI_NUMBER TYPE BAPI_ITOB_PARMS-EQUIPMENT,
VALID_DATE TYPE BAPI_ITOB_PARMS-INST_DATE,
FUNCLOC TYPE BAPI_ITOB_EQ_INSTALL-FUNCLOC,
SUPEQUI TYPE BAPI_ITOB_EQ_INSTALL-SUPEQUI,
MATERIAL TYPE BAPI_ITOB_EQ_ONLY-MATERIAL,
SERIALNO TYPE BAPI_ITOB_EQ_ONLY-SERIALNO,
EQUICATGRY TYPE BAPI_ITOB_EQ_ONLY-EQUICATGRY,
BATCH TYPE BAPI_ITOB_EQ_ONLY-BATCH,
READ_SUPEQ TYPE BAPI_ITOB_EQ_ONLY-READ_SUPEQ,
READ_FLOC TYPE BAPI_ITOB_EQ_ONLY-READ_FLOC,
OBJECTTYPE TYPE BAPI_ITOB-OBJECTTYPE,
OBJ_SIZE TYPE BAPI_ITOB-OBJ_SIZE,
OBJ_WEIGHT(16) TYPE C, "BAPI_ITOB-OBJ_WEIGHT,
UNIT_OF_WT TYPE BAPI_ITOB-UNIT_OF_WT,
MANFACTURE TYPE BAPI_ITOB-MANFACTURE,
MANCOUNTRY TYPE BAPI_ITOB-MANCOUNTRY,
COUNTR_ISO TYPE BAPI_ITOB-COUNTR_ISO,
MANSERNO TYPE BAPI_ITOB-MANSERNO,
MANMODEL TYPE BAPI_ITOB-MANMODEL,
CONSTYEAR TYPE BAPI_ITOB-CONSTYEAR,
CONSTMONTH TYPE BAPI_ITOB-CONSTMONTH,
START_FROM TYPE BAPI_ITOB-START_FROM,
PLANPLANT TYPE BAPI_ITOB-PLANPLANT,
MANPARNO TYPE BAPI_ITOB-MANPARNO,
PLANGROUP TYPE BAPI_ITOB-PLANGROUP,
CATPROFILE TYPE BAPI_ITOB-CATPROFILE,
WCTR_PLANT TYPE BAPI_ITOB-MAINTPLANT,
WORK_CTR(8) TYPE C, "BAPI_ITOB-WORK_CTR,
DESCRIPT TYPE BAPI_ITOB-DESCRIPT,
ABCINDIC TYPE BAPI_ITOB-ABCINDIC,
SORTFIELD TYPE BAPI_ITOB-SORTFIELD,
MAINTPLANT TYPE BAPI_ITOB-MAINTPLANT,
MAINTLOC TYPE BAPI_ITOB-MAINTLOC,
PP_WKCTR(8) TYPE C, "BAPI_ITOB-PP_WKCTR,
COSTCENTER TYPE BAPI_ITOB-COSTCENTER,
COMP_CODE TYPE BAPI_ITOB-COMP_CODE,
LONG_TEXT(2500) TYPE C,
end of gt_equipment_error_data.
data: Begin of gt_equipment_error_rep occurs 0,
EQUI_NUMBER TYPE BAPI_ITOB_PARMS-EQUIPMENT,
VALID_DATE TYPE BAPI_ITOB_PARMS-INST_DATE,
FUNCLOC TYPE BAPI_ITOB_EQ_INSTALL-FUNCLOC,
SUPEQUI TYPE BAPI_ITOB_EQ_INSTALL-SUPEQUI,
MATERIAL TYPE BAPI_ITOB_EQ_ONLY-MATERIAL,
SERIALNO TYPE BAPI_ITOB_EQ_ONLY-SERIALNO,
EQUICATGRY TYPE BAPI_ITOB_EQ_ONLY-EQUICATGRY,
BATCH TYPE BAPI_ITOB_EQ_ONLY-BATCH,
READ_SUPEQ TYPE BAPI_ITOB_EQ_ONLY-READ_SUPEQ,
READ_FLOC TYPE BAPI_ITOB_EQ_ONLY-READ_FLOC,
OBJECTTYPE TYPE BAPI_ITOB-OBJECTTYPE,
OBJ_SIZE TYPE BAPI_ITOB-OBJ_SIZE,
OBJ_WEIGHT TYPE BAPI_ITOB-OBJ_WEIGHT,
UNIT_OF_WT TYPE BAPI_ITOB-UNIT_OF_WT,
MANFACTURE TYPE BAPI_ITOB-MANFACTURE,
MANCOUNTRY TYPE BAPI_ITOB-MANCOUNTRY,
COUNTR_ISO TYPE BAPI_ITOB-COUNTR_ISO,
MANSERNO TYPE BAPI_ITOB-MANSERNO,
MANMODEL TYPE BAPI_ITOB-MANMODEL,
CONSTYEAR TYPE BAPI_ITOB-CONSTYEAR,
CONSTMONTH TYPE BAPI_ITOB-CONSTMONTH,
START_FROM TYPE BAPI_ITOB-START_FROM,
PLANPLANT TYPE BAPI_ITOB-PLANPLANT,
MANPARNO TYPE BAPI_ITOB-MANPARNO,
PLANGROUP TYPE BAPI_ITOB-PLANGROUP,
CATPROFILE TYPE BAPI_ITOB-CATPROFILE,
WCTR_PLANT TYPE BAPI_ITOB-MAINTPLANT,
WORK_CTR(8) TYPE C, "BAPI_ITOB-WORK_CTR,
DESCRIPT TYPE BAPI_ITOB-DESCRIPT,
ABCINDIC TYPE BAPI_ITOB-ABCINDIC,
SORTFIELD TYPE BAPI_ITOB-SORTFIELD,
MAINTPLANT TYPE BAPI_ITOB-MAINTPLANT,
MAINTLOC TYPE BAPI_ITOB-MAINTLOC,
PP_WKCTR(8) TYPE C, "BAPI_ITOB-PP_WKCTR,
COSTCENTER TYPE BAPI_ITOB-COSTCENTER,
COMP_CODE TYPE BAPI_ITOB-COMP_CODE,
MESSAGE TYPE bad_patch-descript,
STATUS(10) TYPE C,
RECORD TYPE i,
end of gt_equipment_error_rep.
* ALV stuff
type-pools: slis.
data: gt_fieldcat type slis_t_fieldcat_alv,
gs_layout type slis_layout_alv,
gt_sort type slis_t_sortinfo_alv.
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
PERFORM authorization_check.
PERFORM get_file_name using 'P_INFILE'
changing gv_file_name.
START-OF-SELECTION.
PERFORM read_input_file_from_pc tables gt_upload
using p_infile.
PERFORM prepare_itab_data tables gt_upload
gt_equipment_data.
PERFORM call_bapi_create_equipment tables gt_equipment_data
gt_equipment_error_data
gt_equipment_error_rep.
END-OF-SELECTION.
PERFORM write_error_file_to_pc tables gt_equipment_error_data
using p_infile.
perform alv_grid.
*&---------------------------------------------------------------------*
*& Form get_file_name
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_file_name using x_file_field_name
changing y_file_name_with_path.
data : lv_file_path type rlgrap-filename,
lv_file_name type rlgrap-filename.
PERFORM read_screen_values USING x_file_field_name
CHANGING y_file_name_with_path.
PERFORM split_path USING y_file_name_with_path
CHANGING lv_file_path
lv_file_name.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = lv_file_name
def_path = lv_file_path
mask = ',*.*,*.*.'
mode = 'O'
title = 'Directory'
IMPORTING
filename = p_infile
EXCEPTIONS
OTHERS = 1.
ENDFORM. " get_file_name
*&--------------------------------------------------------------------*
*& Form read_screen_values
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_FIELD text
* -->P_VALUE text
*---------------------------------------------------------------------*
FORM read_screen_values USING x_field
CHANGING y_value.
DATA: lv_dynpname LIKE d020s-prog,
lv_dynpnumb LIKE d020s-dnum.
DATA: BEGIN OF lt_dynpvaluetab OCCURS 1.
INCLUDE STRUCTURE dynpread.
DATA: END OF lt_dynpvaluetab.
lv_dynpname = sy-repid.
lv_dynpnumb = sy-dynnr.
REFRESH lt_dynpvaluetab.
lt_dynpvaluetab-fieldname = x_field.
APPEND lt_dynpvaluetab.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = lv_dynpname
dynumb = lv_dynpnumb
TABLES
dynpfields = lt_dynpvaluetab
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
OTHERS = 10.
IF sy-subrc = 0.
READ TABLE lt_dynpvaluetab INDEX 1.
MOVE: lt_dynpvaluetab-fieldvalue TO y_value.
ENDIF.
ENDFORM. " read_screen_values
*&--------------------------------------------------------------------*
*& Form split_path
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_WHOLE text
* -->P_PATH text
* -->P_FNAME text
* -->P_SCHARS text
*---------------------------------------------------------------------*
FORM split_path USING x_file_name_with_path
CHANGING y_file_path
y_file_name.
DATA: lv_length TYPE i,
lv_cpos TYPE i.
check not x_file_name_with_path is initial.
lv_length = strlen( x_file_name_with_path ).
lv_cpos = lv_length.
DO lv_length times.
lv_cpos = lv_cpos - 1.
check x_file_name_with_path+lv_cpos(1) eq '\'.
exit.
ENDDO.
y_file_path = x_file_name_with_path(lv_cpos).
lv_cpos = lv_cpos + 1.
y_file_name = x_file_name_with_path+lv_cpos(lv_length).
ENDFORM. " split_path
*&---------------------------------------------------------------------*
*& Form read_input_file_from_pc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_input_file_from_pc tables yt_upload
using x_infile.
* Use WS_Upload if file is located on the local PC.
* WS_Upload only works in foreground
IF sy-batch EQ 'X'.
WRITE: text-002.
<* ERROR: Unable to upload locally stored files when running in
* background
ELSE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = x_infile
filetype = 'ASC'
TABLES
data_tab = yt_upload
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.
* Status of upload
CASE sy-subrc.
WHEN 0.
WHEN OTHERS.
* Upload unsuccessful - error message
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDCASE.
ENDIF.
IF yt_upload[] is initial.
MESSAGE E079(z1) with x_infile.
ENDIF.
ENDFORM. " read_input_file_from_pc
*&---------------------------------------------------------------------*
*& Form prepare_itab_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_UPLOAD text
* <--P_GT_EQUIPMENT_DATA text
*----------------------------------------------------------------------*
FORM prepare_itab_data
TABLES XT_UPLOAD STRUCTURE GT_UPLOAD
YT_EQUIPMENT_DATA STRUCTURE GT_EQUIPMENT_DATA.
constants :
lc_tab type x value '09'.
data :
lv_length type i.
loop at xt_upload.
* Skip the header line descriptions in the file.
if sy-tabix eq 1.
SPLIT XT_UPLOAD at lc_tab into table gt_header_fields.
continue.
endif.
* Populate file values to internal table.
split xt_upload at lc_tab into
yt_equipment_data-EQUI_NUMBER
yt_equipment_data-VALID_DATE
yt_equipment_data-FUNCLOC
yt_equipment_data-SUPEQUI
yt_equipment_data-MATERIAL
yt_equipment_data-SERIALNO
yt_equipment_data-EQUICATGRY
yt_equipment_data-BATCH
yt_equipment_data-READ_SUPEQ
yt_equipment_data-READ_FLOC
yt_equipment_data-OBJECTTYPE
yt_equipment_data-OBJ_SIZE
yt_equipment_data-OBJ_WEIGHT
yt_equipment_data-UNIT_OF_WT
yt_equipment_data-MANFACTURE
yt_equipment_data-MANCOUNTRY
yt_equipment_data-COUNTR_ISO
yt_equipment_data-MANSERNO
yt_equipment_data-MANMODEL
yt_equipment_data-CONSTYEAR
yt_equipment_data-CONSTMONTH
yt_equipment_data-START_FROM
yt_equipment_data-PLANPLANT
yt_equipment_data-MANPARNO
yt_equipment_data-PLANGROUP
yt_equipment_data-CATPROFILE
yt_equipment_data-WCTR_PLANT
yt_equipment_data-WORK_CTR
yt_equipment_data-DESCRIPT
yt_equipment_data-ABCINDIC
yt_equipment_data-SORTFIELD
yt_equipment_data-MAINTPLANT
yt_equipment_data-MAINTLOC
yt_equipment_data-PP_WKCTR
yt_equipment_data-COSTCENTER
yt_equipment_data-COMP_CODE
yt_equipment_data-LONG_TEXT.
lv_length = strlen( yt_equipment_data-CONSTMONTH ).
IF lv_length eq 1.
concatenate '0' yt_equipment_data-CONSTMONTH
into yt_equipment_data-CONSTMONTH.
endif.
* Populate other values ( system variables/constants - not from file )
APPEND yt_equipment_data.
endloop.
ENDFORM. " prepare_itab_data
*&---------------------------------------------------------------------*
*& Form call_bapi_create_equipment
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->XT_EQUIPMENT_DATA text
*----------------------------------------------------------------------*
FORM call_bapi_create_equipment
TABLES
XT_EQUIPMENT_DATA STRUCTURE GT_EQUIPMENT_DATA
XT_EQUIPMENT_error_DATA STRUCTURE GT_EQUIPMENT_DATA
XT_EQUIPMENT_error_rep STRUCTURE GT_EQUIPMENT_error_rep.
data :
lv_BAPI_ITOB type BAPI_ITOB,
lv_BAPI_ITOB_EQ_ONLY type BAPI_ITOB_EQ_ONLY,
lv_BAPI_ITOB_EQ_INSTALL type BAPI_ITOB_EQ_INSTALL,
lv_BAPI_ITOBX type BAPI_ITOBX,
lv_BAPI_ITOB_EQ_ONLYX type BAPI_ITOB_EQ_ONLYX,
lv_valid_date type sy-datum,
lv_return like bapiret2,
lv_record_no type sy-index,
lv_edit_type(6) type c,
lv_no_error_flag type c.
loop at XT_EQUIPMENT_DATA.
CLEAR : lv_return,
lv_BAPI_ITOB,
lv_BAPI_ITOB_EQ_ONLY,
lv_BAPI_ITOB_EQ_INSTALL,
lv_valid_date.
lv_record_no = sy-tabix.
PERFORM get_object_id_of_workcentres
tables xt_EQUIPMENT_error_DATA
xT_EQUIPMENT_error_rep
using lv_record_no
CHANGING XT_EQUIPMENT_DATA
lv_no_error_flag.
* Error encuntered in work centre id determination.
IF lv_no_error_flag is initial.
continue.
ENDIF.
* Check if equipment number was specified in file.
if XT_EQUIPMENT_DATA-EQUI_NUMBER is initial.
lv_edit_type = 'CREATE'.
else.
lv_edit_type = 'CHANGE'.
endif.
PERFORM populate_bapi_structures using XT_EQUIPMENT_DATA
lv_edit_type
changing lv_BAPI_ITOB
lv_BAPI_ITOB_EQ_ONLY
lv_BAPI_ITOB_EQ_INSTALL
lv_valid_date
lv_BAPI_ITOBX
lv_BAPI_ITOB_EQ_ONLYX.
CASE lv_edit_type.
WHEN 'CREATE'.
* Create Equipment
CALL FUNCTION 'BAPI_EQUI_CREATE'
EXPORTING
EXTERNAL_NUMBER = XT_EQUIPMENT_DATA-EQUI_NUMBER
DATA_GENERAL = lv_BAPI_ITOB
DATA_SPECIFIC = lv_BAPI_ITOB_EQ_ONLY
VALID_DATE = lv_valid_date
DATA_INSTALL = lv_BAPI_ITOB_EQ_INSTALL
IMPORTING
EQUIPMENT = XT_EQUIPMENT_DATA-EQUI_NUMBER
DATA_GENERAL_EXP = lv_BAPI_ITOB
DATA_SPECIFIC_EXP = lv_BAPI_ITOB_EQ_ONLY
RETURN = lv_return.
WHEN 'CHANGE'.
SELECT SINGLE EQUNR
INTO XT_EQUIPMENT_DATA-EQUI_NUMBER
FROM EQUI
WHERE EQUNR eq XT_EQUIPMENT_DATA-EQUI_NUMBER.
if sy-subrc ne 0.
append XT_EQUIPMENT_DATA to XT_EQUIPMENT_error_DATA.
XT_EQUIPMENT_error_rep = XT_EQUIPMENT_DATA.
XT_EQUIPMENT_error_rep-MESSAGE = text-010.
XT_EQUIPMENT_error_rep-RECORD = lv_record_no.
append XT_EQUIPMENT_error_rep.
exit.
endif.
* Change Equipment
CALL FUNCTION 'BAPI_EQUI_CHANGE'
EXPORTING
EQUIPMENT = XT_EQUIPMENT_DATA-EQUI_NUMBER
DATA_GENERAL = lv_BAPI_ITOB
DATA_GENERALX = lv_BAPI_ITOBX
DATA_SPECIFIC = lv_BAPI_ITOB_EQ_ONLY
DATA_SPECIFICX = lv_BAPI_ITOB_EQ_ONLYX
IMPORTING
DATA_GENERAL_EXP = lv_BAPI_ITOB
DATA_SPECIFIC_EXP = lv_BAPI_ITOB_EQ_ONLY
RETURN = lv_return.
ENDCASE.
if lv_return-type = 'E'.
* For Error data file.
append XT_EQUIPMENT_data to XT_EQUIPMENT_error_DATA.
* For Error reporting.
XT_EQUIPMENT_error_rep = XT_EQUIPMENT_data.
PERFORM prepare_error_text
using lv_return
changing XT_EQUIPMENT_error_rep-MESSAGE.
XT_EQUIPMENT_error_rep-RECORD = lv_record_no.
XT_EQUIPMENT_error_rep-STATUS = 'Error'.
append XT_EQUIPMENT_error_rep.
else.
* Equipment created successfully.
XT_EQUIPMENT_error_rep = XT_EQUIPMENT_data.
XT_EQUIPMENT_error_rep-MESSAGE = 'Equipment created successfully'.
XT_EQUIPMENT_error_rep-RECORD = lv_record_no.
XT_EQUIPMENT_error_rep-STATUS = 'Success'.
append XT_EQUIPMENT_error_rep.
COMMIT WORK AND WAIT.
* Save Long Text for Equipment.
check not XT_EQUIPMENT_DATA-long_text is initial.
PERFORM save_long_text using XT_EQUIPMENT_DATA-equi_number
XT_EQUIPMENT_DATA-long_text.
endif.
endloop.
ENDFORM. " call_bapi_create_equipment
*&---------------------------------------------------------------------*
*& Form populate_bapi_structures
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->XT_EQUIPMENT_DATA text
* <--Y_BAPI_ITOB text
* <--Y_BAPI_ITOB_EQ_ONLY text
* <--Y_BAPI_ITOB_EQ_INSTALL text
* <--Y_VALID_DATE text
*----------------------------------------------------------------------*
FORM populate_bapi_structures
USING XT_EQUIPMENT_DATA STRUCTURE GT_EQUIPMENT_DATA
x_edit_type TYPE C
CHANGING y_BAPI_ITOB STRUCTURE BAPI_ITOB
y_BAPI_ITOB_EQ_ONLY STRUCTURE BAPI_ITOB_EQ_ONLY
y_BAPI_ITOB_EQ_INSTALL STRUCTURE BAPI_ITOB_EQ_INSTALL
y_VALID_DATE
y_BAPI_ITOBX STRUCTURE BAPI_ITOBX
y_BAPI_ITOB_EQ_ONLYX STRUCTURE BAPI_ITOB_EQ_ONLYX.
move-corresponding XT_EQUIPMENT_DATA to y_BAPI_ITOB.
move-corresponding XT_EQUIPMENT_DATA to y_BAPI_ITOB_EQ_ONLY.
move-corresponding XT_EQUIPMENT_DATA to y_BAPI_ITOB_EQ_INSTALL.
y_VALID_DATE = XT_EQUIPMENT_DATA-VALID_DATE.
IF x_edit_type eq 'CHANGE'.
Y_BAPI_ITOB_EQ_ONLYX-MATERIAL = 'X'.
Y_BAPI_ITOB_EQ_ONLYX-SERIALNO = 'X'.
Y_BAPI_ITOB_EQ_ONLYX-EQUICATGRY = 'X'.
Y_BAPI_ITOB_EQ_ONLYX-BATCH = 'X'.
Y_BAPI_ITOB_EQ_ONLYX-READ_SUPEQ = 'X'.
Y_BAPI_ITOB_EQ_ONLYX-READ_FLOC = 'X'.
Y_BAPI_ITOBX-OBJECTTYPE = 'X'.
Y_BAPI_ITOBX-OBJ_SIZE = 'X'.
Y_BAPI_ITOBX-OBJ_WEIGHT = 'X'.
Y_BAPI_ITOBX-UNIT_OF_WT = 'X'.
Y_BAPI_ITOBX-MANFACTURE = 'X'.
Y_BAPI_ITOBX-MANCOUNTRY = 'X'.
Y_BAPI_ITOBX-COUNTR_ISO = 'X'.
Y_BAPI_ITOBX-MANSERNO = 'X'.
Y_BAPI_ITOBX-MANMODEL = 'X'.
Y_BAPI_ITOBX-CONSTYEAR = 'X'.
Y_BAPI_ITOBX-CONSTMONTH = 'X'.
Y_BAPI_ITOBX-START_FROM = 'X'.
Y_BAPI_ITOBX-PLANPLANT = 'X'.
Y_BAPI_ITOBX-MANPARNO = 'X'.
Y_BAPI_ITOBX-PLANGROUP = 'X'.
Y_BAPI_ITOBX-CATPROFILE = 'X'.
Y_BAPI_ITOBX-WORK_CTR = 'X'.
Y_BAPI_ITOBX-DESCRIPT = 'X'.
Y_BAPI_ITOBX-ABCINDIC = 'X'.
Y_BAPI_ITOBX-SORTFIELD = 'X'.
Y_BAPI_ITOBX-MAINTPLANT = 'X'.
Y_BAPI_ITOBX-MAINTLOC = 'X'.
Y_BAPI_ITOBX-PP_WKCTR = 'X'.
Y_BAPI_ITOBX-COSTCENTER = 'X'.
Y_BAPI_ITOBX-COMP_CODE = 'X'.
Y_BAPI_ITOBX-READ_CRDAT = 'X'.
Y_BAPI_ITOBX-READ_CRNAM = 'X'.
Y_BAPI_ITOBX-READ_CHDAT = 'X'.
Y_BAPI_ITOBX-READ_CHNAM = 'X'.
ENDIF.
ENDFORM. " populate_bapi_structures
*&---------------------------------------------------------------------*
*& Form write_error_file_to_pc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_EQUIPMENT_ERROR_DATA text
*----------------------------------------------------------------------*
FORM write_error_file_to_pc tables xt_download
using x_infile.
check not xt_download[] is initial.
replace '.' with '.err.' into x_infile.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = x_infile
FILETYPE = 'DAT'
TABLES
DATA_TAB = xt_download
FIELDNAMES = gt_header_fields
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'W' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " write_error_file_to_pc
*&---------------------------------------------------------------------*
*& Form alv_grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form alv_grid.
if gt_fieldcat[] is initial.
perform fieldcat_init.
perform layout_init.
perform sort_init.
endif.
perform grid_display.
endform.
*&---------------------------------------------------------------------*
*& Form layout_init
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form layout_init.
gs_layout-zebra = 'X'.
gs_layout-cell_merge = 'X'.
gs_layout-colwidth_optimize = 'X'.
gs_layout-no_vline = ' '.
gs_layout-totals_before_items = ' '.
endform. " layout_init
*&---------------------------------------------------------------------*
*& Form fieldcat_init
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fieldcat_init.
data: ls_fieldcat type slis_fieldcat_alv.
clear ls_fieldcat.
ls_fieldcat-fieldname = 'RECORD'.
ls_fieldcat-key = 'X'.
ls_fieldcat-reptext_ddic = 'Record Number'.
ls_fieldcat-outputlen = 10.
* Fix for ALV print bug,
* Set type to 'N' to stop corruption of printed ALV cell.
ls_fieldcat-inttype = 'N'.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-fieldname = 'EQUI_NUMBER'.
ls_fieldcat-reptext_ddic = 'Equipment'.
ls_fieldcat-outputlen = 10.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-fieldname = 'STATUS'.
ls_fieldcat-reptext_ddic = 'Status'.
ls_fieldcat-outputlen = 10.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-reptext_ddic = 'Message'.
ls_fieldcat-outputlen = 100.
append ls_fieldcat to gt_fieldcat.
endform.
*&---------------------------------------------------------------------*
*& Form sort_init
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form sort_init.
data: ls_sort type slis_sortinfo_alv.
clear ls_sort.
ls_sort-fieldname = 'STATUS'.
ls_sort-spos = 1.
ls_sort-up = 'X'.
append ls_sort to gt_sort.
clear ls_sort.
ls_sort-fieldname = 'RECORD'.
ls_sort-spos = 2.
ls_sort-up = 'X'.
append ls_sort to gt_sort.
clear ls_sort.
ls_sort-fieldname = 'EQUI_NUMBER'.
ls_sort-spos = 3.
ls_sort-up = 'X'.
append ls_sort to gt_sort.
endform.
*&---------------------------------------------------------------------*
*& Form grid_display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form grid_display.
call function 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = gs_layout
it_fieldcat = gt_fieldcat
it_sort = gt_sort
i_default = ' '
i_save = 'X'
TABLES
t_outtab = gt_equipment_error_rep
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.
*&---------------------------------------------------------------------*
*& Form authorization_check
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM authorization_check.
CALL FUNCTION 'AUTHORITY_CHECK_EQUI'
EXPORTING
TCODE = 'IE01'
EXCEPTIONS
NO_AUTHORITY_TCODE = 1
NO_AUTHORITY_BEGRP = 2
NO_AUTHORITY_IWERK = 3
NO_AUTHORITY_INGRP = 4
NO_AUTHORITY_SWERK = 5
NO_AUTHORITY_KOSTL = 6
NO_PROFILE_IN_USER_MASTER_DATA = 7
ERROR_IN_USER_MASTER_DATA = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
message E078(z1).
ENDIF.
ENDFORM. " authorization_check
*&---------------------------------------------------------------------*
*& Form prepare_error_text
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->XT_RETURN text
* <--YT_EQUIPMENT_ERROR_REP_MESSAGE text
*----------------------------------------------------------------------*
FORM prepare_error_text USING X_RETURN TYPE BAPIRET2
CHANGING Y_MESSAGE TYPE bad_patch-descript.
* Convert the message
MOVE : x_return-id TO sy-msgid,
x_return-number TO sy-msgno,
x_return-message_v1 TO sy-msgv1,
x_return-message_v2 TO sy-msgv2,
x_return-message_v3 TO sy-msgv3,
x_return-message_v4 TO sy-msgv4.
CALL FUNCTION 'K_MESSAGE_TRANSFORM'
EXPORTING
par_langu = sy-langu
par_msgid = sy-msgid
par_msgno = sy-msgno
par_msgv1 = sy-msgv1
par_msgv2 = sy-msgv2
par_msgv3 = sy-msgv3
par_msgv4 = sy-msgv4
IMPORTING
par_msgtx = Y_MESSAGE
EXCEPTIONS
no_message_found = 1
par_msgid_missing = 2
par_msgno_missing = 3
par_msgty_missing = 4
OTHERS = 5.
ENDFORM. " prepare_error_text
*&---------------------------------------------------------------------*
*& Form save_long_text
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->x_EQUI_NUMBER text
* -->x_long_text text
*----------------------------------------------------------------------*
FORM save_long_text USING x_EQUI_NUMBER
x_long_text.
data :
lt_long_text type table of TLINE with header line,
lv_text_length type i,
lv_loop_times type i,
lv_char_pos_last type i,
lv_char_pos_curr type i,
lv_header type thead.
lv_text_length = strlen( x_long_text ).
lv_char_pos_curr = 0.
lv_char_pos_last = 0.
* Split long text into table.
lv_loop_times = lv_text_length DIV 132.
DO lv_loop_times times.
lv_char_pos_curr = lv_char_pos_curr + 132.
lt_long_text-tdline =
x_long_text+lv_char_pos_last(132).
append lt_long_text.
lv_char_pos_last = lv_char_pos_curr - 1.
ENDDO.
* Write the left-over.
lt_long_text-tdline =
x_long_text+lv_char_pos_last.
append lt_long_text.
lv_header-TDOBJECT = 'EQUI'.
lv_header-TDNAME = x_EQUI_NUMBER.
lv_header-TDID = 'LTXT'.
lv_header-TDSPRAS = 'E'.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
HEADER = lv_header
SAVEMODE_DIRECT = 'X'
TABLES
LINES = lt_long_text
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
CALL FUNCTION 'K_MESSAGE_TRANSFORM'
EXPORTING
par_langu = sy-langu
par_msgid = sy-msgid
par_msgno = sy-msgno
par_msgv1 = sy-msgv1
par_msgv2 = sy-msgv2
par_msgv3 = sy-msgv3
par_msgv4 = sy-msgv4
IMPORTING
par_msgtx = GT_EQUIPMENT_error_rep-MESSAGE
EXCEPTIONS
no_message_found = 1
par_msgid_missing = 2
par_msgno_missing = 3
par_msgty_missing = 4
OTHERS = 5.
* For Error data file.
modify gt_equipment_error_data from gt_equipment_data.
gt_equipment_error_rep-status = 'Error'.
modify GT_EQUIPMENT_error_rep transporting MESSAGE STATUS
where EQUI_NUMBER = x_EQUI_NUMBER.
ELSE.
COMMIT WORK.
ENDIF.
ENDFORM. " save_long_text
*&---------------------------------------------------------------------*
*& Form get_object_id_of_workcentres
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_object_id_of_workcentres
TABLES
yt_EQUIPMENT_error_DATA structure gt_equipment_error_DATA
YT_EQUIPMENT_error_rep structure gT_EQUIPMENT_error_rep
using value(x_record_no) type sy-index
CHANGING
x_equipment_data structure gt_equipment_data
y_no_error_flag type c.
data : lv_main_work_centre like gt_equipment_data-WORK_CTR,
lv_plan_work_centre like gt_equipment_data-PP_WKCTR.
y_no_error_flag = 'X'.
* Get Object ID of Work centre using work centre and plant.
IF not x_equipment_data-WORK_CTR is initial.
SELECT SINGLE OBJID
INTO lv_main_work_centre
FROM CRHD
WHERE objty = 'A'
AND arbpl = x_equipment_data-WORK_CTR
AND werks = x_equipment_data-WCTR_PLANT.
if sy-subrc <> 0.
y_no_error_flag = ' '.
* For Error data file.
append x_EQUIPMENT_data to YT_EQUIPMENT_error_DATA.
* For Error reporting.
YT_EQUIPMENT_error_rep = x_EQUIPMENT_data.
CONCATENATE
'Work Centre ID is not maintained for Maint Work center' space
x_equipment_data-WORK_CTR space ' and ' space
'Plant ' space x_equipment_data-MAINTPLANT
into YT_EQUIPMENT_error_rep-MESSAGE.
YT_EQUIPMENT_error_rep-RECORD = x_record_no.
YT_EQUIPMENT_error_rep-STATUS = 'Error'.
append YT_EQUIPMENT_error_rep.
exit.
else.
x_equipment_data-WORK_CTR = lv_main_work_centre.
endif.
endif.
if not x_equipment_data-PP_WKCTR is initial.
SELECT SINGLE OBJID
INTO lv_plan_work_centre
FROM CRHD
WHERE objty = 'A'
AND arbpl = x_equipment_data-PP_WKCTR
AND werks = x_equipment_data-WCTR_PLANT.
if sy-subrc <> 0.
y_no_error_flag = ' '.
y_no_error_flag = ' '.
* For Error data file.
append x_EQUIPMENT_data to YT_EQUIPMENT_error_DATA.
* For Error reporting.
YT_EQUIPMENT_error_rep = x_EQUIPMENT_data.
CONCATENATE
'Work Centre ID is not maintained for Plan Work center ' space
x_equipment_data-PP_WKCTR space ' and ' space
'Plant ' space x_equipment_data-PLANPLANT
into YT_EQUIPMENT_error_rep-MESSAGE.
YT_EQUIPMENT_error_rep-RECORD = x_record_no.
YT_EQUIPMENT_error_rep-STATUS = 'Error'.
append YT_EQUIPMENT_error_rep.
exit.
else.
x_equipment_data-PP_WKCTR = lv_plan_work_centre.
endif.
endif.
ENDFORM. " get_object_id_of_workcentres






