Entegre Veri Erişimli SAP Liste Görüntüleyici (IDA’lı ALV)

Bu blogda SAP ALV ortamındaki iş uygulamalarında da kullanılabilir hale getirmek için yapılacak çalışmaları anlatacağız.

 Entegre Veri Erişimli SAP Liste Görüntüleyici (IDA’lı ALV)

SAP ALV ortamındaki iş uygulamalarında da kullanılabilir hale getirmek için, Liste Görüntüleyici'nin özel bir sürümünü, Entegre Veri Erişimli SAP Liste Görüntüleyici'yi (SAP List Viewer with Integrated Data Access) sunar. ALV'yi IDA ile kullanmak, çok büyük miktarda veri içeren tabloların kullanıcı arayüzünde görüntülenmesi mümkün kılar. Sıralama, gruplama veya filtreleme gibi işlemlerin sonuçları da çok hızlı yanıt süresi ile teslim edilir.

IDA’lı ALV, uygulama geliştiricilere yeni bir programlama ortamına geçmek zorunda kalmadan SAP HANA gibi bellek içi veri tabanını kullanma seçeneği sunar. Son kullanıcılar tanıdık arayüz üzerinde çalışmaya devam edebilir. ALV'de uzun süredir hesaplamaları yürütmek için kullanılan standart işlevler, IDA'lı ALV'de hala mevcuttur. Bir kullanıcının bakış açısına göre, iyi bilinen ALV işlevleriyle tüm ALV, bellek içi veri tabanlarının kullanımına göre ayarlanır. Yeni genel programlama modeli (CodingPushDown), bellek içi veri tabanları kullanılırken de en iyi şekilde desteklenir.

IDA’lı ALV kullanarak sisteminizden bir veritabanı tablosu görüntülemek için sadece bir satır kod yazmanız yeterli desem, bu heyecan verici değil mi?

 cl_salv_gui_table_ida=>create( iv_table_name = 'SPFLI' )->fullscreen( )->display( ).

Bir uygulama aracılığıyla IDA’lı ALV kullanarak neler yapabileceğimize bakalım.

Öncelikle tüm sürümler tarafından desteklenmediğinden sistem uygunluğunu kontrol etmemiz gerekiyor. Ardından CL_SALV_GUI_TABLE_IDA sınıfını kullanarak IDA objesini oluşturuyor ve gösterilecek maksimum satır sayısını belirliyoruz. Veri görüntüleme 2 milyar hücre ile sınırlı olduğundan bu kısım önem arz ediyor.

 "Check DB capabilities CHECK cl_salv_gui_table_ida=>db_capabilities( )->is_table_supported( iv_ddic_table_name = 'SPFLI'). "Create IDA DATA(o_ida) = cl_salv_gui_table_ida=>create( iv_table_name = 'SPFLI' ). "Set maximum rows recommended IF cl_salv_gui_table_ida=>db_capabilities( )->is_max_rows_recommended( ).   o_ida->set_maximum_number_of_rows( iv_number_of_rows = 2000 ). ENDIF. 

Programın çıktısı:

IF_SALV_GUI_TABLE_IDA arayüzüne ait metotları kullanarak uygulamamızı biraz daha geliştireceğiz.

IF_SALV_GUI_TABLE_IDA~SET_SELECT_OPTIONS

 "Define selection screen SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.   PARAMETERS p_carrid TYPE spfli-carrid.   SELECT-OPTIONS s_connid FOR spfli-connid. SELECTION-SCREEN END OF BLOCK b1.  DATA lr_carrid TYPE RANGE OF spfli-carrid.  IF p_carrid IS NOT INITIAL.   INSERT VALUE #( sign = 'I' option = 'EQ' low = p_carrid ) INTO TABLE lr_carrid. ENDIF.  "Range table collector DATA(o_sel) = NEW cl_salv_range_tab_collector( ). o_sel->add_ranges_for_name( iv_name = 'CARRID' it_ranges = lr_carrid[] ). o_sel->add_ranges_for_name( iv_name = 'CONNID' it_ranges = s_connid[] ).  "Get name and ranges o_sel->get_collected_ranges( IMPORTING et_named_ranges = DATA(lt_named_ranges) ).  "Set selected ranges to ALV o_ida->set_select_options( it_ranges = lt_named_ranges[] ). 

Seçim ekranı ve programın çıktısı:

