You are on page 1of 9

Debugging LSMW and Difference between LSMW and BDC

Debugging LSMW
LSMW object program can be debugged putting breakpoints.

In our Field Mapping/conversion, we can code BREAK-POINT at the very first field. The program execution will break when it
reaches there.

We can also put soft breakpoints in the generated code. To view our generated code, we need to bring it up in the initial screen
of our object.

To do so, go to User Menu and check the Display Read Program and Display Conversion Program checkboxes and press ENTER.
Now  2 additional options will be seen on the initial screen of our Object. On double-clicking the Display Read Program or Display
Conversion Program, the generated code will be seen. Then place a soft breakpoint.

Another option is to go to DISPLAY READ PROGRAM or DISPLAY CONVERSION PROGRAM.


Now we could see the ABAP editor with the code. We can place the breakpoint (soft break point using STOP button on
application tool bar) wherever desired.

Difference between LSMW and BDC

The differences between LSMW and BDC are as follows:


LSMW is generally for normal SAP applications, while BDC is mainly for  any customized applications. 
LSMW is a Non-SAP to SAP communication TOOL, whereas BDC is a SAP to SAP communication UTILITY. 
LSMW(Legacy System Migration Workbench) is a more user-friendly tool, through which one can do the same work
as the BDC. One just has to follow the 14 steps. LSMW offers four ways to import data into SAP, and they are:
 BDC, Direct Input, BAPI(BO) and IDOC.
BDC(Batch Data Communication) is basically a program which is either generated by SAP after a recording or
programmed by a abaper. It's like running the transaction manually but all the data is populated in the screens
automatically. It is a bit complex when the screen contains Table Controls. 
LSMW provides various methods for migration of data, namely those of Direct Input, Batch Input recording and
IDOC. BDC however simply makes use of recording. There are two ways of implementing   BDC, the Call transaction
metod and the Session method. 
In LSMW, mapping is taken care of with the help of SAP, whereas in BDC one has to provide explicit mapping
directions. 
In BDC, we can schedule the job, so the uploading can be done at the same time or later periodically while in LSMW
it has to be done at once only. So through LSMW, one cannot upload huge amount of data. Hence we use LSMW for
updating or inserting below 5000 records and we use BDC to upload records more than 5000. 
Coding is not very flexible in LSMW, whereas in BDC coding is very flexible and applications can be easily
customized.Tthis is mainly because LSMW is devised specially for functional consultants who do not perform coding,
while BDC is mainly used by technical consultants, who perform coding.  
BDC using Session Method

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(2) TYPE 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(4096) TYPE 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    

Execute the Program.

Now go to Transaction SM35 for Session Overview.

Line select your Program and press the Button ‘Process’.


We will get the 3 options for Processing

1.       Foreground - Step by step processing will be done by you.

2.       Background – All the Processing will be done in Background.

3.       Display Error – If there is any error, it will be displayed in log otherwise it is similar to background mode.

Select the mode from radio button and press ‘Process’ button

Following information message will be displayed if processing is successfully completed.

We can press ‘session overview’ button to see the session overview

This symbol under ‘Stat’ indicates successful processing.

In case of any Error we can go to the log and check the error message from the  ‘Log’  button as shown below.

You might also like