Вы находитесь на странице: 1из 13

BDC - Session Method

BDC (Batch Data Communication):


It Transfers or upload the datas(records) from Legacy(Non SAP) system to
SAP system.
Batch input means bulk amount of data. It is a programming method.
Types: It has two types
1. CALL TRANSACTION METHOD.
2. SESSION METHOD (C L A S S I C A L ) .

Session Method:
1. Asynchronous Processing.
2. Synchronous database updates.
3. Transfer of data for multiple transactions. Using FM bdc_insert.
4. As compared to call transaction, this is slow.
5. Best suited for bulk transfer.
6. Automatic error handling.
7. Error logs are created.
8. The value of sy-subrc is never returned. Because records are stored temporary
in session and after the records are updated to the database.
9. You can store the sessions and it can be used for later
processing.
10. it can handle small amount of
data as well as large amount of data.
11. Function modules :
F4_FILENAME ( Open the legacy file [.txt or .xls]) .
TEXT_CONVERT_XSL_TO_SAP ( Convert the .xls file to sap format) : Using
for only .xls files.
GUI_UPLOAD : Using for only .txt files.
BDC_OPEN_GROUP : To create a new session.(No session 1).
BDC_INSERT : To add a transaction to a batch input session.
BDC_CLOSE_GROUP : To close the session.
Example 1: Session method ( .txt file) Customer(xd01) master creation:
report ZRBDC_XD01_RAJA no standard page heading line-size 255.
*include bdcrecx1.
data: begin of record OCCURS 0,
* data element: BUKRS
BUKRS_001(004),

* data element: KTOKD


KTOKD_002(004),
* data element: ANRED
ANRED_003(015),
* data element: NAME1_GP
NAME1_004(035),
* data element: SORTL
SORTL_005(010),
* data element: ORT01_GP
ORT01_006(035),
* data element: PSTLZ
PSTLZ_007(010),
* data element: LAND1_GP
LAND1_008(003),
* data element: REGIO
REGIO_009(003),
* data element: SPRAS
SPRAS_010(002),
* data element: CIVVE
CIVVE_011(001),
* data element: AKONT
AKONT_012(010),
end of record.
***************GLOBAL STR BDCDATA***********************
DATA: IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
WA_BDCDATA TYPE BDCDATA.
DATA: FILE1 TYPE STRING.
********************************************************
******************UPLOAD FLAT FILE**********************
******************SELECTION SCREEN**********************
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: FILE TYPE LOCALFILE OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE.
**********************************************************
******************FUNCTION MODULE************************
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME
= SYST-CPROG
DYNPRO_NUMBER
= SYST-DYNNR
* FIELD_NAME
=''

IMPORTING
FILE_NAME

= FILE.

FILE1 = FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename
= FILE1
FILETYPE
= 'ASC'
HAS_FIELD_SEPARATOR
= 'X'
* HEADER_LENGTH
=0
* READ_BY_LINE
= 'X'
* DAT_MODE
=''
* IMPORTING
* FILELENGTH
=
* HEADER
=
tables
data_tab
= RECORD
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.
***************************************************
**************OPEN SESSION*************************
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT
= SY-MANDT
* DEST
= FILLER8
GROUP
= 'demo'
"LOGON USERNAME
* HOLDDATE
= FILLER8
KEEP
= 'X'
USER
= SY-UNAME

* RECORD
= FILLER1
* PROG
= SY-CPROG
* IMPORTING
* QID
=
EXCEPTIONS
CLIENT_INVALID
=1
DESTINATION_INVALID
=2
GROUP_INVALID
=3
GROUP_IS_LOCKED
=4
HOLDDATE_INVALID
=5
INTERNAL_ERROR
=6
QUEUE_ERROR
=7
RUNNING
=8
SYSTEM_LOCK_ERROR
=9
USER_INVALID
= 10
OTHERS
= 11
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*** End generated data section ***
start-of-selection.
*perform open_group.
LOOP AT RECORD.
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field

