Search this site

Friday, March 30, 2012

BDC example in ABAP ?

Here example of source code run BDC to update the logon language of a user from a file contains user language infomation.

Input file: input.txt
user01 FR
user02 EN

*&---------------------------------------------------------------------*
*& Report ZDEMO_UPDATE_SU01
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZDEMO_UPDATE_SU01.
*----------------------------------------------------------------------*
* data definition
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
TABLES: T100.
DATA: BEGIN OF ST_RECORD,
BNAME TYPE USR02-BNAME,
LANGU(2) TYPE C,
END OF ST_RECORD.
DATA: GT_UPLOAD LIKE TABLE OF ST_RECORD,
GS_UPLOAD LIKE ST_RECORD.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS P_FILE TYPE RLGRAP-FILENAME OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM F4_SELECTFILE.

INITIALIZATION.

START-OF-SELECTION.
PERFORM UPLOAD_DATA.
LOOP AT GT_UPLOAD INTO GS_UPLOAD.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0050'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'USR02-BNAME'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=CHAN'.
PERFORM BDC_FIELD USING 'USR02-BNAME'
GS_UPLOAD-BNAME.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=DEFA'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'SZA5_D0700-TITLE_MEDI'.
PERFORM BDC_DYNPRO USING 'SAPLSUU5' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=UPD'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'USDEFAULTS-START_MENU'.
PERFORM BDC_FIELD USING 'USDEFAULTS-LANGU'
GS_UPLOAD-LANGU.
PERFORM BDC_TRANSACTION USING 'SU01'.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
DATA: L_FILE TYPE STRING.
L_FILE = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = GT_UPLOAD
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.
ENDFORM. " UPLOAD_DATA
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO

*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM. "BDC_FIELD
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
DATA: L_MSTRING(480).
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE 'N'
UPDATE 'S'
MESSAGES INTO MESSTAB.

LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).
ELSE.
WRITE: / MESSTAB.
ENDIF.
ENDLOOP.
SKIP.
REFRESH BDCDATA.
ENDFORM. "BDC_TRANSACTION
*&---------------------------------------------------------------------*
*& Form F4_SELECTFILE
*&---------------------------------------------------------------------*
FORM F4_SELECTFILE .
CALL FUNCTION 'NAVIGATION_FILENAME_HELP'
EXPORTING
DEFAULT_PATH = 'TEST.TXT'
IMPORTING
SELECTED_FILENAME = P_FILE.
MOVE P_FILE TO P_FILE.
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. " F4_SELECTFILE

No comments:

Post a Comment