Understanding Session Method in BDC: SAP ABAP

BDC basically checks and validates eac field screen by screen and that’s why it takes timeBDC basically checks and validates eac field screen by screen and that’s why it takes time
Even though 60% of the BAPI’s use BDC in their backend


CALL METHOD
Synchronous processing – until the data is successfully processed it won’t process the next record.  call transaction follows synchronous proessing call transaction uploads one by one.
synchronous and asynchronous database updates.
control can be provided to database via a statement called update.

SESSION METHOD
at one go synchronous database update multiple transaction data can be transferred
in session method as the name suggests we have to crate sessions. let us say we want to update 10000 customers at a single go so we will create a session which will take 1000 customers at one go and hence 10 such sessions will be required which is part of a session group which we need to create.


Transaction to create session – SM35
Handling errors in SM35
To process the generated session automatically – RSBDCSUB


To process this automatically job open job submit and job close directly write in the program

submit RSBDCSUB using selection screen 1000 with mappe = ‘session_name’ with von = sy-datum with bis = sy-datum and return.

Here is a sample program

&———————————————————————*
*& Report  ZTEST_PROGRAM_BDC
*&
*&———————————————————————*
*&
*&
*&———————————————————————*

INCLUDE ztest_program_bdc_top_session.
*INCLUDE ZTEST_PROGRAM_BDC_TOP                   .    ” global Data

* INCLUDE ZTEST_PROGRAM_BDC_O01                   .  ” PBO-Modules
* INCLUDE ZTEST_PROGRAM_BDC_I01                   .  ” PAI-Modules
INCLUDE ztest_program_bdc_f01_session.
* INCLUDE ZTEST_PROGRAM_BDC_F01                   .  ” FORM-Routines

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION ‘f4_filename’
    EXPORTING
      program_name  = syst–cprog
      dynpro_number = syst–dynnr
      field_name    = ‘p_file’
    IMPORTING
      file_name     = p_file.
  BREAK-POINT.
  PERFORM get_data.

  IF it_final IS NOT INITIAL.
    IF r_1 = ‘x’.
      PERFORM f_call_bdc.
    ELSE.
      PERFORM f_session_bdc.
    ENDIF.

  ENDIF.

*&———————————————————————*
*& Include ZTEST_PROGRAM_BDC_TOP                             Report ZTEST_PROGRAM_BDC
*&
*&———————————————————————*

  REPORT ztest_program_bdc.

  TYPE-POOLS : truxs.

  PARAMETERS : r_1 RADIOBUTTON GROUP rg1 DEFAULT ‘x’,
               r_2 RADIOBUTTON GROUP rg1.

  PARAMETERS : p_file TYPE rlgrap–filename.

  TYPES : BEGIN OF ty_final,
            kunnr TYPE kunnr,
            bukrs TYPE bukrs,
            ktokd TYPE ktokd,
            anred TYPE anred,
            name1 TYPE name1,
            stras TYPE stras,
            ort01 TYPE ort01,
            pstlz TYPE pstlz,
            land1 TYPE land1,
            spras TYPE spras,
          END OF ty_final.

  DATA  : it_final   TYPE TABLE OF ty_final,
          wa_final   TYPE          ty_final,
          it_raw     TYPE truxs_t_text_data,
          it_bdcdata TYPE TABLE OF bdcdata,
          wa_bdcdata TYPE          bdcdata,
          it_msg     TYPE TABLE OF bdcmsgcoll,
          wa_msg     TYPE          bdcmsgcoll,
          it_msg1    TYPE TABLE OF bdcmsgcoll,
          wa_msg1    TYPE          bdcmsgcoll.

*&———————————————————————*
*&  Include           ZTEST_PROGRAM_BDC_F01
*&———————————————————————*
*&———————————————————————*
*&      Form  GET_DATA
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM get_data .

  CALL FUNCTION ‘text_convert_xls_to_sap’
    EXPORTING
*     I_FIELD_SEPERATOR    =
*     I_LINE_HEADER        =
      i_tab_raw_data       = it_raw
      i_filename           = p_file
    TABLES
      i_tab_converted_data = it_final
