Skip to Content
0
Aug 26, 2009 at 09:14 PM

Catching Errors in Call Transaction

48 Views

Hi All,

I have develop the BDC using call transaction for MM01 transaction but i need to catch the success messages as well as errors in a log file that i wanna download. below is the code for the same and is it mandatory to give the update mode.please let me know.

DATA: i_bdcdata TYPE bdcdata OCCURS 0 WITH HEADER LINE,

i_error TYPE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY,

p_mode(1) DEFAULT 'A'.

p_erfile TYPE rlgrap-filename.

SELECTION-SCREEN : BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.

PARAMETER: PBROW_HD TYPE I, PEROW_HD TYPE I, PBCOL_HD TYPE I, PECOL_HD TYPE I.

SELECTION-SCREEN : END OF BLOCK BLK1.

DATA: T_EXCEL LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.

Data: begin of record occurs 0,

MATNR(40),

MBRSH(01),

MTART(04),

MAKTX(40),

MEINS(03),

MATKL(09),

BISMT(18),

UMREN_02(05),

UMREN_03(05),

MEINH_02(03),

MEINH_03(03),

UMREZ_02(05),

UMREZ_03(05),

WERKS(04),

EKGRP(3) ,

LGORT(04),

DISMM(02),

DISPO(03), "Cash Discount Indicator

DISLS(02),

BESKZ(1),

DZEIT(3),

FHORI(3),

PERKZ(1),

MTVFP(02),

IPRKZ(01),

END OF RECORD.

DATA: v_filename LIKE RLGRAP-FILENAME.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  • PERFORM read_file CHANGING p_file.

CALL FUNCTION 'F4_FILENAME'

  • * EXPORTING

  • * PROGRAM_NAME = SYST-CPROG

  • * DYNPRO_NUMBER = SYST-DYNNR

  • * FIELD_NAME = ' '

IMPORTING

FILE_NAME = P_FILE.

start-of-selection.

PERFORM upload_file.

PERFORM bdc

PERFORM error_download

FORM UPLOAD_FILE .

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'

EXPORTING

filename = p_file

i_begin_col = PBCOL_HD

i_begin_row = PBROW_HD

i_end_col = PECOL_HD

i_end_row = PEROW_HD

TABLES

intern = T_EXCEL

EXCEPTIONS

inconsistent_parameters = 1

upload_ole = 2

OTHERS = 3.

LOOP AT T_EXCEL.

CASE T_EXCEL-COL.

WHEN 1. MOVE T_EXCEL-VALUE TO record-MATNR.

WHEN 2. MOVE T_EXCEL-VALUE TO record-MBRSH.

WHEN 3. MOVE T_EXCEL-VALUE TO RECORD-MTART.

WHEN 4. MOVE T_EXCEL-VALUE TO RECORD-MAKTX.

WHEN 5. MOVE T_EXCEL-VALUE TO RECORD-MEINS.

WHEN 6. MOVE T_EXCEL-VALUE TO RECORD-MATKL.

WHEN 7. MOVE T_EXCEL-VALUE TO RECORD-BISMT.

WHEN 8. MOVE T_EXCEL-VALUE TO RECORD-UMREN_02.

WHEN 9. MOVE T_EXCEL-VALUE TO RECORD-UMREN_03.

WHEN 10. MOVE T_EXCEL-VALUE TO RECORD-MEINH_02.

WHEN 11. MOVE T_EXCEL-VALUE TO RECORD-MEINH_03.

WHEN 12. MOVE T_EXCEL-VALUE TO RECORD-UMREZ_02.

WHEN 13. MOVE T_EXCEL-VALUE TO RECORD-UMREZ_03.

WHEN 14. MOVE T_EXCEL-VALUE TO RECORD-WERKS.

WHEN 15. MOVE T_EXCEL-VALUE TO RECORD-EKGRP.

WHEN 16. MOVE T_EXCEL-VALUE TO RECORD-LGORT.

WHEN 17. MOVE T_EXCEL-VALUE TO RECORD-DISMM.

