Perşembe , 14 Aralık 2017
Home » SAP Eğitimleri » ABAP Eğitimleri » Call transaction yönetimi kullanılarak BDC Uyarlaması

Call transaction yönetimi kullanılarak BDC Uyarlaması

Call transaction yönetimi kullanılarak BDC Uyarlaması

 

Eski sistemdeki ana veri veya işlem verilerini her projemizde canlı sisteme aktarmamız gerekir. LSMW burada kullanılan yöntemlerden birtanesidir. LSMW kullanımı bizim bir sonkira eğitimimizin konusu olacaktır. Bu eğitimizde veri aktarım işlemini BDC (Batch Data Communication) yöntemi ile yapmayı anlatacağız.

 

BDC ile call transaction işlemi yapmak için uygun işlem kodununun kaydını oluşturmalıyız.

 

SHDB işlem kodundan veri aktarımı yapacağımız veri ile ilgili işlem kodu yada ana veri işlem koduyla ilgili kaydı oluşturabilirsiniz.

 

Bizim örneğimizde satınalma talebi oluşturma üzerine olacaktır, me51 işlem koduyla ilgili gerekli kayıt işlemlerini yapıyoruz, kayıt işlemini yaparken mutlaka satınalma talebi oluştururken zorunlu alanları doldurmalıyız ve o şekilde kaydetmeliyiz, ayrıca aktarmayı planladığımız ek bilgiler de varsa onları da doldurmalıyız. Kayıt işlemini yapmadan önce mutlaka uygun verileri belirleyerek bir kayıt işlemi yapın, çünkü kayıt yaparken hata almanız oluşacak kayıtta bazı tutarsızlıklara ve bir çok veri giriş alanı ve enter gibi işlem adımları görünmesine neden olacaktır, ayrıca kayıt yaparken F4 helplerini değil de daha önce kayıt ederken kullandığınız bilgileri gerekli alan üzerinde boşluk tuşuna basarak gelen bilgilerden seçebilirsiniz.

 

Kayıt işlemi bittikten sonra ekran görüntüsü aşağıdaki şekilde olacaktır. Bu bilgileri yazdığımız program içinde kullanacağız.

 

111014_2119_Calltransac1.png

 

Aktarmak istediğiniz dataları belirledikten sonra aşağıdaki gibi bir excel oluşturup gerekli bilgileri doldurarak aktarım için hazır hale getirebilirsiniz.

 

 

111014_2119_Calltransac2.png

 

Gerekli hazırlıkları yaptıktan sonra sıra geldi programı yazmaya.

Öncelikli olarak Se38 işlem koduna girerek z_bdc_test adında bir program oluşturup aşağıdaki kodu içine ekliyoruz.

*&———————————————————————*
*& Report  Z_BDC_TEST
*&
*&———————————————————————*
*&
*&
*&———————————————————————*

REPORT  z_bdc_test.

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.
preis TYPE eban-preis,             ” Price
afnam TYPE eban-afnam,
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        = ‘X’
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  ” ” ” ‘EBAN-PREIS’  fs_field-preis,   ”
“price if required.
fill_bdc_data USING  ” ” ”  ‘EBAN-AFNAM’ fs_field-afnam,

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

 

 

Programı aktive ettikten sonra çalıştırdığımızda aşağıdaki ekran gelecektir. Burada P_File alanında aktarım yapmak için hazırladığımız dosyayı seçiyoruz.

E_file alanında da eğer bir hata oluşursa (Error) onu yazacağımız dosyayı belirtiyoruz, istersek bunu ekrana da yazdırabiliriz.

P_mode alanı programı nasıl çalıştıracağımızı belirlemektedir.

A= Ön planda çalıştırmak (Adım adım ön planda gerçekleşir)

N =Arka planda program çalışır yani, me51 ekranını arka planda çalıştırır, data aktarımı yapılırken arkanıza yaslanıp bekleyebilirsiniz.

111014_2119_Calltransac3.png

 

Program çalışıp data aktarımı sorunsuz şekilde çalıştırdığında ekrana başarılı mesajını yazacaktır.

 

Oluşan kaydı me53n işlem kodundan görüntüleyebilirsiniz.

111014_2108_Calltransac4.png

 

(Visited 662 times, 1 visits today)

About Sinan Dilaver

Check Also

ABAP Program Ekranına Buton Ekleme

ABAP Program Ekranına Buton Ekleme   Daha önceki eğitimlerimizde yaptığımız ekrana, satıcı bilgilerini güncelleyebileceğimiz bir …

Bir Cevap Yazın