This Blog provides an overview of BDC (Batch Data Communication) using the Session Method. BDC is a classic data migration technique in SAP. The Session Method is suitable for large volumes of data and allows better error handling
For Recording the Transaction T code: SHDB
Batch Input Sessions: SM35
1.Session Method
REPORT ZBDC_SESSIONMETHOD_MA.
“Type declaration for customer structure
TYPES: BEGIN OF ty_customer,
kunnr TYPE kunnr, ” Customer Number
name1 TYPE name1_gp, ” Name
ort01 TYPE ort01, ” City
END OF ty_customer.
“Internal tables and variables
DATA: it_customer TYPE TABLE OF ty_customer, ” Internal table to hold customer data
wa_customer TYPE ty_customer, ” Work area
it_bdcdata TYPE TABLE OF bdcdata, ” BDC table
wa_bdcdata TYPE bdcdata, ” BDC work area
v_file TYPE string. ” File path variable
DATA: p_pp TYPE string. ” Temporary file path variable
“BDC session name (used in SM35)
DATA: lv_group TYPE apqi-groupid VALUE ‘ZCUS_UPLOAD’.
“Selection screen to get file path input
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY.
“AT SELECTION SCREEN: F4 help to choose file
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION ‘F4_FILENAME’
IMPORTING file_name = p_file.
“START OF SELECTION
START-OF-SELECTION.
“Move user-selected file to internal variable
p_pp = p_file.
“Upload flat file with customer data
CALL FUNCTION ‘GUI_UPLOAD’
EXPORTING
filename = p_pp
filetype = ‘ASC’
has_field_separator = ‘|’ ” Pipe delimiter
TABLES
data_tab = it_customer.
“Check if file has data
IF it_customer IS INITIAL.
WRITE: / ‘No data found in file.’.
EXIT.
ENDIF.
“Open BDC session
CALL FUNCTION ‘BDC_OPEN_GROUP’
EXPORTING
client = sy-mandt
group = lv_group
user = sy-uname
keep = ‘X’ ” Keep session after execution
holddate = sy-datum. ” Process date
“Loop through uploaded customer data
LOOP AT it_customer INTO wa_customer.
CLEAR it_bdcdata.
“First screen entries
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_ORT01’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=ONLI’.
PERFORM bdc_field USING ‘P_KUNNR’ wa_customer-kunnr.
PERFORM bdc_field USING ‘P_NAME’ wa_customer-name1.
PERFORM bdc_field USING ‘P_ORT01’ wa_customer-ort01.
“Exit screen to return
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘/EE’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_KUNNR’.
“Insert transaction step into the BDC session
CALL FUNCTION ‘BDC_INSERT’
EXPORTING tcode = ‘ZBDC_CUS’
TABLES dynprotab = it_bdcdata.
ENDLOOP.
“Close the BDC session
CALL FUNCTION ‘BDC_CLOSE_GROUP’.
“Success message
WRITE: / ‘BDC Session created successfully. Use SM35 to process it.’.
“—————————————–
” Subroutine to add dynpro screen
“—————————————–
FORM bdc_dynpro USING program screen.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = screen.
wa_bdcdata-dynbegin = ‘X’.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.
“—————————————–
” Subroutine to add field values
“—————————————–
FORM bdc_field USING fnam fval.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.
After execute go to Sm35
2.Call Transaction Method
REPORT ZBDC_CALLTRAN_CUSTOMER.
“— Structure Definition —
TYPES: BEGIN OF ty_customer,
kunnr TYPE kunnr, ” Customer Number
name1 TYPE name1_gp, ” Name
ort01 TYPE ort01, ” City
END OF ty_customer.
“— Data Declarations —
DATA: p_file_s TYPE string, ” To hold the selected file path
it_customer TYPE TABLE OF ty_customer, ” Internal table for uploaded data
wa_customer TYPE ty_customer, ” Work area for one record
it_bdcdata TYPE TABLE OF bdcdata, ” BDC data table
wa_bdcdata TYPE bdcdata. ” BDC line
“— File Input Parameter —
PARAMETERS: p_file TYPE IBIPPARMS-PATH OBLIGATORY.
“— F4 Help for File Selection —
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION ‘F4_FILENAME’
IMPORTING
file_name = p_file.
“— Main Program Execution —
START-OF-SELECTION.
” Assign selected file to variable
p_file_s = p_file.
” Upload the customer data from text file
CALL FUNCTION ‘GUI_UPLOAD’
EXPORTING
filename = p_file_s
filetype = ‘ASC’
has_field_separator = ‘|’ ” Data separated by ‘|’
TABLES
data_tab = it_customer
EXCEPTIONS
OTHERS = 1.
” Loop over each uploaded customer record
LOOP AT it_customer INTO wa_customer.
” Clear previous BDC data
CLEAR it_bdcdata[].
” Build BDC data for screen input
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_ORT01’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=ONLI’. ” Press Enter
PERFORM bdc_field USING ‘P_KUNNR’ wa_customer-KUNNR.
PERFORM bdc_field USING ‘P_NAME’ wa_customer-NAME1.
PERFORM bdc_field USING ‘P_ORT01’ wa_customer-ORT01.
” Optionally simulate pressing Exit or Back
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘/EE’. ” Exit
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_KUNNR’.
” Call transaction with built BDC data in background mode
CALL TRANSACTION ‘ZBDC_CUS’ USING it_bdcdata
MODE ‘N’ ” ‘N’ – Background, ‘A’ – Foreground, ‘E’ – Errors only
UPDATE ‘S’. ” Synchronous update
ENDLOOP.
“— Subroutine to declare dynpro screen —
FORM bdc_dynpro USING program screen.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = screen.
wa_bdcdata-dynbegin = ‘X’.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.
“— Subroutine to assign value to a field —
FORM bdc_field USING fnam fval.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.
3. Difference Between CALL TRANSACTION and SESSION METHOD
AspectCALL TRANSACTIONSESSION METHODExecutionImmediateDeferred via SM35Error HandlingManual/Error logSM35 Session logPerformanceFaster, suitable for small dataBetter for large volumesModeForeground/Background/No DisplayProcesses in backgroundData VolumeLimitedHandles large volumes efficiently
This Blog provides an overview of BDC (Batch Data Communication) using the Session Method. BDC is a classic data migration technique in SAP. The Session Method is suitable for large volumes of data and allows better error handlingFor Recording the Transaction T code: SHDBBatch Input Sessions: SM351.Session MethodREPORT ZBDC_SESSIONMETHOD_MA.
“Type declaration for customer structure
TYPES: BEGIN OF ty_customer,
kunnr TYPE kunnr, ” Customer Number
name1 TYPE name1_gp, ” Name
ort01 TYPE ort01, ” City
END OF ty_customer.
“Internal tables and variables
DATA: it_customer TYPE TABLE OF ty_customer, ” Internal table to hold customer data
wa_customer TYPE ty_customer, ” Work area
it_bdcdata TYPE TABLE OF bdcdata, ” BDC table
wa_bdcdata TYPE bdcdata, ” BDC work area
v_file TYPE string. ” File path variable
DATA: p_pp TYPE string. ” Temporary file path variable
“BDC session name (used in SM35)
DATA: lv_group TYPE apqi-groupid VALUE ‘ZCUS_UPLOAD’.
“Selection screen to get file path input
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY.
“AT SELECTION SCREEN: F4 help to choose file
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION ‘F4_FILENAME’
IMPORTING file_name = p_file.
“START OF SELECTION
START-OF-SELECTION.
“Move user-selected file to internal variable
p_pp = p_file.
“Upload flat file with customer data
CALL FUNCTION ‘GUI_UPLOAD’
EXPORTING
filename = p_pp
filetype = ‘ASC’
has_field_separator = ‘|’ ” Pipe delimiter
TABLES
data_tab = it_customer.
“Check if file has data
IF it_customer IS INITIAL.
WRITE: / ‘No data found in file.’.
EXIT.
ENDIF.
“Open BDC session
CALL FUNCTION ‘BDC_OPEN_GROUP’
EXPORTING
client = sy-mandt
group = lv_group
user = sy-uname
keep = ‘X’ ” Keep session after execution
holddate = sy-datum. ” Process date
“Loop through uploaded customer data
LOOP AT it_customer INTO wa_customer.
CLEAR it_bdcdata.
“First screen entries
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_ORT01’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=ONLI’.
PERFORM bdc_field USING ‘P_KUNNR’ wa_customer-kunnr.
PERFORM bdc_field USING ‘P_NAME’ wa_customer-name1.
PERFORM bdc_field USING ‘P_ORT01’ wa_customer-ort01.
“Exit screen to return
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘/EE’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_KUNNR’.
“Insert transaction step into the BDC session
CALL FUNCTION ‘BDC_INSERT’
EXPORTING tcode = ‘ZBDC_CUS’
TABLES dynprotab = it_bdcdata.
ENDLOOP.
“Close the BDC session
CALL FUNCTION ‘BDC_CLOSE_GROUP’.
“Success message
WRITE: / ‘BDC Session created successfully. Use SM35 to process it.’.
“—————————————–
” Subroutine to add dynpro screen
“—————————————–
FORM bdc_dynpro USING program screen.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = screen.
wa_bdcdata-dynbegin = ‘X’.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.
“—————————————–
” Subroutine to add field values
“—————————————–
FORM bdc_field USING fnam fval.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. After execute go to Sm35 2.Call Transaction MethodREPORT ZBDC_CALLTRAN_CUSTOMER.
“— Structure Definition —
TYPES: BEGIN OF ty_customer,
kunnr TYPE kunnr, ” Customer Number
name1 TYPE name1_gp, ” Name
ort01 TYPE ort01, ” City
END OF ty_customer.
“— Data Declarations —
DATA: p_file_s TYPE string, ” To hold the selected file path
it_customer TYPE TABLE OF ty_customer, ” Internal table for uploaded data
wa_customer TYPE ty_customer, ” Work area for one record
it_bdcdata TYPE TABLE OF bdcdata, ” BDC data table
wa_bdcdata TYPE bdcdata. ” BDC line
“— File Input Parameter —
PARAMETERS: p_file TYPE IBIPPARMS-PATH OBLIGATORY.
“— F4 Help for File Selection —
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION ‘F4_FILENAME’
IMPORTING
file_name = p_file.
“— Main Program Execution —
START-OF-SELECTION.
” Assign selected file to variable
p_file_s = p_file.
” Upload the customer data from text file
CALL FUNCTION ‘GUI_UPLOAD’
EXPORTING
filename = p_file_s
filetype = ‘ASC’
has_field_separator = ‘|’ ” Data separated by ‘|’
TABLES
data_tab = it_customer
EXCEPTIONS
OTHERS = 1.
” Loop over each uploaded customer record
LOOP AT it_customer INTO wa_customer.
” Clear previous BDC data
CLEAR it_bdcdata[].
” Build BDC data for screen input
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_ORT01’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=ONLI’. ” Press Enter
PERFORM bdc_field USING ‘P_KUNNR’ wa_customer-KUNNR.
PERFORM bdc_field USING ‘P_NAME’ wa_customer-NAME1.
PERFORM bdc_field USING ‘P_ORT01’ wa_customer-ORT01.
” Optionally simulate pressing Exit or Back
PERFORM bdc_dynpro USING ‘ZBDC_SCREEN’ ‘1000’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘/EE’. ” Exit
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘P_KUNNR’.
” Call transaction with built BDC data in background mode
CALL TRANSACTION ‘ZBDC_CUS’ USING it_bdcdata
MODE ‘N’ ” ‘N’ – Background, ‘A’ – Foreground, ‘E’ – Errors only
UPDATE ‘S’. ” Synchronous update
ENDLOOP.
“— Subroutine to declare dynpro screen —
FORM bdc_dynpro USING program screen.
CLEAR wa_bdcdata.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = screen.
wa_bdcdata-dynbegin = ‘X’.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.
“— Subroutine to assign value to a field —
FORM bdc_field USING fnam fval.
CLEAR wa_bdcdata.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.3. Difference Between CALL TRANSACTION and SESSION METHODAspectCALL TRANSACTIONSESSION METHODExecutionImmediateDeferred via SM35Error HandlingManual/Error logSM35 Session logPerformanceFaster, suitable for small dataBetter for large volumesModeForeground/Background/No DisplayProcesses in backgroundData VolumeLimitedHandles large volumes efficiently Read More Technology Blog Posts by Members articles
#SAP
#SAPTechnologyblog