WHEN 18. MOVE T_EXCEL-VALUE TO RECORD-DISPO.

WHEN 19. MOVE T_EXCEL-VALUE TO RECORD-DISLS.

WHEN 20. MOVE T_EXCEL-VALUE TO RECORD-BESKZ.

WHEN 21. MOVE T_EXCEL-VALUE TO RECORD-DZEIT.

WHEN 22. MOVE T_EXCEL-VALUE TO RECORD-FHORI.

WHEN 23. MOVE T_EXCEL-VALUE TO RECORD-PERKZ.

WHEN 24. MOVE T_EXCEL-VALUE TO RECORD-MTVFP.

WHEN 25. MOVE T_EXCEL-VALUE TO RECORD-IPRKZ.

ENDCASE.

AT END OF ROW.

APPEND record.

CLEAR record.

ENDAT.

ENDLOOP.

ENDFORM. " UPLOAD_FILE

&----


*& Form BDC

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM BDC .

loop at record.

perform bdc_dynpro using 'SAPLMGMM' '0060'.

perform bdc_field using 'BDC_CURSOR'

'RMMG1-MATNR'.

perform bdc_field using 'BDC_OKCODE'

'=AUSW'.

perform bdc_field using 'RMMG1-MATNR'

record-matnr.

perform bdc_field using 'RMMG1-MBRSH'

record-mbrsh.

perform bdc_field using 'RMMG1-MTART'

record-mtart.

perform bdc_dynpro using 'SAPLMGMM' '0070'.

perform bdc_field using 'BDC_CURSOR'

'MSICHTAUSW-DYTXT(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_field using 'MSICHTAUSW-KZSEL(01)'

'X'.

perform bdc_dynpro using 'SAPLMGMM' '4004'.

perform bdc_field using 'BDC_OKCODE'

'=ZU01'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'BDC_CURSOR'

'MARA-BISMT'.

perform bdc_field using 'MARA-MEINS'

record-meins.

perform bdc_field using 'MARA-MATKL'

record-matkl.

perform bdc_field using 'MARA-BISMT'

record-bismt.

perform bdc_dynpro using 'SAPLMGMM' '4300'.

perform bdc_field using 'BDC_OKCODE'

'=ZU02'.

perform bdc_field using 'BDC_CURSOR'

'RMMG1-MATNR'.

perform bdc_dynpro using 'SAPLMGMM' '4300'.

perform bdc_field using 'BDC_OKCODE'

'=MAIN'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'BDC_CURSOR'

'SMEINH-UMREZ(03)'.

perform bdc_field using 'SMEINH-UMREN(02)'

record-umren_02.

perform bdc_field using 'SMEINH-UMREN(03)'

record-umren_03.

perform bdc_field using 'SMEINH-MEINH(02)'

record-meinh_02.

perform bdc_field using 'SMEINH-MEINH(03)'

record-meinh_03.

perform bdc_field using 'SMEINH-UMREZ(02)'

record-umrez_02.

perform bdc_field using 'SMEINH-UMREZ(03)'

record-umrez_03.

*perform bdc_dynpro using 'SAPLMGMM' '4300'.

*perform bdc_field using 'BDC_OKCODE'

  • '=MAIN'.

*perform bdc_field using 'BDC_CURSOR'

  • 'MAKT-MAKTX'.

*perform bdc_field using 'MAKT-MAKTX'

  • record-maktx.

*perform bdc_dynpro using 'SAPLMGMM' '4004'.

*perform bdc_field using 'BDC_OKCODE'

  • '=SP02'.

*perform bdc_field using 'BDC_CURSOR'

  • 'MAKT-MAKTX'.

*perform bdc_field using 'MAKT-MAKTX'

  • record-maktx.

*perform bdc_field using 'MARA-MEINS'

  • record-meins.

*perform bdc_field using 'MARA-MATKL'

  • record-matkl.

*perform bdc_field using 'MARA-BISMT'

  • record-bismt.

perform bdc_dynpro using 'SAPLMGMM' '4004'.