* EXCEPTIONS
*     CONVERSION_FAILED    = 1
*     OTHERS               = 2
    .
  IF sy–subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    ” get_data
*&———————————————————————*
*&      Form  F_CALL_BDC
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form f_call_bdc .

LOOP AT it_final INTO wa_final.
  REFRESH it_bdcdata.
  PERFORM bdc_dynpro      USING ‘sapmf02d’ ‘0100’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  ‘rf02d-ktokd’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘/00’.
  PERFORM bdc_field       USING ‘rf02d-kunnr’
  wa_final–kunnr.“‘1097’.
  PERFORM bdc_field       USING ‘rf02d-bukrs’
  wa_final–bukrs.“‘1000’.
  PERFORM bdc_field       USING ‘rf02d-ktokd’
  wa_final–ktokd.“‘y000’.
  PERFORM bdc_dynpro      USING ‘sapmf02d’ ‘0110’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  wa_final–spras.“‘kna1-spras’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘/00’.
  PERFORM bdc_field       USING ‘kna1-anred’
  wa_final–anred.“‘Mr.’.
  PERFORM bdc_field       USING ‘kna1-name1’
  wa_final–name1.“‘Shivendu’.
  PERFORM bdc_field       USING ‘kna1-stras’
  wa_final–stras.“‘Kaikondrahalli’.
  PERFORM bdc_field       USING ‘kna1-ort01’
  wa_final–ort01.“‘bang’.
  PERFORM bdc_field       USING ‘kna1-pstlz’
  wa_final–pstlz.           “‘560035’.
  PERFORM bdc_field       USING ‘kna1-land1’
  wa_final–land1.“‘in’.
  PERFORM bdc_field       USING ‘kna1-spras’
  wa_final–spras.“‘en’.
  PERFORM bdc_dynpro      USING ‘sapmf02d’ ‘0120’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  ‘kna1-lifnr’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘=upda’.

  CALL TRANSACTION ‘xd01’ USING it_bdcdata MODE ‘a’ UPDATE ‘s’
  MESSAGES INTO it_msg.

  IF NOT it_msg IS INITIAL.
    LOOP AT it_msg INTO wa_msg.
      wa_msg1 = wa_msg.
      CALL FUNCTION ‘message_text_build’
        EXPORTING
          msgid               = wa_msg–msgid
          msgnr               = wa_msg–msgnr
          msgv1               = wa_msg–msgv1
          msgv2               = wa_msg–msgv1
          msgv3               = wa_msg–msgv1
          msgv4               = wa_msg–msgv1
        IMPORTING
          message_text_output = wa_msg1–msgv1.

      APPEND wa_msg1 TO it_msg1.
      CLEAR wa_msg1.
    ENDLOOP.

  ENDIF.

ENDLOOP.

IF NOT it_msg1 IS INITIAL.

  CALL FUNCTION ‘reuse_alv_grid_display’
    EXPORTING
*     I_INTERFACE_CHECK  = ‘ ‘
*     I_BYPASSING_BUFFER = ‘ ‘
*     I_BUFFER_ACTIVE    = ‘ ‘
      i_callback_program = sy–repid
*     I_CALLBACK_PF_STATUS_SET          = ‘ ‘
*     I_CALLBACK_USER_COMMAND           = ‘ ‘
*     I_CALLBACK_TOP_OF_PAGE            = ‘ ‘
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ‘ ‘
*     I_CALLBACK_HTML_END_OF_LIST       = ‘ ‘
      i_structure_name   = ‘bdcmsgcoll’
