‎2008 Mar 17 11:59 PM
Hi,
How we can show a particular error record in bdc call transaction methos using bdcmsg call?
Regards,
Venkat
‎2008 Mar 18 1:59 AM
Hi venkat,
Using BDCMSGCOLL u can capture errors during call transaction.
If Call Transaction Fails , u maintain an internal table of type BDCMSGCOLL, u will return messages into into this internal table , use FORMAT_MESSAGE function module , provide the values of BDCMSGCOLL internal table values to FORMAT_MESSAGE function module , this function module will return the values , which records are not uploaded successfully ....
some sample code :
DATA: BDCDATA TYPE TABLE OF BDCDATA.
DATA: ITAB TYPE TABLE OF BDCMSGCOLL.
DATA: PROGRAM LIKE SY-REPID,
WA_BDCDATA TYPE BDCDATA.
WA_BDCDATA-PROGRAM = 'SAPMS38M'.
WA_BDCDATA-DYNPRO = '0100'.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO BDCDATA.
CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = 'RS38M-PROGRAMM'.
WA_BDCDATA-FVAL = PROGRAM.
APPEND WA_BDCDATA TO BDCDATA.
...
CALL TRANSACTION 'SE38' USING BDCDATA MODE 'N'
MESSAGES INTO ITAB.
Now formatting messages:
loop at itab.
perform format_message USING itab-msgid itab-msgnr itab-msgv1 itab-msgv2 itab-msgv3 itab-msgv4.
endloop.
FORM FORMAT_MESSAGE USING P_MSGID LIKE SY-MSGID
P_MSGNO LIKE SY-MSGNO
P_MSGV1 LIKE SY-MSGV1
P_MSGV2 LIKE SY-MSGV2
P_MSGV3 LIKE SY-MSGV3
P_MSGV4 LIKE SY-MSGV4.
DATA: P_TEXT(100) TYPE C.
CLEAR: P_TEXT.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = P_MSGID
LANG = SY-LANGU
NO = P_MSGNO
V1 = P_MSGV1
V2 = P_MSGV2
V3 = P_MSGV3
V4 = P_MSGV4
IMPORTING
MSG = P_TEXT
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC EQ 0.
WRITE:/ P_TEXT.
ENDIF.
ENDFORM. " FORMAT_MESSAGEI hope the above example brings you clear picture, if not plz let me know.
All the very best and Plz dont forgot to Reward me points.
Regards,
Sreenivasa Sarma K.
Edited by: sharmashree kashi on Mar 18, 2008 7:30 AM
‎2008 Mar 18 1:23 AM
When ever an error occurs Move the errored records into BDCMSGCOLL structure. Later you can download those to desktop.
I am sure you know to check with sy-subrc.
Thanks,
‎2008 Mar 18 1:30 AM
After a CALL TRANSACTION USING statement (or a CALL DIALOG statement), the value of SY-SUBRC indicates the success or failure of the transaction:
If SY-SUBRC is zero, the transaction (or dialog module) was successful.
If SY-SUBRC is not zero, the transaction (or dialog module) was not successful.
You can handle an error in many ways:
Write an error report.
Send the record(s) in error to an error file.
Create a batch input session with the record(s) in error.
This list of error handling methods is not complete. The exact method chosen will depend on your specific requirements. Also, these methods can be combined (e.g., you can create an error report and send the records in error to an error file).
Check this piece of code..
DO.
READ DATASET INFILE INTO INREC.
IF SY-SUBRC <> 0. EXIT. ENDIF.
PERFORM FILL_BDC_TAB.
CALL TRANSACTION FK02 USING BDC_TAB
MODE DISPMODE
UPDATE UPDAMODE.
IF SY-SUBRC <> 0.
WRITE: / Error. "Perform updation in error table here.
ENDIF.
ENDDO.
Regards,
Suruchi
‎2008 Mar 18 1:59 AM
Hi venkat,
Using BDCMSGCOLL u can capture errors during call transaction.
If Call Transaction Fails , u maintain an internal table of type BDCMSGCOLL, u will return messages into into this internal table , use FORMAT_MESSAGE function module , provide the values of BDCMSGCOLL internal table values to FORMAT_MESSAGE function module , this function module will return the values , which records are not uploaded successfully ....
some sample code :
DATA: BDCDATA TYPE TABLE OF BDCDATA.
DATA: ITAB TYPE TABLE OF BDCMSGCOLL.
DATA: PROGRAM LIKE SY-REPID,
WA_BDCDATA TYPE BDCDATA.
WA_BDCDATA-PROGRAM = 'SAPMS38M'.
WA_BDCDATA-DYNPRO = '0100'.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO BDCDATA.
CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = 'RS38M-PROGRAMM'.
WA_BDCDATA-FVAL = PROGRAM.
APPEND WA_BDCDATA TO BDCDATA.
...
CALL TRANSACTION 'SE38' USING BDCDATA MODE 'N'
MESSAGES INTO ITAB.
Now formatting messages:
loop at itab.
perform format_message USING itab-msgid itab-msgnr itab-msgv1 itab-msgv2 itab-msgv3 itab-msgv4.
endloop.
FORM FORMAT_MESSAGE USING P_MSGID LIKE SY-MSGID
P_MSGNO LIKE SY-MSGNO
P_MSGV1 LIKE SY-MSGV1
P_MSGV2 LIKE SY-MSGV2
P_MSGV3 LIKE SY-MSGV3
P_MSGV4 LIKE SY-MSGV4.
DATA: P_TEXT(100) TYPE C.
CLEAR: P_TEXT.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = P_MSGID
LANG = SY-LANGU
NO = P_MSGNO
V1 = P_MSGV1
V2 = P_MSGV2
V3 = P_MSGV3
V4 = P_MSGV4
IMPORTING
MSG = P_TEXT
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC EQ 0.
WRITE:/ P_TEXT.
ENDIF.
ENDFORM. " FORMAT_MESSAGEI hope the above example brings you clear picture, if not plz let me know.
All the very best and Plz dont forgot to Reward me points.
Regards,
Sreenivasa Sarma K.
Edited by: sharmashree kashi on Mar 18, 2008 7:30 AM
‎2008 Mar 26 2:38 AM
Hi venkat,
Using BDCMSGCOLL u can capture errors during call transaction.
If Call Transaction Fails , u maintain an internal table of type BDCMSGCOLL, u will return messages into into this internal table , use FORMAT_MESSAGE function module , provide the values of BDCMSGCOLL internal table values to FORMAT_MESSAGE function module , this function module will return the values , which records are not uploaded successfully ....
some sample code :
DATA: BDCDATA TYPE TABLE OF BDCDATA.
DATA: ITAB TYPE TABLE OF BDCMSGCOLL.
DATA: PROGRAM LIKE SY-REPID,
WA_BDCDATA TYPE BDCDATA.
WA_BDCDATA-PROGRAM = 'SAPMS38M'.
WA_BDCDATA-DYNPRO = '0100'.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO BDCDATA.
CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = 'RS38M-PROGRAMM'.
WA_BDCDATA-FVAL = PROGRAM.
APPEND WA_BDCDATA TO BDCDATA.
...
CALL TRANSACTION 'SE38' USING BDCDATA MODE 'N'
MESSAGES INTO ITAB.
Now formatting messages:
loop at itab.
perform format_message USING itab-msgid itab-msgnr itab-msgv1 itab-msgv2 itab-msgv3 itab-msgv4.
endloop.
FORM FORMAT_MESSAGE USING P_MSGID LIKE SY-MSGID
P_MSGNO LIKE SY-MSGNO
P_MSGV1 LIKE SY-MSGV1
P_MSGV2 LIKE SY-MSGV2
P_MSGV3 LIKE SY-MSGV3
P_MSGV4 LIKE SY-MSGV4.
DATA: P_TEXT(100) TYPE C.
CLEAR: P_TEXT.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = P_MSGID
LANG = SY-LANGU
NO = P_MSGNO
V1 = P_MSGV1
V2 = P_MSGV2
V3 = P_MSGV3
V4 = P_MSGV4
IMPORTING
MSG = P_TEXT
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC EQ 0.
WRITE:/ P_TEXT.
ENDIF.
ENDFORM. " FORMAT_MESSAGEI hope the above example brings you clear picture, if not plz let me know.
All the very best and Plz dont forgot to Reward me points.
Regards,
Sreenivasa Sarma K.
‎2008 Mar 26 2:44 AM
Hi
try this
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
I_MSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
CALL TRANSACTION 'ZSALPROMO' USING BDCDATA
MODE 'A'
UPDATE 'A'
MESSAGES INTO I_MSG.
IF SY-SUBRC NE 0.
PERFORM IT_ERROR.
ENDIF.
FORM IT_ERROR .
DATA: IT_EMSG(250) TYPE C.
READ TABLE I_MSG WITH KEY MSGTYP = 'E'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = SY-MSGID
LANG = '-D'
NO = SY-MSGNO
V1 = SY-MSGV1
V2 = SY-MSGV2
V3 = SY-MSGV3
V4 = SY-MSGV4
IMPORTING
MSG = IT_EMSG
EXCEPTIONS
NOT_FOUND = 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.
CLEAR: BDCDATA , I_MSG.
REFRESH: BDCDATA ,I_MSG.
WRITE:'ERROR MESSAGE', IT_EMSG .
ENDFORM. " IT_ERRORRegards,
V.Balaji
Reward if usefull
‎2008 Mar 26 3:31 AM
Hi
i am sending a sample code.here by using call transaction method i show the error records in the output.you go through it .
&--
TYPES : BEGIN OF ST_FINAL,
KTOKK TYPE RF02K-KTOKK,
ANRED TYPE LFA1-ANRED,
NAME1 TYPE LFA1-NAME1,
SORTL TYPE LFA1-SORTL,
PSTLZ TYPE LFA1-PSTLZ,
LAND1 TYPE LFA1-LAND1,
BANKS TYPE LFBK-BANKS,
BANKL TYPE LFBK-BANKL,
BANKN TYPE LFBK-BANKN,
END OF ST_FINAL.
The BDCMSGCOLL does not have the messages text. It has only the message type, number and message parameters.
You have to read the message text. (recall that the database table T100 stores all the messages.)
There are more than one method of doing this.
Following is the psuedocode for one of the methods.
LOOP for the internal table IT1 which has data value from flat file.
call transcation using....
if SY-SUBRC <> 0.
Read the dictionary table T100 FOR ALL ENTRIES in BDCMSGCOLL.
(also use the condition T100-SPRAS = SY-LANGU (the log on language. This is because you need only the message texts in English if the user is logged in English language)
IF message type is E , then, transfer the contents of this particular error record to file x. (TRANSFER......)
( Ignore all other messages. Only consider type 'E' messages. Ignore other types of messages.)
(You can also store the message text from T100 and the error record in another internal table IT2)
.....
....
ENDLOOP.
Please note that the client might ask you for a file of records which could not be uploaded.
Give him the file created in the above psuedocode. (most often you will have to do this).
Otherwise just display the error messages and the error records in the internal table IT2 in the form of a list.
Thats it.
Alternatively,
Instead of
" Read the dictionary table T100 FOR ALL ENTRIES in BDCMSGCOLL."
you can use the function module
WRITE_MESSAGES to read the messages.
Please refer to the function module for the list of parameters.
Also refer FORMAT_MESSAGES function module.
As, I said, there are more than one method of doing this.
&--
TYPES: BEGIN OF ST_ERROR ,
LINENO TYPE I,
MESSAGE TYPE STRING,
END OF ST_ERROR.
&--
TYPES: BEGIN OF ST_SUCCESS ,
LIFNR TYPE LIFNR,
NAME1 TYPE NAME1_GP,
END OF ST_SUCCESS.
&--
DATA : WA_FINAL TYPE ST_FINAL,
IT_FINAL TYPE STANDARD TABLE OF ST_FINAL,
WA_BDCDATA TYPE BDCDATA,
IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
WA_BDCMSGCOLL TYPE BDCMSGCOLL,
IT_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL,
WA_ERROR TYPE ST_ERROR,
IT_ERROR TYPE STANDARD TABLE OF ST_ERROR,
WA_SUCCESS TYPE ST_SUCCESS,
IT_SUCCESS TYPE STANDARD TABLE OF ST_SUCCESS,
V_FPATH TYPE STRING,
V_FLAG(1) TYPE C,
V_TOTALREC TYPE I,
V_ERRREC TYPE I,
V_SUCCREC TYPE I,
V_SUCCESS TYPE I,
V_INDEX LIKE SY-TABIX,
V_TCODE(7) VALUE 'XK01'.
&--
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-008.
PARAMETERS : P_FPATH TYPE LOCALFILE,
P_FTYPE TYPE RLGRAP-FILETYPE DEFAULT 'ASC'.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-009.
PARAMETERS : P_MODE TYPE C DEFAULT 'N',
P_UPDATE TYPE C DEFAULT 'S'.
SELECTION-SCREEN END OF BLOCK B2.
&--
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FPATH.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FPATH.
START-OF-SELECTION.
V_FPATH = P_FPATH.
&--
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FPATH
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = IT_FINAL
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT IT_FINAL INTO WA_FINAL.
V_INDEX = SY-TABIX.
PERFORM LOAD_BDCDATA.
CALL TRANSACTION V_TCODE
USING IT_BDCDATA
MODE P_MODE
UPDATE P_UPDATE
MESSAGES INTO IT_BDCMSGCOLL.
IF SY-SUBRC = 0.
*--
READ TABLE IT_BDCMSGCOLL INTO WA_BDCMSGCOLL WITH KEY MSGTYP = 'S'.
IF SY-SUBRC = 0.
WA_SUCCESS-LIFNR = WA_BDCMSGCOLL-MSGV1.
WA_SUCCESS-NAME1 = WA_FINAL-NAME1.
APPEND WA_SUCCESS TO IT_SUCCESS.
ADD 1 TO V_SUCCESS.
ENDIF.
ELSE.
*--
READ TABLE IT_BDCMSGCOLL INTO WA_BDCMSGCOLL WITH KEY MSGTYP = 'E'.
IF SY-SUBRC = 0.
*--
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = SY-MSGID
NO = WA_BDCMSGCOLL-MSGNR
V1 = WA_BDCMSGCOLL-MSGV1
V2 = WA_BDCMSGCOLL-MSGV2
V3 = WA_BDCMSGCOLL-MSGV3
V4 = WA_BDCMSGCOLL-MSGV4
IMPORTING
MSG = WA_ERROR-MESSAGE
EXCEPTIONS
OTHERS = 0.
APPEND WA_BDCMSGCOLL TO IT_BDCMSGCOLL.
WA_ERROR-LINENO = V_INDEX.
APPEND WA_ERROR TO IT_ERROR.
V_ERRREC = V_ERRREC + 1.
ENDIF.
IF v_flag EQ space.*
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'z50886'
HOLDDATE = SY-DATUM
KEEP = 'X'
USER = SY-UNAME.
V_FLAG = 'X'.
ENDIF.*
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'XK01'
TABLES
DYNPROTAB = IT_BDCDATA.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDIF.
CLEAR: WA_BDCDATA, WA_BDCMSGCOLL.
REFRESH: IT_BDCDATA, IT_BDCMSGCOLL.
ENDLOOP.
DESCRIBE TABLE IT_FINAL LINES V_TOTALREC.
DESCRIBE TABLE IT_ERROR LINES V_ERRREC.
V_SUCCREC = V_TOTALREC - V_ERRREC .
WRITE : /5 TEXT-001, 30 V_TOTALREC,
/5 TEXT-002, 30 V_ERRREC,
/5 TEXT-999, 30 V_SUCCREC.
LOOP AT IT_ERROR INTO WA_ERROR.
AT FIRST.
WRITE : 5 TEXT-002.
WRITE : /5 TEXT-005,20 TEXT-007.
ENDAT.
WRITE:/ WA_ERROR-LINENO,
WA_ERROR-MESSAGE.
ENDLOOP.
SKIP 2.
LOOP AT IT_SUCCESS INTO WA_SUCCESS.
AT FIRST.
WRITE : 5 TEXT-004.
WRITE : /5 TEXT-005,20 TEXT-006.
ENDAT.
WRITE:/5 WA_SUCCESS-LIFNR, 20 WA_SUCCESS-NAME1.
ENDLOOP.
&----
*& Form load_bdcdata
&----
FORM LOAD_BDCDATA .
PERFORM BDCDATA_APPEND USING : 'X' 'SAPMF02K' '0100',
' ' 'BDC_CURSOR' 'RF02K-KTOKK',
' ' 'BDC_OKCODE' '/00',
' ' 'RF02K-KTOKK' WA_FINAL-KTOKK,
'X' 'SAPMF02K' '0110',
' ' 'BDC_CURSOR' 'LFA1-PSTLZ',
' ' 'BDC_OKCODE' '=VW',
' ' 'LFA1-ANRED' WA_FINAL-ANRED,
' ' 'LFA1-NAME1' WA_FINAL-NAME1,
' ' 'LFA1-SORTL' WA_FINAL-SORTL,
' ' 'LFA1-PSTLZ' WA_FINAL-PSTLZ,
' ' 'LFA1-LAND1' WA_FINAL-LAND1,
'X' 'SAPMF02K' '0120',
' ' 'BDC_CURSOR' 'LFA1-KUNNR',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02K' '0130',
' ' 'BDC_CURSOR' 'LFBK-BANKN(01)',
' ' 'BDC_OKCODE' '=ENTR',
' ' 'LFBK-BANKS(01)' WA_FINAL-BANKS,
' ' 'LFBK-BANKL(01)' WA_FINAL-BANKL,
' ' 'LFBK-BANKN(01)' WA_FINAL-BANKN,
'X' 'SAPMF02K' '0130' ,
' ' 'BDC_CURSOR' 'LFBK-BANKS(01)',
' ' 'BDC_OKCODE' '=YES'.
ENDFORM. " LOAD_BDCDATA
&----
*& Form bdcdata_append
&----
FORM BDCDATA_APPEND USING P_FLAG
P_FNAM
P_FVAL.
IF P_FLAG = 'X'.
WA_BDCDATA-PROGRAM = P_FNAM.
WA_BDCDATA-DYNPRO = P_FVAL.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO IT_BDCDATA.
ELSEIF NOT P_FVAL IS INITIAL.
WA_BDCDATA-FNAM = P_FNAM.
WA_BDCDATA-FVAL = P_FVAL.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDIF.
CLEAR WA_BDCDATA.
ENDFORM. " bdcdata_append
Edited by: Chaithanya A on Mar 26, 2008 6:37 AM
‎2008 Mar 26 3:32 AM
Hi
check this program ..in this i have used session method to display the error records.....this is for vendor data uploading...
REPORT zmm_bdcp_assignment3 NO STANDARD PAGE HEADING
LINE-SIZE 255.
-
STRUCTURE DECLARATION
-
TYPES : BEGIN OF st_vendor,
ktokk TYPE rf02k-ktokk, "account group
anred TYPE lfa1-anred, "title
name1 TYPE lfa1-name1, "vendor name
sortl TYPE lfa1-sortl, "search term
pstlz TYPE lfa1-pstlz, "postal code
land1 TYPE lfa1-land1, "country
banks TYPE lfbk-banks,
bankl TYPE lfbk-bankl, "bank key
bankn TYPE lfbk-bankn, "account number
END OF st_vendor.
TYPES : BEGIN OF st_success,
lifnr TYPE lfa1-lifnr, "vendor number
name TYPE lfa1-name1, "vendor name
END OF st_success.
TYPES: BEGIN OF st_error,
linno TYPE i, "line number
message TYPE string, "error message
END OF st_error.
-
INTERNAL TABLE DECLARATIONS
WORK AREA DECLARATIONS
-
DATA : it_vendor TYPE STANDARD TABLE OF st_vendor,
wa_vendor TYPE st_vendor,
it_success TYPE STANDARD TABLE OF st_success,
wa_success TYPE st_success,
it_error TYPE STANDARD TABLE OF st_error,
wa_error TYPE st_error,
it_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,
it_message LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
-
DATA DECLARATION
-
DATA : v_file TYPE string,
v_tcode(4) VALUE 'XK01',
v_index LIKE sy-tabix,
v_totalrec TYPE i,
v_errrec TYPE i,
v_succrec TYPE i.
-
SELECTION SCREEN
-
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-010.
PARAMETERS p_mode LIKE ctu_params-dismode DEFAULT 'N' .
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
PARAMETERS p_update LIKE ctu_params-updmode DEFAULT 'S'.
"S: synchronously
"A: asynchronously
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-011.
PARAMETERS : p_group(12) DEFAULT '8907'. "group name for error session
SELECTION-SCREEN END OF BLOCK b3.
-
AT SELECTION SCREEN ON VALUE-REQUEST
-
AT SELECTION-SCREEN ON VALUE-REQUEST FOR 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
-
START-OF-SELECTION.
v_file = p_file.
*gui upload
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_vendor
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*loadind data into it_bdcdata
LOOP AT it_vendor INTO wa_vendor.
v_index = sy-tabix.
PERFORM load_bdcdata.
-
CALL TRANSACTION
-
CALL TRANSACTION v_tcode USING it_bdcdata
MODE p_mode
UPDATE p_update
MESSAGES INTO it_message.
*reading success
IF sy-subrc = 0.
READ TABLE it_message WITH KEY msgtyp = 'S'.
IF sy-subrc = 0.
wa_success-lifnr = it_message-msgv1.
wa_success-name = wa_vendor-name1.
APPEND wa_success TO it_success.
ENDIF.
ELSE.
*reading errors
READ TABLE it_message WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = sy-msgid
no = it_message-msgnr
v1 = it_message-msgv1
v2 = it_message-msgv2
v3 = it_message-msgv3
v4 = it_message-msgv4
IMPORTING
msg = wa_error-message.
wa_error-linno = v_index.
APPEND wa_error TO it_error.
CLEAR wa_error.
ENDIF.
*session opening
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = p_group
holddate = sy-datum
keep = 'X'
user = sy-uname.
*inserting into session
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'XK01'
TABLES
dynprotab = it_bdcdata.
*closing session
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDIF.
CLEAR: it_bdcdata, it_message.
REFRESH: it_bdcdata, it_message.
ENDLOOP.
-
SUMMARY DISPLAY
-
DESCRIBE TABLE it_vendor LINES v_totalrec.
DESCRIBE TABLE it_error LINES v_errrec.
v_succrec = v_totalrec - v_errrec .
WRITE : /1 text-004 COLOR 1.
WRITE : /2 'Total Records Processed :', 25 v_totalrec,
/2 'Error Records :', 25 v_errrec,
/2 'Successful Records :', 25 v_succrec.
SKIP 2.
WRITE : /1 text-005 COLOR 1.
LOOP AT it_error INTO wa_error.
WRITE:/2 wa_error-linno,
wa_error-message.
ENDLOOP.
SKIP 2.
WRITE : /1 text-009 COLOR 1.
ULINE AT : /2(46).
WRITE :/2 sy-vline ,(10) 'VENDOR NUM' , 15 sy-vline , 17 'VENDOR NAME' , 47 sy-vline.
ULINE AT : /2(46).
LOOP AT it_success INTO wa_success.
WRITE:/2 sy-vline , wa_success-lifnr, 15 sy-vline , 17 wa_success-name , 47 sy-vline.
ENDLOOP.
ULINE AT : /2(46).
&----
*& Form append_bdcdata
&----
FORM append_bdcdata USING p_flag p_fname p_fval.
CLEAR it_bdcdata.
IF p_flag = 'X'.
it_bdcdata-program = p_fname.
it_bdcdata-dynpro = p_fval.
it_bdcdata-dynbegin = 'X'.
APPEND it_bdcdata.
ELSEIF NOT p_fval IS INITIAL.
it_bdcdata-fnam = p_fname.
it_bdcdata-fval = p_fval.
APPEND it_bdcdata.
ENDIF.
ENDFORM. "append_bdcdata
&----
*& Form load_bdcdata
&----
FORM load_bdcdata .
PERFORM append_bdcdata USING : 'X' 'SAPMF02K' '0100',
' ' 'BDC_OKCODE' '/00',
' ' 'RF02K-KTOKK' wa_vendor-ktokk,
'X' 'SAPMF02K' '0110',
' ' 'BDC_OKCODE' '/00',
' ' 'LFA1-ANRED' wa_vendor-anred,
' ' 'LFA1-NAME1' wa_vendor-name1,
' ' 'LFA1-SORTL' wa_vendor-sortl,
' ' 'LFA1-PSTLZ' wa_vendor-pstlz,
' ' 'LFA1-LAND1' wa_vendor-land1,
'X' 'SAPMF02K' '0120',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02K' '0130',
' ' 'BDC_OKCODE' '=ENTR',
' ' 'LFBK-BANKS(01)' wa_vendor-banks,
' ' 'LFBK-BANKL(01)' wa_vendor-bankl,
' ' 'LFBK-BANKN(01)' wa_vendor-bankn,
'X' 'SAPMF02K' '0130',
' ' 'BDC_OKCODE' '=ENTR',
'X' 'SAPLSPO1' '0300',
' ' 'BDC_OKCODE' '=YES'.
ENDFORM. " load_bdcdata