BDC using Session Method

By Kumar Saurabh, Yash Technologies

When SAP is implemented, we need Data to be migrated from non-SAP system i.e.  Legacy system to SAP system. One way of doing this is BDC (Batch Data Communication).

Requirement: - For Developing BDC using Session Method we need Recording & flat file in which data is stored. Flat file can be Text file or Excel File.

In Session Method following function Modules are used.

1.       BDC_OPEN_GROUP.

2.       BDC_INSERT.

3.       BDC_CLOSE_GROUP.

In  BDC we use structure BDCDATA  for Batch Input, Which has following components.

PROGRAM  -   BDC module pool

DYNPRO-        BDC Screen number

DYNBEGIN-    BDC screen start                                                          

FNAM-            Field name

FVAL-              BDC field value

A BDCDATA structure can contain the batch input data for only a single run of a transaction

Lets for the sake of convenience our flat file looks like this.

(If you are using the same file for practice make sure you remove the above two heading rows.)

From above flat file we came to know about the structure of the internal table in which data will be uploaded.

DATA:
  
BEGIN OF fs_field,
    bsart 
TYPE eban-bsart,             ” Document Type.
    matnr 
TYPE eban-matnr,             " Material Number.
    menge 
TYPE eban-menge,             " Quantity Requested.
    werks 
TYPE eban-werks,             " Plant.
  
END OF fs_field.

Recoding is done in Transacton – SHDB .

Here we have done Recording for the transaction- ME51 .

The Recording which you get will be in following format.

Now  go to Abap Editor (SE38).

Do the following coding.

*Input Path
PARAMETERS:
  p_file   
TYPE rlgrap-filename.                  " File Path

* Structure Decleration
DATA :
  
BEGIN OF fs_field,
    bsart 
TYPE eban-bsart,             " Document Type.
    matnr 
TYPE eban-matnr,             " Material Number.
    menge 
TYPE eban-menge,             " Quantity Requested.
    werks 
TYPE eban-werks,             " Plant.
 
END OF fs_field.

*Internal table decleration
DATA:
   t_field    
LIKE TABLE OF fs_field,
   t_bdcdata  
LIKE TABLE OF bdcdata.

DATA:
  fs_bdcdata 
LIKE LINE OF t_bdcdata,   ”Structure type of bdcdata
   w_str  
TYPE string.

* Data decleration
DATA:
  wa_path 
TYPE string ,
  wa_error 
TYPE string,
  wa_cnt   
TYPE i,
  w_mode    