*     I_BACKGROUND_ID    = ‘ ‘
*     I_GRID_TITLE       =
*     I_GRID_SETTINGS    =
*     IS_LAYOUT          =
*     IT_FIELDCAT        =
*     IT_EXCLUDING       =
*     IT_SPECIAL_GROUPS  =
*     IT_SORT            =
*     IT_FILTER          =
*     IS_SEL_HIDE        =
*     I_DEFAULT          = ‘X’
*     I_SAVE             = ‘ ‘
*     IS_VARIANT         =
*     IT_EVENTS          =
*     IT_EVENT_EXIT      =
*     IS_PRINT           =
*     IS_REPREP_ID       =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE  = 0
*     I_HTML_HEIGHT_TOP  = 0
*     I_HTML_HEIGHT_END  = 0
*     IT_ALV_GRAPHICS    =
*     IT_HYPERLINK       =
*     IT_ADD_FIELDCAT    =
*     IT_EXCEPT_QINFO    =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*     IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab           = it_msg1
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy–subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDIF.
ENDFORM.                    ” f_call_bdc

*&———————————————————————*
*&      Form  BDC_DYNPRO
*&———————————————————————*
*       text
*———————————————————————-*
*      –>PROGRAM    text
*      –>DYNPRO     text
*———————————————————————-*
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.                    “bdc_dynpro

*———————————————————————-*
*        Insert field                                                  *
*———————————————————————-*
form bdc_field using fnam fval.
IF fval <> space.
  CLEAR wa_bdcdata.
  wa_bdcdata–fnam = fnam.
  wa_bdcdata–fval = fval.
  APPEND wa_bdcdata TO it_bdcdata.
ENDIF.
ENDFORM.                    “bdc_field
*&———————————————————————*
*&      Form  F_SESSION_BDC
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form f_session_bdc .

CALL FUNCTION ‘bdc_open_group’
  EXPORTING
*   CLIENT                    = SY-MANDT
*   DEST  = FILLER8
    group = ‘shiv65’
*   HOLDDATE                  = FILLER8
    keep  = ‘x’
    user  = sy–uname
*   RECORD                    = FILLER1
*   PROG  = SY-CPROG
*   DCPFM = ‘%’
*   DATFM = ‘%’
* 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.
* Implement suitable error handling here
ENDIF.

LOOP AT it_final INTO wa_final.
  REFRESH it_bdcdata.
  PERFORM bdc_dynpro      USING ‘sapmf02d’ ‘0100’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  ‘rf02d-ktokd’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘/00’.
  PERFORM bdc_field       USING ‘rf02d-kunnr’
  wa_final–kunnr.“‘1097’.
  PERFORM bdc_field       USING ‘rf02d-bukrs’
  wa_final–bukrs.“‘1000’.
  PERFORM bdc_field       USING ‘rf02d-ktokd’
  wa_final–ktokd.“‘y000’.
  PERFORM bdc_dynpro      USING ‘sapmf02d’ ‘0110’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  wa_final–spras.“‘kna1-spras’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘/00’.
  PERFORM bdc_field       USING ‘kna1-anred’
  wa_final–anred.“‘Mr.’.
  PERFORM bdc_field       USING ‘kna1-name1’
  wa_final–name1.“‘Shiv.
  PERFORM bdc_field       USING ‘kna1-stras’
  wa_final–stras.“‘Kaikondrahalli’.
  PERFORM bdc_field       USING ‘kna1-ort01’
  wa_final–ort01.“‘bang’.
  PERFORM bdc_field       USING ‘kna1-pstlz’
  wa_final–pstlz.           “‘560035’.
  PERFORM bdc_field       USING ‘kna1-land1’
  wa_final–land1.“‘in’.
  PERFORM bdc_field       USING ‘kna1-spras’
  wa_final–spras.“‘en’.
  PERFORM bdc_dynpro      USING ‘sapmf02d’ ‘0120’.
  PERFORM bdc_field       USING ‘bdc_cursor’
  ‘kna1-lifnr’.
  PERFORM bdc_field       USING ‘bdc_okcode’
  ‘=upda’.

  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.
* Implement suitable error handling here
  ENDIF.

ENDLOOP.

CALL FUNCTION ‘bdc_close_group’
  EXCEPTIONS
    not_open    = 1
    queue_error = 2
    OTHERS      = 3.
IF sy–subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM.
 " f_session_bdc

Leave a comment