‎2009 Aug 26 10:07 PM
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.
‎2009 Aug 27 4:23 AM
Hi Mustafa Shareef,
Can you post Your code in two separate, please check preview before post for better repsone.
Regards,
Suneel G
‎2009 Aug 27 4:28 AM
Hi Mustafa Shareef,
Can you post Your code in two separate, please check preview before post for better repsone.
Regards,
Suneel G
‎2009 Aug 27 4:53 AM
Hi,
Please search SCN before posing on the forum. In order to capture error while call transaction you can do like below:
data: it_bdcmsgcoll like bdcmsgcoll occurs 0 with header line.
CALL TRANSACTION 'MM01' USING i_bdcdata MODE p_mode messages in it_bdcmsgcoll.
Internal table it_bdcmsgcoll will have all the messages errors would be with message type 'E'.
Regards,
Himanshu
‎2009 Aug 30 12:29 AM
Dear Himanshu,
I have done the same by taking an internal table of type bdcmsgcol.but when i display the log file it is showing me only the Screen name, Screen No.s, Field names but it is not showing me the messages like the material created or not created etc...
i have taken the msgid fields also but it is displaying the text messages.
Any Idea y it is not showing me the text messages.
regards
Mustafa.
‎2009 Aug 30 6:31 AM
Hi,
After you get the error message codes in table use function module 'FORMAT_MESSAGE' get the corresponding text message for the error message codes that you are getting in the errors table.
Regards,
Himanshu
‎2009 Aug 30 9:43 AM
‎2009 Aug 30 10:09 AM
Hi,
You can use it like below:
CALL TRANSACTION 'ME21' USING bdcdata MODE 'N' UPDATE 'S' MESSAGES INTO it_message.
LOOP AT it_message.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = it_message-msgid
lang = it_message-msgspra
no = it_message-msgnr
v1 = it_message-msgv1
v2 = it_message-msgv2
IMPORTING
msg = v_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
ENDLOOP.
Regards,
Himanshu
‎2011 Feb 24 1:01 PM