IF_SALV_GUI_TABLE_IDA~FIELD_CATALOG

 DATA lt_field_names TYPE if_salv_gui_types_ida=>yts_field_name,   "Set avaible fields  lt_field_names = VALUE #(  ( CONV string('CARRID') )  ( CONV string('CONNID') )  ( CONV string('COUNTRYFR') )  ( CONV string('CITYFROM') )  ( CONV string('AIRPFROM') )  ( CONV string('COUNTRYTO') )  ( CONV string('CITYTO') )  ( CONV string('AIRPTO') )  ( CONV string('FLTIME') )  ( CONV string('DEPTIME') )  ( CONV string('ARRTIME') ) ).  o_ida->field_catalog( )->set_available_fields( its_field_names = lt_field_names ).

Field_catalog metodunu kullanarak sondaki dört alanı gizlemiş olduk. Programın çıktısı:

IF_SALV_GUI_TABLE_IDA~DEFAULT_LAYOUT

 DATA lt_sort_order  TYPE if_salv_gui_types_ida=>yt_sort_rule.  "Build sort order fields INSERT VALUE #( field_name = 'CITYFROM'                 descending = abap_true                 is_grouped = abap_true ) INTO TABLE lt_sort_order.  "Set Sort Order o_ida->default_layout( )->set_sort_order( EXPORTING it_sort_order = lt_sort_order ). 

Default_layout metodunu kullanarak verileri kalkış yapılan kent alanına göre sıralamış ve gruplandırmış olduk. Programın çıktısı:

IF_SALV_GUI_TABLE_IDA~TOOLBAR

 "Toolbar   o_ida->toolbar( )-> add_button( EXPORTING iv_fcode = 'DISP' iv_icon = '@16@' iv_text = 'Detay göster' ). 

Toolbar metodunu kullanarak “Detay göster” butonu ekledik. Programın çıktısı:

IF_SALV_GUI_TABLE_IDA~SELECTION

 "Set selection node o_ida->selection( )->set_selection_mode( EXPORTING iv_mode = 'SINGLE' ). 

Selection metoduyla tek satırı seçebilmeyi aktifleştirdik, son olarak event handler aracılığıyla seçilen satıra ait detay bilgilerini göstereceğiz. Tabi ki yine bir IDA’lı ALV kullanarak.

 CLASS lcl_handle_action DEFINITION.   PUBLIC SECTION.     METHODS:       constructor IMPORTING io_ida TYPE REF TO if_salv_gui_table_ida,        handle_action FOR EVENT function_selected OF if_salv_gui_toolbar_ida.     DATA:       o_ida TYPE REF TO if_salv_gui_table_ida. ENDCLASS.  CLASS lcl_handle_action IMPLEMENTATION.    METHOD constructor.     o_ida = io_ida.   ENDMETHOD.   METHOD handle_action.     DATA:       ls_spfli        TYPE spfli,       lt_named_ranges TYPE if_salv_service_types=>yt_named_ranges.      IF o_ida IS BOUND.       IF o_ida->selection( )->is_row_selected( ).         "get selected row         o_ida->selection( )->get_selected_row( IMPORTING es_row = ls_spfli ).          "Check DB capabilities         CHECK cl_salv_gui_table_ida=>db_capabilities( )->is_table_supported( iv_ddic_table_name = 'SFLIGHT').          DATA(o_ida_item) = cl_salv_gui_table_ida=>create( iv_table_name = 'SFLIGHT' ).          "Set maximum rows recommended         IF cl_salv_gui_table_ida=>db_capabilities( )->is_max_rows_recommended( ).           o_ida_item->set_maximum_number_of_rows( iv_number_of_rows = 2000 ).         ENDIF.          IF o_ida_item IS BOUND.            INSERT VALUE #( name = 'CARRID'                           sign = 'I'                           option = 'EQ'                           low = ls_spfli-carrid                           ) INTO TABLE lt_named_ranges.            INSERT VALUE #( name = 'CONNID'                           sign = 'I'                           option = 'EQ'                           low = ls_spfli-connid                           ) INTO TABLE lt_named_ranges.            o_ida_item->set_select_options( it_ranges = lt_named_ranges ).           o_ida_item->fullscreen( )->display( ).          ENDIF.       ELSE.         MESSAGE 'Satır seçilmedi' TYPE 'I'.       ENDIF.     ENDIF.   ENDMETHOD.  ENDCLASS. 

Lokal handler sınıfına ait DEFINITION, IMPLEMENTATION ve handle_action metodu tanımlanır ve set edilir.

 DATA(o_handler) = NEW lcl_handle_action( io_ida = o_ida ).  SET HANDLER o_handler->handle_action FOR o_ida->toolbar( ). 

Satır seçilip detay göster butonuna basıldığında satırdaki havayolu şirketi ve bağlantı numarasına ait SFLIGHT kayıtları yeni bir ALV ile gösterilir.