BDC using CALL TRANSACTION method
Objective:
- Steps For implementing BDC using call transaction Method
.
When SAP is implemented we need Data to
migrate 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 CALL TRANSACTION method we need to
do the recording of the corresponding transaction
& flat file in which data
is stored. Flat file can be Text file or Excel File. In CALL TRANSACTION we also
have to create the Error Log file.
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
In CALL TRANSACTION method, we need to
create Log for the Error Message, for this we use structure BDCMSGCOLL.
For our demo purpose, we would be
considering the file format.
(If you are using the same file for
practice make sure you remove the above two heading rows.)
Define the internal table structure as
per the above file structure.
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.
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 using the Transaction
– 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).
Enter the
following code:
*Structure for error message
TYPES : BEGIN OF ty_s_error,
msg_err(60) TYPE c,
END OF ty_s_error.
*Input Path
SELECTION-SCREEN BEGIN OF BLOCK blck WITH FRAME TITLE text-011.
PARAMETERS:
p_file TYPE rlgrap-filename, " File Path
e_file TYPE rlgrap-filename OBLIGATORY, " Error File Path
p_mode TYPE c OBLIGATORY DEFAULT 'N'. " Mode
SELECTION-SCREEN END OF BLOCK blck.
* 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.
AT SELECTION-SCREEN.
* Mode 'A' = Foreground mode
* Mode 'N' = Background mode
IF p_mode = 'A' OR p_mode = 'N' .
w_mode = p_mode.
ELSE.
*Error Message
MESSAGE 'PLEASE ENTER THE MODE A or N' TYPE 'E'.
ENDIF.
* 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.
*Opening window for Error file download
AT SELECTION-SCREEN ON VALUE-REQUEST FOR e_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = e_file.
* start of selection event.
START-OF-SELECTION.
LOOP AT t_field INTO fs_field .
REFRESH: t_bdcdata.
CLEAR fs_bdcdata.
PERFORM populate_bdcdata.
PERFORM insert_data.
ENDLOOP. " LOOP AT it_c.
*********************(populate_bdcdata)***********************
* part 1
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. " Form populate_bdc.
* part 2
FORM fill_bdc_data USING value(p_program)
value(p_dynpro)
value(p_dynbegin)
value(p_fnam)
value(p_fval).
CLEAR fs_bdcdata .
IF p_dynbegin = 'X' .
fs_bdcdata-program = p_program .
fs_bdcdata-dynpro = p_dynpro .
fs_bdcdata-dynbegin = p_dynbegin .
APPEND fs_bdcdata TO t_bdcdata.
ELSE.
fs_bdcdata-fnam = p_fnam.
fs_bdcdata-fval = p_fval.
CONDENSE fs_bdcdata-fval.
APPEND fs_bdcdata TO t_bdcdata.
ENDIF. " IF p_dynbeg..
ENDFORM . " Fill_entry
*********************(insert_data)****************************
FORM insert_data.
*Data decleration for Error Message
DATA:
t_msg TYPE TABLE OF bdcmsgcoll, " Collecting Error messages
w_msg TYPE bdcmsgcoll,
w_msg1(51).
* Call transaction 'ME51'
CALL TRANSACTION 'ME51' USING t_bdcdata
MODE w_mode
UPDATE 'S'
MESSAGES INTO t_msg.
IF sy-subrc EQ 0.
* Uploaded into the database
WRITE :/ 'DATA UPLOADED IN TABLE EBAN...' .
ELSE.
* Error Found
LOOP AT t_msg INTO w_msg WHERE msgtyp EQ 'E'.
* Format Message
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = w_msg-msgid
msgnr = w_msg-msgnr
msgv1 = w_msg-msgv1
msgv2 = w_msg-msgv2
msgv3 = w_msg-msgv3
msgv4 = w_msg-msgv4
IMPORTING
message_text_output = w_msg1.
wa_output-msg_err = w_msg1.
*Error message in downloaded file
data:
wa_string(10) type c.
wa_string = fs_field-matnr.
concatenate wa_string wa_output-msg_err into wa_output-msg_err separated by space.
APPEND wa_output-msg_err TO it_output.
wa_error = e_file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = wa_error
* FILETYPE = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
TABLES
data_tab = it_output
*
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF. " IF sy-subrc <> 0.
ENDLOOP.
ENDIF.
ENDFORM. "insert_data
TYPES : BEGIN OF ty_s_error,
msg_err(60) TYPE c,
END OF ty_s_error.
*Input Path
SELECTION-SCREEN BEGIN OF BLOCK blck WITH FRAME TITLE text-011.
PARAMETERS:
p_file TYPE rlgrap-filename, " File Path
e_file TYPE rlgrap-filename OBLIGATORY, " Error File Path
p_mode TYPE c OBLIGATORY DEFAULT 'N'. " Mode
SELECTION-SCREEN END OF BLOCK blck.
* 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.
AT SELECTION-SCREEN.
* Mode 'A' = Foreground mode
* Mode 'N' = Background mode
IF p_mode = 'A' OR p_mode = 'N' .
w_mode = p_mode.
ELSE.
*Error Message
MESSAGE 'PLEASE ENTER THE MODE A or N' TYPE 'E'.
ENDIF.
* 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.
*Opening window for Error file download
AT SELECTION-SCREEN ON VALUE-REQUEST FOR e_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = e_file.
* start of selection event.
START-OF-SELECTION.
LOOP AT t_field INTO fs_field .
REFRESH: t_bdcdata.
CLEAR fs_bdcdata.
PERFORM populate_bdcdata.
PERFORM insert_data.
ENDLOOP. " LOOP AT it_c.
*********************(populate_bdcdata)***********************
* part 1
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. " Form populate_bdc.
* part 2
FORM fill_bdc_data USING value(p_program)
value(p_dynpro)
value(p_dynbegin)
value(p_fnam)
value(p_fval).
CLEAR fs_bdcdata .
IF p_dynbegin = 'X' .
fs_bdcdata-program = p_program .
fs_bdcdata-dynpro = p_dynpro .
fs_bdcdata-dynbegin = p_dynbegin .
APPEND fs_bdcdata TO t_bdcdata.
ELSE.
fs_bdcdata-fnam = p_fnam.
fs_bdcdata-fval = p_fval.
CONDENSE fs_bdcdata-fval.
APPEND fs_bdcdata TO t_bdcdata.
ENDIF. " IF p_dynbeg..
ENDFORM . " Fill_entry
*********************(insert_data)****************************
FORM insert_data.
*Data decleration for Error Message
DATA:
t_msg TYPE TABLE OF bdcmsgcoll, " Collecting Error messages
w_msg TYPE bdcmsgcoll,
w_msg1(51).
* Call transaction 'ME51'
CALL TRANSACTION 'ME51' USING t_bdcdata
MODE w_mode
UPDATE 'S'
MESSAGES INTO t_msg.
IF sy-subrc EQ 0.
* Uploaded into the database
WRITE :/ 'DATA UPLOADED IN TABLE EBAN...' .
ELSE.
* Error Found
LOOP AT t_msg INTO w_msg WHERE msgtyp EQ 'E'.
* Format Message
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = w_msg-msgid
msgnr = w_msg-msgnr
msgv1 = w_msg-msgv1
msgv2 = w_msg-msgv2
msgv3 = w_msg-msgv3
msgv4 = w_msg-msgv4
IMPORTING
message_text_output = w_msg1.
wa_output-msg_err = w_msg1.
*Error message in downloaded file
data:
wa_string(10) type c.
wa_string = fs_field-matnr.
concatenate wa_string wa_output-msg_err into wa_output-msg_err separated by space.
APPEND wa_output-msg_err TO it_output.
wa_error = e_file.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = wa_error
* FILETYPE = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
TABLES
data_tab = it_output
*
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF. " IF sy-subrc <> 0.
ENDLOOP.
ENDIF.
ENDFORM. "insert_data
Run the Program.
Enter the path
of file you need to upload.
And then enter
the path of a file where error log will be created.
Finally select
the mode. We have following option for the mode.
1.
A =
Foreground (Step by
step processing will be done by you)
2.
N =
Background (All the
Processing will be done in Background)
3.
E =
Display Error ( If there is any error, it will be displayed in log
otherwise it is similar to background mode)
Finally when all
the data is uploaded .
In case of Error
in the upload of any data, an Error file gets generated at the above given path.
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 poolDYNPRO- BDC Screen numberDYNBEGIN- BDC screen startFNAM- Field nameFVAL- 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.
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 PathPARAMETERS:
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.
Handling conversion errors - File EncodingBy Sarveswararao Sombhatla, Yash Technologies
One
of the major effects that need to be taken care when reading the file from
Application Server
File
encoding format
What
is Encoding?
Encoding
means converting the message into different format or symbols.
Example:
When we create a notepad and save it, by default the Encoding format will be
ANSI. When we reopen the file it reads the characters as per the encoding format
we saved and shows us the same characters what we have actually written in that
notepad.
ANSI
Encoding
Below
is the screenshot how notepad file saved in ANSI Encoding format with a line ‘ABC’
is interpreted in a Hex-Editor.
Here
we have the simple hexadecimal conversion. 41 is A, 42 is B, 43 is C.
Unicode
Encoding
The
same file when saved in Unicode Encoding format, then how this gets interpreted
in Hex-Editor
We
can see some additional hexadecimal characters when a file is stored in Unicode
Encoding format.
FF
FE is the signature of the file encoded in Unicode or UTF-16 Big Endean format
UTF-8
Encoding
The
same file when saved in UTF-8 Encoding format, then it gets interpreted in
Hex-Editor as below:
EF
BB BF is the signature of the file encoded in UTF-8 format
This
way with the first additional characters of the files we can identify what is
the encoding format used in this file.
What happens when a
file with UTF-8 format and ANSI format file is placed on the SAP Application
server directly?
1.
If a file saved with encoding UTF-8 format is placed on the SAP Application
server, the file is read in AL11 as shown in the below screen-shot.
We
can see the special characters as they are because, by default SAP uses UTF-8
encoding format.
When
we read this in ABAP program using OPEN DATASET statement with the addition
ENCODING DEFAULT we can read the file with the special characters without any
code page conversion problem.
2.
If a file saved with encoding ANSI format is placed on the SAP Application
server, the file is read in AL11 as shown in the below screen-shot.
In this case we are not able to see
the special characters as they are encoded in ANSI format. When we read this
file in ABAP program using OPEN DATASET statement with the addition ENCODING
DEFAULT the program goes for a runtime error as the encoding format used by SAP
is different from the encoding format the file is saved. We need to use OPEN
DATASET statement with the addition ENCODING NON-UNICODE to read this file so we
won’t get any runtime error.
To avoid this kind of runtime errors
when we read the file from application server in SAP, we need to have always the
same encoding format file to be placed on the Application server.
How to do BDC without writing BDC program
1.
Go to Transaction SHDB and click “New Recording” button.
2.
The following popup screen gets populated, there you enter
the Recording name and transaction for which you wish to do the BDC (In
this example it is VV31). Click “Start recording” button.
3.
In the Transaction, enter the mandatory field. In his case
it is Output type (AUS1).
Hit enter key.
4.
The following screen appears for more entry. Enter all the
mandatory fields and click on save.
5.
SAP will give the Recorded program as shown in the following
screen shot.
6.
Click the Export button
and
save the file as word document file into the system.
7.
Now open the newly created word document file.
8.
Select/Highlight the first field in the word document for
which for which BDC needs to done. (In this case it is output type i.e. AUS1)
and go to the menu path Insert Ã
Field
9.
A new screen will get populated and there you select the
“Merge Field” option from the list box and enter the Column Name (In this
case the 1st column is output_type).
10.
Now you can see
in the word document that the highlighted field will get replaced with the
column name.
11.
Similarly you
highlight the other fields for which we need to create the BDC and give the
unique column names for those fields.
12.
Now you can see that all the required fields have been mapped
with unique column names.
13.
Now go the menu
path Tools Ã
Letters and Mailings Ã
Mail Merge Wizard.
14.
A mail merge
wizard will gets opened in the right hand side.
15.
Now open the
excel file where which you have the data to do the BDC for transaction VV31.
Check that the column name in the word document is matching with the column name
in the Excel file.
16.
Close the Excel
File.
17.
Switch to world
document and Now Click “Next: Start document” link in the bottom of Mail
Merge wizard
18.
Now click on “Next: Select recipients” link
19.
Now click on “Browse” link
20.
It will open the
popup for selecting the file (which is having data for BDC).
21.
Press “Open”
button
22.
A new popup will
get triggered.
|
23.
Select the work
sheet of the Excel file where the actual data present. In this case it is
Sheet1$ and Click “OK” button.
24.
A new
popup screen would appear with the data. Click “OK” button.
25.
Now click
“Next: Write your letter” link.
26.
Click
“Next: Preview your letters” link.
27.
Now
you can see the first record got merged with the word document.
28.
Click
“Next: Complete the merge” link.
29.
Click the
“Edit individual letters…” link
30.
A
new popup will get triggered, there you select “All” radio button and click
“OK” button.
31.
Now you
can see the merge has been done in the word document and it will create the BDC
program for all the records in the Excel sheet. (In this case we had 10 records
in excel sheet, hence the merge has created 10 pages in the word document. One
page for each record)
32.
Now Select
the entire content in the word document (i.e. all the 10 pages) and copy it in a
notepad and save as separate “TXT” file.
33.
Go to the SHDB
transaction and select your recording and click “Change” button.
34.
Now use the
“Import” button
to
download the TXT file which we saved in Step # 32.
35.
Once you click
the Import button, a popup will come from there you select the file and click
“Transfer” button.
36.
It will transfer
the entire content to the SHDB. Now Save the changes. Click “Back” button.
37.
Now click the
“Session” button, in order to create a new session.
38.
The
following popup will get triggered, there you enter the new session name and
check the “Keep session” check box and click “Continue” button.
39.
You will
get the “Success Message” that “Batch input session ZTST_GOK was
created”.
40.
Now go to
the Transaction SM35 (Batch Input: Session Overview), there you select your
“Session” which you have created in Step # 38 (You can the status of your
session will be New) and click “Process” button.
41.
A small
popup will get triggered, there you select the “Background” radio button and
check the “Extended Log” check box. Click “Process” button.
42.
You will
get the success message “1 session(s) transferred to background processing”.
43.
And you
can also see the status of your session has been changed from “New” to “In
background”.
44.
Click
“Log” button, to see the details about the BDC.
45.
You will
taken to the another screen, there you can see status of the BDC.
46.
In our
case, the status is “Errors”, to know the details further. Select the entry
and click “Analyze session”. It will display the status of all the records.
47.
In the
above screen shot you can see the first two records were failed and others were
processed. The reason for the same is: For the first time when we used SHDB we
created the first condition record. Since this record is already there it failed
in the second time. The same thing applies to the second failure case
Creating a simple database table using BDC
Report ypriyatest.
TABLES:
bdcdata.
DATA:t_bdcdata LIKE
STANDARD TABLE
OF bdcdata.
PARAMETERS :
p_table(15) TYPE c.
DATA:
MSG LIKE BDCMSGCOLL,
T_MSG LIKE TABLE OF MSG,
MESSAGE(72) TYPE C.
PERFORM PROCESS.
*&---------------------------------------------------------------------
*
*& Form fill_screendata
*&---------------------------------------------------------------------
form fill_screendata using value(p_0015)
value(p_0016).
BDCDATA-PROGRAM = P_0015.
BDCDATA-DYNPRO = P_0016.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA TO T_BDCDATA.
CLEAR BDCDATA.
endform. " fill_screendata
*&---------------------------------------------------------------------
*
*& Form FILL_FIELD_DATA
*&---------------------------------------------------------------------
form FILL_FIELD_DATA using value(p_0020)
value(p_0021).
BDCDATA-FNAM = P_0020.
BDCDATA-FVAL = P_0021.
APPEND BDCDATA TO T_BDCDATA.
CLEAR BDCDATA.
endform. " FILL_FIELD_DATA
*&---------------------------------------------------------------------
*
*& Form PROCESS
*&---------------------------------------------------------------------
form PROCESS .
**first screen
PERFORM fill_screendata
USING 'SAPMSRD0' '0102'.
PERFORM FILL_FIELD_DATA
USING 'RSRD1-TBMA' 'X'.
PERFORM FILL_FIELD_DATA
USING 'RSRD1-TBMA_VAL' p_table.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=ADD'.
**second screen
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'DD02D-DDTEXT' 'Bdc Table'.
PERFORM FILL_FIELD_DATA
USING 'DD02D-CONTFLAG' 'A'.
PERFORM FILL_FIELD_DATA
USING 'DD02D-MAINFLAG' 'X'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=CHANGE_MAINTFLAG'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '/00'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=DEF'.
**second screen filling table fields
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'DD03P-FIELDNAME(01)' 'mandt'.
PERFORM FILL_FIELD_DATA
USING 'DD03P-FIELDNAME(02)' 'name'.
PERFORM FILL_FIELD_DATA
USING 'DD03P-FIELDNAME(03)' 'empid'.
PERFORM FILL_FIELD_DATA
USING 'DD03D-ROLLNAME(01)' 'mandt'.
PERFORM FILL_FIELD_DATA
USING 'DD03D-ROLLNAME(02)' 'char20'.
PERFORM FILL_FIELD_DATA
USING 'DD03D-ROLLNAME(03)' 'numc4'.
PERFORM FILL_FIELD_DATA
USING 'DD03P-KEYFLAG(01)' 'X'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '/00'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=WB_SAVE'.
**saving the table****
PERFORM fill_screendata
USING 'SAPLSTRD' '0100'.
PERFORM FILL_FIELD_DATA
USING 'KO007-L_DEVCLASS' '$TMP'.
PERFORM FILL_FIELD_DATA
USING 'KO007-L_AUTHOR' 'SAPDEV02'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=TEMP'.
**filling technical settings.
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=SE13'.
PERFORM fill_screendata
USING 'SAPMSEDS' '0050'.
PERFORM FILL_FIELD_DATA
USING 'BDC_CURSOR' 'DD09V-TABART'.
PERFORM FILL_FIELD_DATA
USING 'DD09V-TABART' 'APPL0'.
PERFORM FILL_FIELD_DATA
USING 'DD09V-TABKAT' '0'.
PERFORM FILL_FIELD_DATA
USING 'ALLOWSTATE-NOT_ALLOWED' 'X'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=SICH'.
PERFORM fill_screendata
USING 'SAPMSEDS' '0050'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=BACK'.
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=WB_SAVE'.
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=WB_CHECK'.
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=WB_ACTIVATE'.
PERFORM FILL_SCREENDATA
USING 'SAPLSEWORKINGAREA' '0205'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=WEIT'.
PERFORM fill_screendata
USING 'SAPLSD41' '2200'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=BACK'.
PERFORM fill_screendata
USING 'SAPMSRD0' '0102'.
PERFORM FILL_FIELD_DATA
USING 'BDC_OKCODE' '=BACK'.
CALL TRANSACTION 'SE11' USING T_BDCDATA MODE 'A' MESSAGES INTO T_MSG.
LOOP AT T_MSG INTO MSG.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = MSG-MSGID
LANG = 'EN'
NO = MSG-MSGNR
V1 = MSG-MSGV1
V2 = MSG-MSGV2
V3 = MSG-MSGV3
V4 = MSG-MSGV4
IMPORTING
MSG = MESSAGE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF sy-subrc EQ 0.
WRITE / MESSAGE.
ENDIF.
ENDLOOP.
endform. " PROCESS
Output
First Screen
Setting the
delivery class and maintenance
Saving the table
Technical
Settings
Activating The Table
BDC recording from testing client to development client
This method would be useful, when you don’t have required
datum in development client and when you have same in testing client and you
want to BDC recording with that datum.
Login to the Testing client where you will have data.
Go to transaction SHDB and press new recording.
As an
instance, here we will try to modify vendor’s postal code of his address. So,
give FK02 as the transaction code to be executed and give recording name like
‘ZRECORD’.
Now it goes to Vendor master update screen. Opt a vendor and
click the address checkbox and press enter.
It will show the vendor’s address information.
Now change the existing PIN code 700019 to 560076 and press
save. It will take you to the recording screen.
Now you cannot create a program with this recording
information in testing client. So, import your recording information to one
presentation server file. Press import button.
Give a text file name and save it in the presentation server.
Then Go to
SHDB transaction in development client and go to new recording. Give the
recording name as ZRECORDINGNEW and opt the same vendor master updation
transaction code FK02.
In this case your development client should have at least one
vendor. If not create it and input the vendor in FK02 transaction and as you did
earlier select the address checkbox.
It will show you the address information. You don’t change
anything in that and come back. Because this is not the vendor to whom we are
going to change his PIN Code.
Now it
will show you the recording information. Delete all the recording information
and press the import button and browse bdc_recording file from the presentation
server.
The
previous recording information will loaded in to BDC recording and go back from
the screen. It would popup for saving the recording. Now save that recording.
Select the
recording and press ‘program’ button. It will popup for new program
creation. Input the required details and the expected BDC recording program will
get created.
no standard page heading line-size 255.
include bdcrecx1.
start-of-selection.
perform open_group.
perform bdc_dynpro using 'SAPMF02K' '0106'.
perform bdc_field using 'BDC_CURSOR'
'RF02K-LIFNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RF02K-LIFNR'
'B002568'.
perform bdc_field using 'RF02K-D0110'
'X'.
perform bdc_dynpro using 'SAPMF02K' '0110'.
perform bdc_field using 'BDC_CURSOR'
'LFA1-PSTLZ'.
perform bdc_field using 'BDC_OKCODE'
'=UPDA'.
perform bdc_field using 'LFA1-NAME1'
'MURARI SHARAN SRIVASTAVA'.
perform bdc_field using 'LFA1-SORTL'
'000568'.
perform bdc_field using 'LFA1-STRAS'
'Brook House, Shakespeare Sarani'.
perform bdc_field using 'LFA1-ORT01'
'Kolkatta'.
perform bdc_field using 'LFA1-PSTLZ'
'560076'.
perform bdc_field using 'LFA1-LAND1'
'IN'.
perform bdc_field using 'LFA1-REGIO'
'25'.
perform bdc_field using 'LFA1-SPRAS'
'EN'.
perform bdc_transaction using 'FK02'.
perform close_group.
Howdy, I figure your blog might be having web program similarity issues. At the point when I investigate your site in Safari, it looks fine notwithstanding, when opening in IE, it has some covering issues. I simply needed to give you a brisk heads up! Beside that, superb site!
ReplyDeletelive
Sir really aapne bahut accha explanation kiya hai shukriya Professor kaise bane jane puri jankari
ReplyDelete