Technology Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
manijangiti
Participant
4,846

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.
 

manijangiti_1-1751363036602.png

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 METHOD
ExecutionImmediateDeferred via SM35
Error HandlingManual/Error logSM35 Session log
PerformanceFaster, suitable for small dataBetter for large volumes
ModeForeground/Background/No DisplayProcesses in background
Data VolumeLimitedHandles large volumes efficiently








2 Comments