TYPE c,
  wa_cnt1(
2TYPE n,
  it_output 
type table of ty_s_error,
  wa_output 
like line of it_output.

* Opening window for path selection
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  
CALL FUNCTION 'F4_FILENAME'
    
EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
      field_name    = 
' '
    
IMPORTING
      file_name     = p_file.

  
TYPES:
    fs_struct(
4096TYPE c OCCURS 0 .

  
DATA:
    w_struct 
TYPE fs_struct.

* Uploading excel file.
  
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    
EXPORTING
      i_field_seperator          = 
'X'
*   I_LINE_HEADER              =
      i_tab_raw_data             = w_struct
      i_filename                 = p_file
    
TABLES
      i_tab_converted_data       = t_field
    
EXCEPTIONS
      conversion_failed          = 
1
      
OTHERS                     = 2
            .
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.

 
PERFORM open_group .
LOOP AT t_field INTO fs_field.
  
REFRESH: t_bdcdata.
  
CLEAR  : fs_bdcdata.
  
PERFORM populate_bdcdata.
  
PERFORM insert_data.
ENDLOOP.                               " LOOP AT t_f..

* Function to close BDC group.
PERFORM close_group.

*&---------------------------------------------------------------------*
*&      Form  open_group
*&---------------------------------------------------------------------*
*    Function to open BDC
*----------------------------------------------------------------------*
FORM open_group.

   
CALL FUNCTION 'BDC_OPEN_GROUP'
  
EXPORTING
*     CLIENT                    = SY-MANDT
*     DEST                      = FILLER8
     
group                     = 'YH1610'
*     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.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ELSE.
    
WRITE :/ 'Group Open' .

  
ENDIF.                               " IF sy-subrc <>

ENDFORM.                               " Open_group

*&---------------------------------------------------------------------*
*&      Form  POPULATE_BDCDATA
*&---------------------------------------------------------------------*
*       Function to populate data
*----------------------------------------------------------------------*
FORM populate_bdcdata .

 
PERFORM :

  fill_bdc_data 
USING 'SAPMM06B' '0100' 'X'  ' '  ' ',
  fill_bdc_data 
USING  ''  ''  ''   'EBAN-BSART' fs_field-bsart,   " Document Type.
  fill_bdc_data 
USING  ''  ''  ''   'BDC_OKCODE' '/00',            " Enter.

  fill_bdc_data 
USING 'SAPMM06B'  '0106' 'X' ' ' ' ',
  fill_bdc_data 
USING  '' '' '' 'EBAN-MATNR(01)'  fs_field-matnr,   " Material Number.
  fill_bdc_data 
USING  '' '' ''  'EBAN-MENGE(01)' fs_field-menge,   " Quantity Requested.
  fill_bdc_data 
USING  '' '' ''  'EBAN-WERKS(01)' fs_field-werks,   " Plant.
  fill_bdc_data 
USING  '' '' ''  'BDC_OKCODE'   '/00',              " Enter.
  fill_bdc_data 
USING 'SAPMM06B' '0102' 'X' ''  '' ,
  fill_bdc_data 
USING  '' '' ''  'BDC_OKCODE' '=BU'.                 " Save.

ENDFORM.                               " POPULATE_BDCDATA

*&---------------------------------------------------------------------*
*&      Form  FILL_BDC_DATA
*&---------------------------------------------------------------------*
*       Function to populate data
*----------------------------------------------------------------------*
*      -->VALUE(P_PROGRAM)  Program name
*      -->VALUE(P_DYNPRO)   screen no
*      -->VALUE(P_BEGIN)    screen start
*      -->VALUE(P_FIELD)    field name
*      -->VALUE(P_VALUE)    field value
*----------------------------------------------------------------------*
FORM fill_bdc_data  USING    value(p_program)
                             
value(p_dynpro)
                             
value(p_begin)
                             
value(p_field)
                             
value(p_value).

  
CLEAR fs_bdcdata.
  
IF p_begin = 'X'.
*" Screen Values.
    fs_bdcdata-
program = p_program.    " program name
    fs_bdcdata-
dynpro  = p_dynpro.     " screen no
    fs_bdcdata-dynbegin   = p_begin.   
" screen start
    
APPEND fs_bdcdata TO t_bdcdata.
  
ELSE.
*" Filed Values.
    
CLEAR fs_bdcdata.
    fs_bdcdata-fnam = p_field.         
" Field name
    fs_bdcdata-fval = p_value.         
" Field value
    
CONDENSE fs_bdcdata-fval.         
    
APPEND fs_bdcdata TO t_bdcdata.

  
ENDIF.                               " IF P_BEGIN = 'X'

ENDFORM.                               " FILL_BDC_DATA

*&---------------------------------------------------------------------*
*&      Form  INSERT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM insert_data .

*Data decleration
  
DATA:
       t_msg 
TYPE TABLE OF bdcmsgcoll,   " Collecting messages
       w_msg 
TYPE bdcmsgcoll,
       w_msg1(
51).

  
CALL FUNCTION 'BDC_INSERT'
   
EXPORTING
     tcode                  = 
'ME51'
*   POST_LOCAL             = NOVBLOCAL
*   PRINTING               = NOPRINT
*   SIMUBATCH              = ' '
*   CTUPARAMS              = ' '
    
TABLES
      dynprotab              = t_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.
*    Error Found
    
WRITE : / 'DATA Not INSERTED'.
  
ELSE.
    
WRITE : / 'DATA INSERTED'.
  
ENDIF .                              " IF sy-subr

ENDFORM.                               " INSERT_DATA

*&---------------------------------------------------------------------*
*&      Form  CLOSE_GROUP
*&---------------------------------------------------------------------*
*       Function to close BDC group
*----------------------------------------------------------------------*
FORM close_group .
  
CALL FUNCTION 'BDC_CLOSE_GROUP'
    
EXCEPTIONS
      not_open    = 
1
      queue_error = 
2
      
OTHERS      = 3.
  
IF sy-subrc <> 0.
    
MESSAGE 'UNABLE TO CLOSE BDC SESSION !' TYPE 'S' DISPLAY LIKE 'E'.
  
ENDIF.                               " IF sy-subrc ..

  
WRITE : / 'CLOSED SESSION'.

ENDFORM.                               " CLOSE_GROUP    

Click here to continue...

Please send us your feedback/suggestions at webmaster@SAPTechnical.COM 

HomeContribute About Us Privacy Terms Of Use • Disclaimer • SafeCompanies: Advertise on SAPTechnical.COM | Post JobContact Us  

Graphic Design by Round the Bend Wizards

footer image footer image