using 'SAPMF02D' '0100'.


using 'BDC_CURSOR'
'RF02D-KTOKD'.
using 'BDC_OKCODE'
'/00'.
using 'RF02D-BUKRS'
record-BUKRS_001.
using 'RF02D-KTOKD'
record-KTOKD_002.
using 'SAPMF02D' '0110'.
using 'BDC_CURSOR'
'KNA1-SPRAS'.
using 'BDC_OKCODE'
'/00'.
using 'KNA1-ANRED'
record-ANRED_003.
using 'KNA1-NAME1'
record-NAME1_004.
using 'KNA1-SORTL'
record-SORTL_005.
using 'KNA1-ORT01'
record-ORT01_006.
using 'KNA1-PSTLZ'

perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro

record-PSTLZ_007.
using 'KNA1-LAND1'
record-LAND1_008.
using 'KNA1-REGIO'
record-REGIO_009.
using 'KNA1-SPRAS'
record-SPRAS_010.
using 'SAPMF02D' '0120'.
using 'BDC_CURSOR'
'KNA1-LIFNR'.
using 'BDC_OKCODE'
'/00'.
using 'SAPMF02D' '0125'.
using 'BDC_CURSOR'
'KNA1-NIELS'.
using 'BDC_OKCODE'
'/00'.
using 'SAPMF02D' '0130'.
using 'BDC_CURSOR'
'KNBK-BANKS(01)'.
using 'BDC_OKCODE'
'=ENTR'.
using 'SAPMF02D' '0340'.
using 'BDC_CURSOR'
'RF02D-KUNNR'.
using 'BDC_OKCODE'
'=ENTR'.
using 'SAPMF02D' '0370'.
using 'BDC_CURSOR'
'RF02D-KUNNR'.
using 'BDC_OKCODE'
'=ENTR'.
using 'KNA1-CIVVE'
record-CIVVE_011.
using 'SAPMF02D' '0360'.
using 'BDC_CURSOR'
'KNVK-NAMEV(01)'.
using 'BDC_OKCODE'
'=ENTR'.
using 'SAPMF02D' '0210'.
using 'BDC_CURSOR'
'KNB1-AKONT'.
using 'BDC_OKCODE'
'/00'.
using 'KNB1-AKONT'
record-AKONT_012.
using 'SAPMF02D' '0215'.
using 'BDC_CURSOR'
'KNB1-ZTERM'.
using 'BDC_OKCODE'
'/00'.
using 'SAPMF02D' '0220'.

perform bdc_field

using 'BDC_CURSOR'
'KNB5-MAHNA'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro
using 'SAPMF02D' '0230'.
perform bdc_field
using 'BDC_CURSOR'
'KNB1-VRSNR'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
*perform bdc_transaction using 'XD01'.

*****************************************************
****************USE BDC INSERT FM***********************
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= 'XD01'
* POST_LOCAL
= NOVBLOCAL
* PRINTING
= NOPRINT
* SIMUBATCH
=''
* CTUPARAMS
=''
TABLES
dynprotab
= IT_BDCDATA[]
EXCEPTIONS
INTERNAL_ERROR
=1
NOT_OPEN
=2
QUEUE_ERROR
=3
TCODE_INVALID
=4
PRINTING_INVALID
=5
POSTING_INVALID
=6
OTHERS
=7
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
refresh it_bdcdata.
ENDLOOP.
************************************************************
*perform close_group.
******************CALL SESSION CLOSE FM*********************
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN
=1
QUEUE_ERROR
=2
OTHERS
=3
.
IF sy-subrc <> 0.

WRITE:'SESSION CREATED go to sm35'.


* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
************************************************************
************FORM BDC_DYPRO**********************************
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR WA_BDCDATA.
WA_BDCDATA-PROGRAM = PROGRAM.
WA_BDCDATA-DYNPRO = DYNPRO.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDFORM.
************************************************************
*****************FORM BDC_FIELDS**************************
FORM BDC_FIELD USING FNAM FVAL.
CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = FNAM.
WA_BDCDATA-FVAL = FVAL.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDFORM.
************************************************************

