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.