perform bdc_field using 'BDC_OKCODE'

'=SP09'.

perform bdc_field using 'BDC_CURSOR'

'MAKT-MAKTX'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_dynpro using 'SAPLMGMM' '0081'.

perform bdc_field using 'BDC_CURSOR'

'RMMG1-WERKS'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_field using 'RMMG1-WERKS'

record-werks.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP10'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'BDC_CURSOR'

'MARC-EKGRP'.

perform bdc_field using 'MARA-MEINS'

record-meins.

perform bdc_field using 'MARC-EKGRP'

record-ekgrp.

perform bdc_field using 'MARA-MATKL'

record-matkl.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP11'.

perform bdc_field using 'BDC_CURSOR'

'MAKT-MAKTX'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_dynpro using 'SAPLMGMM' '4040'.

perform bdc_field using 'BDC_OKCODE'

'=SP12'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_dynpro using 'SAPLMGMM' '0081'.

perform bdc_field using 'BDC_CURSOR'

'RMMG1-LGORT'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_field using 'RMMG1-LGORT'

record-lgort.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP13'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'MARA-MEINS'

record-meins.

perform bdc_field using 'MARC-EKGRP'

record-ekgrp.

perform bdc_field using 'MARC-DISMM'

record-dismm.

perform bdc_field using 'MARC-DISPO'

record-dispo.

perform bdc_field using 'BDC_CURSOR'

'MARC-DISLS'.

perform bdc_field using 'MARC-DISLS'

record-disls.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'SP14'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'MARC-BESKZ'

record-beskz.

perform bdc_field using 'BDC_CURSOR'

'MARC-FHORI'.

perform bdc_field using 'MARC-FHORI'

record-fhori.

perform bdc_field using 'MARC-DZEIT'

record-dzeit.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP15'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'MARC-PERKZ'

record-perkz.

perform bdc_field using 'BDC_CURSOR'

'MARC-MTVFP'.

perform bdc_field using 'MARC-MTVFP'

record-mtvfp.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP19'.

perform bdc_field using 'BDC_CURSOR'

'MAKT-MAKTX'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP20'.

perform bdc_field using 'BDC_CURSOR'

'MAKT-MAKTX'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'MARA-MEINS'

record-meins.

perform bdc_field using 'MARA-IPRKZ'

record-iprkz.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=SP23'.

perform bdc_field using 'BDC_CURSOR'

'MAKT-MAKTX'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_dynpro using 'SAPLMGMM' '4000'.

perform bdc_field using 'BDC_OKCODE'

'=BU'.

perform bdc_field using 'BDC_CURSOR'

'MAKT-MAKTX'.

perform bdc_field using 'MAKT-MAKTX'

record-maktx.

perform bdc_field using 'MARA-MEINS'

record-meins.

CALL TRANSACTION 'MM01' USING i_bdcdata MODE p_mode.

CLEAR I_BDCDATA[].

ENDLOOP.

ENDFORM. " BDC

FORM bdc_dynpro USING program dynpro.

CLEAR i_bdcdata.

i_bdcdata-program = program.

i_bdcdata-dynpro = dynpro.

i_bdcdata-dynbegin = 'X'.

APPEND i_bdcdata.

ENDFORM.

FORM bdc_field USING fnam fval.

CLEAR i_bdcdata.

i_bdcdata-fnam = fnam.

i_bdcdata-fval = fval.

APPEND i_bdcdata.

ENDFORM.

FORM ERROR_DOWNLOAD .

DATA: v_errorpath TYPE string.

v_errorpath = p_erfile.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

BIN_FILESIZE =

filename = v_errorpath

filetype = 'ASC'

APPEND = ' '

WRITE_FIELD_SEPARATOR = ' '

HEADER = '00'

TRUNC_TRAILING_BLANKS = ' '

WRITE_LF = 'X'

COL_SELECT = ' '

COL_SELECT_MASK = ' '

DAT_MODE = ' '

IMPORTING

FILELENGTH =

TABLES

data_tab = i_error

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22

.

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.