record: (.txt file):


1000 YB01
19103103
1000 YB01
19103103

mr

RAJA50 IN

NAGERCOIL

629401

IN

18

EN

mr

RAJA51 IN

NAGERCOIL

629401

IN

18

EN

Example 2: Session method ( .xls file) Customer(xd01) master creation:


report ZRBDC_XD01_RAJA no standard page heading line-size 255.
*include bdcrecx1.
TYPE-POOLS TRUXS. This is use to data conversion in TEXT_CONVERT_XLS_TO_SAP.
data: begin of record OCCURS 0,

* data element: BUKRS


BUKRS_001(004),
* data element: KTOKD
KTOKD_002(004),
* data element: ANRED
ANRED_003(015),
* data element: NAME1_GP
NAME1_004(035),
* data element: SORTL
SORTL_005(010),
* data element: ORT01_GP
ORT01_006(035),
* data element: PSTLZ
PSTLZ_007(010),
* data element: LAND1_GP
LAND1_008(003),
* data element: REGIO
REGIO_009(003),
* data element: SPRAS
SPRAS_010(002),
* data element: CIVVE
CIVVE_011(001),
* data element: AKONT
AKONT_012(010),
end of record.
***************GLOBAL STR BDCDATA***********************
DATA: IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA,
WA_BDCDATA TYPE BDCDATA.
********************************************************
******************UPLOAD FLAT FILE**********************
******************SELECTION SCREEN**********************
DATA IT_RAW TYPE TRUXS_T_TEXT_DATA.
PARAMETERS PATH TYPE RLGRAP-FILENAME OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR PATH.
**********************************************************
******************FUNCTION MODULE************************
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME
= SYST-CPROG
DYNPRO_NUMBER
= SYST-DYNNR
FIELD_NAME
= 'path'
IMPORTING
FILE_NAME
= path.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING

* I_FIELD_SEPERATOR
=
* I_LINE_HEADER
=
I_TAB_RAW_DATA
= IT_RAW
I_FILENAME
= PATH
TABLES
I_TAB_CONVERTED_DATA
= RECORD
* EXCEPTIONS
* CONVERSION_FAILED
=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.
***************************************************
**************OPEN SESSION*************************
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT
= SY-MANDT
* DEST
= FILLER8
GROUP
= 'demo'
"LOGON USERNAME
* HOLDDATE
= FILLER8
KEEP
= 'X'
USER
= SY-UNAME
* RECORD
= FILLER1
* PROG
= SY-CPROG
* IMPORTING
* QID
=
EXCEPTIONS
CLIENT_INVALID
=1
DESTINATION_INVALID
=2
GROUP_INVALID
=3
GROUP_IS_LOCKED
=4
HOLDDATE_INVALID
=5
INTERNAL_ERROR
=6
QUEUE_ERROR
=7
RUNNING
=8
SYSTEM_LOCK_ERROR
=9
USER_INVALID
= 10
OTHERS
= 11
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*** End generated data section ***
start-of-selection.
*perform open_group.

LOOP AT RECORD.
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field

using 'SAPMF02D' '0100'.


