Toplu veri girişi yapmak için kullanılır. İşlem kodunu çalıştırılır ve kullanıcı verileri giriyormuş gibi ekrandaki alanlara veriler transfer edilir. Alana girilen metin, imleç pozisyonu, tıklanılan buton gibi bilgiler kaydedilir. Örnek giriş kaydı SHDB işlem kodu kaydedilebilir. SM35 işlem kodu ile toplu girdi oturumları izlenilir.
Örnek: ZSFLIGHT tablosuna batch input ile kayıt ekleyen program örneği. Örnek üç aşamalıdır.
- ZSFLIGHT tablosuna kayıt ekleyen programın hazırlanması (Standart işlem kodlarına veri aktarımı yapılacağı zaman bu adıma gerek yoktur).
- SHDB ile örnek toplu girdi örneği hazırlanması,
- Toplu girdi işlemini yapacak program hazırlanması
ZSFLIGHT tablosuna kayıt ekleyen programın hazırlanması.
Ekran 100’ ü açın. F6 tuşuna basarak alan seçim ekranını açın. Table/Field Name alanına ZSFLIGHT tablosunu yazın ve Get from Dictionary butonuna tıklayın. ZSFLIGHT tablosuna bağlı alanlar listelenecektir.
Alan seçim penceresinden ilke beş alanı seçin ve ekrana sürükleyin.
Ekrana bir tane buton ekleyin. FctCode alanına KAYDET girin.
GUI Status nesnesi oluşturun ve alanlarını aşağıdaki şekilde kaydedin.
100 ekranı Element list sekmesinden OK kodu alanına OK_CODE ismini girin.
Flow logic sekmesinde yorum satırlarını kaldırın.
Aşağıdaki kodu ekleyin.
TABLES zsflight.
DATA: ok_code LIKE sy-ucomm.
START-OF-SELECTION.
CALL SCREEN 100.
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘100’.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN ‘GERI’ OR ‘CIKIS’ OR ‘IPTAL’.
LEAVE TO SCREEN 0.
WHEN ‘&KAYDET’.
MODIFY zsflight FROM zsflight.
COMMIT WORK AND WAIT.
MESSAGE ‘Kayıtlar saklandı.’ TYPE ‘S’.
ENDCASE.
ENDMODULE.
Programa işlem kodu ekleyin. Nesne listesi içerisinde program ismine sağ tıklayın ve Create->Transaction seçeneğini seçin.
Create Transaction penceresi açılacaktir. Alanları aşağıdaki şekilde doldurun ve devam edin.
İşlem kodu özellikleri açılacaktır. Alanları resimdeki gibi doldurun ve kaydedin.
Package’ a bağlama ve request alma işlemleri sorulacaktır. Çalışma şeklinize göre ilerleyin.
SHDB ile örnek toplu girdi örneği oluşturulması
SHDB işlem kodunu çalıştırın. Yeni Kayıt butonuna tıklayın.
Kayıt yarat ekranı açılacaktır. Alanları resimdeki gibi doldurun. Kaydı başlat butonuna tıklayın.
Kayıt yapılacak işlem kodu çalıştırılır. İlk adımda tanımlanan 100 ekranı açılır. Ekran alanlarını doldurun ve kaydet butonuna tıklayın.
Toplu girdi kaydına ait bilgiler Transaction Recorder ekranına gelir.
Bu ekranda değişiklik yapmadan kaydet butonuna tıklayın. Toplu girdi kaydı oluşturulacaktır.
Toplu giriş kaydını daha sonra üzerine çift tıklayarak içeriğini görüntüleyebilirsiniz.
Oluşturulan kayıttan örnek program oluşturulabilir. Bunun kayıt seçilir ve Program butonuna tıklanır.
Açılan ekranda yeni programın adı girilir ve devam edilir.
Program özellikleri ekranı açılacaktır. Program tipini 1 (Yürütülebilir program) olarak seçip, Source code butonuna tıklayın.
Package’ a bağlama ve request alma işlemlerini yapın. Bu adımdan sonra program kodu açılır. Program oluşturarak alanları kendi programınıza kolay bir şekilde aktarabilirsiniz.
Toplu girdi işlemini yapacak program
DATA : g_docking_container TYPE REF TO cl_gui_docking_container,
g_alv_grid TYPE REF TO cl_gui_alv_grid,
ok_code LIKE sy-ucomm,
gt_sflight TYPE STANDARD TABLE OF sflight,
gs_sflight TYPE sflight.
DATA: gt_bdcdata TYPE STANDARD TABLE OF bdcdata,
gs_bdcdata TYPE bdcdata.
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS:
alv_olustur,
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive
sender,
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm sender.
ENDCLASS.
DATA g_alv TYPE REF TO lcl_alv.
CLASS lcl_alv IMPLEMENTATION.
METHOD alv_olustur.
DATA: lt_fieldcat TYPE lvc_t_fcat,
ls_fieldcat TYPE lvc_s_fcat,
ls_variant TYPE disvariant,
ls_layout TYPE lvc_s_layo,
lt_toolbar_excluding TYPE ui_functions,
lv_repid TYPE sy-repid.
DATA: lt_cells TYPE lvc_t_cell,
ls_cells TYPE lvc_s_cell.
IF g_docking_container IS INITIAL.
CREATE OBJECT g_docking_container
EXPORTING
side = g_docking_container->dock_at_top
extension = 2000.
CREATE OBJECT g_alv_grid
EXPORTING
i_parent = g_docking_container
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’
EXPORTING
i_structure_name = ‘ZSFLIGHT’
CHANGING
ct_fieldcat = lt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT lt_fieldcat INTO ls_fieldcat.
ls_fieldcat-edit = ‘X’.
MODIFY lt_fieldcat FROM ls_fieldcat.
ENDLOOP.
ls_layout-box_fname = ‘BOX’.
lv_repid = sy-repid.
ls_variant-report = lv_repid.
CALL METHOD g_alv_grid->set_table_for_first_display
EXPORTING
i_save = ‘A’
is_variant = ls_variant
is_layout = ls_layout
it_toolbar_excluding = lt_toolbar_excluding
CHANGING
it_outtab = gt_sflight
it_fieldcatalog = lt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
SET HANDLER me->handle_toolbar FOR g_alv_grid.
SET HANDLER me->handle_user_command FOR g_alv_grid.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = g_alv_grid.
CALL METHOD g_alv_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ELSE.
CALL METHOD g_alv_grid->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
ENDIF.
ENDMETHOD.
METHOD handle_toolbar.
DATA ls_toolbar TYPE stb_button.
CLEAR ls_toolbar. MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR ls_toolbar.
MOVE ‘BATCHINPUT’ TO ls_toolbar-function.
MOVE icon_activity TO ls_toolbar-icon.
MOVE ‘Batch input’ TO ls_toolbar-text.
MOVE ‘Batch input’ TO ls_toolbar-quickinfo.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.
METHOD handle_user_command.
DATA: et_index_rows TYPE lvc_t_row,
et_row_no TYPE lvc_t_roid,
wa_row_no LIKE LINE OF et_row_no.
DATA: ls_sflight TYPE sflight,
lv_price type c length 18.
DATA: lt_messtab TYPE STANDARD TABLE OF bdcmsgcoll,
ls_messtab TYPE bdcmsgcoll.
CASE e_ucomm.
WHEN ‘BATCHINPUT’.
CALL METHOD g_alv_grid->get_selected_rows
IMPORTING
et_index_rows = et_index_rows
et_row_no = et_row_no.
LOOP AT et_row_no INTO wa_row_no .
READ TABLE gt_sflight INTO ls_sflight INDEX wa_row_no-row_id.
PERFORM bdc_dynpro USING ‘Z_R_TEST_Y’ ‘0100’.
PERFORM bdc_field USING ‘BDC_CURSOR’ ‘ZSFLIGHT-CURRENCY’.
PERFORM bdc_field USING ‘BDC_OKCODE’ ‘=&KAYDET’.
PERFORM bdc_field USING ‘ZSFLIGHT-CARRID’ ls_sflight-carrid.
PERFORM bdc_field USING ‘ZSFLIGHT-CONNID’ ls_sflight-connid.
PERFORM bdc_field USING ‘ZSFLIGHT-FLDATE’ ls_sflight-fldate.
WRITE ls_sflight-price TO lv_price.
PERFORM bdc_field USING ‘ZSFLIGHT-PRICE’ lv_price.
PERFORM bdc_field USING ‘ZSFLIGHT-CURRENCY’ ls_sflight-currency.
CALL TRANSACTION ‘Z_J_BATCHINPUT’ USING gt_bdcdata
MODE ‘A’
UPDATE ‘S’
MESSAGES INTO lt_messtab.
ENDLOOP.
LOOP AT lt_messtab INTO ls_messtab WHERE msgtyp = ‘AEX’.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
MESSAGE ID ls_messtab-msgid TYPE ls_messtab-msgtyp NUMBER ls_messtab-msgnr
WITH ls_messtab-msgv1 ls_messtab-msgv2 ls_messtab-msgv3 ls_messtab-msgv4.
ELSE.
READ TABLE lt_messtab INTO ls_messtab INDEX 1.
IF sy-subrc = 0.
MESSAGE ID ls_messtab-msgid TYPE ls_messtab-msgtyp NUMBER ls_messtab-msgnr
WITH ls_messtab-msgv1 ls_messtab-msgv2 ls_messtab-msgv3 ls_messtab-msgv4.
ENDIF.
ENDIF.
CALL METHOD sender->refresh_table_display.
ENDCASE.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
SELECT * FROM sflight
INTO CORRESPONDING FIELDS OF TABLE gt_sflight UP TO 10 ROWS.
CREATE OBJECT g_alv.
CALL SCREEN 0100.
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘100’.
CALL METHOD g_alv->alv_olustur.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN ‘GERI’ OR ‘CIKIS’ OR ‘IPTAL’.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
FORM bdc_dynpro USING program dynpro.
CLEAR gs_bdcdata.
gs_bdcdata-program = program.
gs_bdcdata-dynpro = dynpro.
gs_bdcdata-dynbegin = ‘X’.
APPEND gs_bdcdata TO gt_bdcdata.
ENDFORM.
FORM bdc_field USING fnam fval.
CLEAR gs_bdcdata.
gs_bdcdata-fnam = fnam.
gs_bdcdata-fval = fval.
APPEND gs_bdcdata TO gt_bdcdata.
ENDFORM.
ZSFLIGHT tablosuna yeni kayıt gelmiştir.