На основе недавно созданных классов продолжим знакомство с ALV. Для работы с ALV необходимо будет немного изменить класс вьюшки - вот она вся прелесть MVC. ALV - ABAP List Viewer. Скопируем класс ZCL_KRE_HW6_VIEW в класс ZCL_KRE_HW6_VIEW_ALV, транзакция SE80 правой кнопкой мыши ит.д, сохраняем в пакет и запрос. Первое что мы сделаем это добавим два новых атрибута как показано на рисунке.
Сохраняем.
На вкладке методы добавим еще два метода.
В методе SHOW_DATA изменим тип параметра на changing и добавим такой же параметр в каждый метод.
Затем добавим следующий код в методы.
METHOD show_alv_grid.
DATA:
lo_alv_function TYPE REF TO cl_salv_functions,
lo_alv_display TYPE REF TO cl_salv_display_settings,
lo_alv_sort TYPE REF TO cl_salv_sorts.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = gt_products ).
CATCH cx_salv_msg INTO lx_msg.
ENDTRY.
lo_alv_function = lo_alv->get_functions( ).
lo_alv_function->set_all( abap_true ).
lo_alv_display = lo_alv->get_display_settings( ).
lo_alv_display->set_striped_pattern( cl_salv_display_settings=>true ).
lo_alv_display->set_list_header( 'HomeWork №7 ALV MVC').
lo_alv_sort = lo_alv->get_sorts( ).
lo_alv_sort->add_sort( 'QUANTITY' ).
lo_alv->display( ).
ENDMETHOD.
METHOD show_alv_list.
DATA:
lo_alv_function TYPE REF TO cl_salv_functions,
lo_alv_display TYPE REF TO cl_salv_display_settings,
lo_alv_sort TYPE REF TO cl_salv_sorts.
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>true
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = gt_products ).
CATCH cx_salv_msg INTO lx_msg.
ENDTRY.
lo_alv_function = lo_alv->get_functions( ).
lo_alv_function->set_all( abap_true ).
lo_alv_display = lo_alv->get_display_settings( ).
lo_alv_display->set_striped_pattern( cl_salv_display_settings=>true ).
lo_alv_display->set_list_header( 'HomeWork №7 ALV MVC').
lo_alv_sort = lo_alv->get_sorts( ).
lo_alv_sort->add_sort( 'QUANTITY' ).
lo_alv->display( ).
ENDMETHOD.
METHOD show_data.
DATA: gs_products LIKE LINE OF gt_products.
NEW-PAGE LINE-SIZE 138.
WRITE: 'Day and time of program execution: ',sy-datum, ' ', sy-uzeit.
SKIP 2.
ULINE.
WRITE: / sy-vline,
AT (4) 'ID', sy-vline, AT (10) 'SUPPLY_ID', sy-vline, AT (17) 'NAME', sy-vline, AT (13) 'PURCHASE_COST', sy-vline,
AT (13) 'SALE_COST', sy-vline, AT (10) 'QUANTITY', sy-vline, AT (35) 'DESCRIPTION', sy-vline, 'SUPPLY_DATE', sy-vline.
ULINE.
LOOP AT gt_products INTO gs_products.
WRITE: / sy-vline,
AT (4) gs_products-id COLOR COL_KEY,
sy-vline,
AT (10) gs_products-supply_id COLOR COL_KEY,
sy-vline,
AT (17) gs_products-name COLOR COL_NORMAL,
sy-vline,
AT (13) gs_products-purchase_cost COLOR COL_NORMAL,
sy-vline,
AT (13) gs_products-sale_cost COLOR COL_NORMAL,
sy-vline,
AT (10) gs_products-quantity COLOR COL_NORMAL,
sy-vline,
AT (35) gs_products-description COLOR COL_NORMAL,
sy-vline,
AT (11) gs_products-supply_date COLOR COL_NORMAL,
sy-vline.
ENDLOOP.
ULINE.
ENDMETHOD.
Когда классы созданы, создадим главную программу ZKRE_HW7.
*&---------------------------------------------------------------------*
*& Report ZKRE_HW7
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zkre_hw7.
TABLES: sscrfields.
DATA: gt_products TYPE zkre_t_hw3,
gs_products LIKE LINE OF gt_products.
DATA: contr TYPE REF TO zcl_kre_hw6_cnt,
view TYPE REF TO zcl_kre_hw6_view_alv.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: p_id TYPE zkre_products-id.
PARAMETERS: p_name TYPE zkre_products-name.
SELECT-OPTIONS: p_quant FOR gs_products-quantity.
SELECT-OPTIONS: p_desc FOR gs_products-description NO INTERVALS.
PARAMETERS: p_s1 RADIOBUTTON GROUP uc1,
p_s2 RADIOBUTTON GROUP uc1,
p_s3 RADIOBUTTON GROUP uc1.
SELECTION-SCREEN END OF BLOCK bl1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN PUSHBUTTON 1(10) bt1 USER-COMMAND uc2.
INITIALIZATION.
bt1 = text-bt1.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'UC2'.
CLEAR: p_id, p_name, p_quant[], p_desc[].
ENDCASE.
START-OF-SELECTION.
CREATE OBJECT: contr.
CALL METHOD contr->get_object.
CALL METHOD contr->o_model->get_data
EXPORTING
p_name = p_name.
CREATE OBJECT: view.
IF p_s1 EQ 'X'.
CALL METHOD
view->show_data
CHANGING
gt_products = contr->o_model->it_products.
ELSEIF p_s2 EQ 'X'.
CALL METHOD
view->show_alv_list
CHANGING
gt_products = contr->o_model->it_products.
ELSEIF p_s3 EQ 'X'.
CALL METHOD
view->show_alv_grid
CHANGING
gt_products = contr->o_model->it_products.
ENDIF.
Запустим на выполнение.
В зависимости от того какую радиокнопку выбрали будем получать следующий результат.
Простой список - Simple List.
ALV List.
ALV Grid.
В ALV можно поиграться с панелью меню. Закомментируем в методе ALV класса zcl_kre_hw6_view_alv следующий код:
Запустим на выполнение и увидим результат где будет отсутствовать панель.
Вот таким образом в SAP можно организовать вывод информации через ALV не используюя спартанские обычные списки.
Филипп
Спасибо Вам большое за весь ваш курс! Я прошёл его с начала до конца, очень много приобрёл навыков в программировании и вообще хоть как-то сориентировался в системе SAP =)
R K
Спасибо за отзыв! Успехов в дальнейшем обучении :)
Александр
Здравствуйте!
Планируется ли продолжение?
Какие-то темы еще не освещены для уровеня Junior ABAP programmer?
Спасибо за курс!!!
RK
Еще не хватает тем: Smart/PDF forms, Enhancement Spot, BADI, Web dynpro.
Виктор Кореньков
Добрый день. Не давно начал изучение - курс прошел - огромная благодарность. Прошу Вас расширить его и продолжить изучение. Думаю все будет крайне благодарны! Спасибо.