using 'BDC_CURSOR'
'RF02D-KTOKD'.
using 'BDC_OKCODE'
'/00'.
using 'RF02D-BUKRS'
record-BUKRS_001.
using 'RF02D-KTOKD'
record-KTOKD_002.
using 'SAPMF02D' '0110'.
using 'BDC_CURSOR'
'KNA1-SPRAS'.
using 'BDC_OKCODE'
'/00'.
using 'KNA1-ANRED'
record-ANRED_003.
using 'KNA1-NAME1'
record-NAME1_004.
using 'KNA1-SORTL'
record-SORTL_005.
using 'KNA1-ORT01'
record-ORT01_006.
using 'KNA1-PSTLZ'
record-PSTLZ_007.
using 'KNA1-LAND1'
record-LAND1_008.
using 'KNA1-REGIO'
record-REGIO_009.
using 'KNA1-SPRAS'
record-SPRAS_010.
using 'SAPMF02D' '0120'.
using 'BDC_CURSOR'
'KNA1-LIFNR'.
using 'BDC_OKCODE'
'/00'.
using 'SAPMF02D' '0125'.
using 'BDC_CURSOR'
'KNA1-NIELS'.
using 'BDC_OKCODE'
'/00'.
using 'SAPMF02D' '0130'.
using 'BDC_CURSOR'
'KNBK-BANKS(01)'.
using 'BDC_OKCODE'
'=ENTR'.
using 'SAPMF02D' '0340'.
using 'BDC_CURSOR'
'RF02D-KUNNR'.
using 'BDC_OKCODE'

'=ENTR'.
using 'SAPMF02D' '0370'.
using 'BDC_CURSOR'
'RF02D-KUNNR'.
perform bdc_field
using 'BDC_OKCODE'
'=ENTR'.
perform bdc_field
using 'KNA1-CIVVE'
record-CIVVE_011.
perform bdc_dynpro
using 'SAPMF02D' '0360'.
perform bdc_field
using 'BDC_CURSOR'
'KNVK-NAMEV(01)'.
perform bdc_field
using 'BDC_OKCODE'
'=ENTR'.
perform bdc_dynpro
using 'SAPMF02D' '0210'.
perform bdc_field
using 'BDC_CURSOR'
'KNB1-AKONT'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_field
using 'KNB1-AKONT'
record-AKONT_012.
perform bdc_dynpro
using 'SAPMF02D' '0215'.
perform bdc_field
using 'BDC_CURSOR'
'KNB1-ZTERM'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro
using 'SAPMF02D' '0220'.
perform bdc_field
using 'BDC_CURSOR'
'KNB5-MAHNA'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro
using 'SAPMF02D' '0230'.
perform bdc_field
using 'BDC_CURSOR'
'KNB1-VRSNR'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
*perform bdc_transaction using 'XD01'.
perform bdc_dynpro
perform bdc_field

*****************************************************
****************USE BDC INSERT FM***********************
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= 'XD01'
* POST_LOCAL
= NOVBLOCAL
* PRINTING
= NOPRINT
* SIMUBATCH
=''
* CTUPARAMS
=''
TABLES
dynprotab
= IT_BDCDATA[]
EXCEPTIONS
INTERNAL_ERROR
=1

NOT_OPEN
=2
QUEUE_ERROR
=3
TCODE_INVALID
=4
PRINTING_INVALID
=5
POSTING_INVALID
=6
OTHERS
=7
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
refresh it_bdcdata.
ENDLOOP.
************************************************************
*perform close_group.
******************CALL SESSION CLOSE FM*********************
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN
=1
QUEUE_ERROR
=2
OTHERS
=3
.
IF sy-subrc <> 0.
WRITE:'SESSION CREATED go to sm35'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
************************************************************
************FORM BDC_DYPRO**********************************
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR WA_BDCDATA.
WA_BDCDATA-PROGRAM = PROGRAM.
WA_BDCDATA-DYNPRO = DYNPRO.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDFORM.
************************************************************
*****************FORM BDC_FIELDS**************************
FORM BDC_FIELD USING FNAM FVAL.

CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = FNAM.
WA_BDCDATA-FVAL = FVAL.
APPEND WA_BDCDATA TO IT_BDCDATA.
ENDFORM.
************************************************************

record: (.txt file):


1000 YB01
19103103
1000 YB01
19103103

mr

RAJA50 IN

NAGERCOIL

629401

IN

18

EN

mr

RAJA51 IN

NAGERCOIL

629401

IN

18

EN

Вам также может понравиться