29. 7-я программа в SAP. Использование ALV.

На основе недавно созданных классов продолжим знакомство с ALV. Для работы с ALV  необходимо будет немного изменить класс вьюшки - вот она вся прелесть MVC. ALV - ABAP List Viewer. Скопируем класс ZCL_KRE_HW6_VIEW в класс ZCL_KRE_HW6_VIEW_ALV, транзакция SE80 правой кнопкой мыши ит.д, сохраняем в пакет и запрос. Первое что мы сделаем это добавим два новых атрибута как показано на рисунке.

image_435

Сохраняем.

На вкладке методы добавим еще два метода.

image_436

В методе SHOW_DATA изменим тип параметра на changing и добавим такой же параметр в каждый метод.

image_437

image_438

Затем добавим следующий код в методы.

image_439

 

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.

 

image_440

 

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.

 

image_441

 

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.

image_442

image_443

image_444

 

*&---------------------------------------------------------------------*
*& 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.

Запустим на выполнение.

image_445

В зависимости от того какую радиокнопку выбрали будем получать следующий результат.

Простой список - Simple List.

image_446

ALV List.

image_447

ALV Grid.

image_448

В ALV можно поиграться с панелью меню. Закомментируем в методе ALV класса zcl_kre_hw6_view_alv следующий код:

image_449

Запустим на выполнение и увидим результат где будет отсутствовать панель.

image_450

Вот таким образом в SAP можно организовать вывод информации через ALV не используюя спартанские обычные списки.

Комментарии

  • Филипп
    Филипп

    Спасибо Вам большое за весь ваш курс! Я прошёл его с начала до конца, очень много приобрёл навыков в программировании и вообще хоть как-то сориентировался в системе SAP =)

    on 08.11.2016 14:51
    R K
    R K

    Спасибо за отзыв! Успехов в дальнейшем обучении :)

    on 08.11.2016 18:16
  • Александр
    Александр

    Здравствуйте!
    Планируется ли продолжение?
    Какие-то темы еще не освещены для уровеня Junior ABAP programmer?
    Спасибо за курс!!!

    on 28.11.2016 21:15
    RK
    RK

    Еще не хватает тем: Smart/PDF forms, Enhancement Spot, BADI, Web dynpro.

    on 30.11.2016 11:10

Чтобы оставить комментарий, необходимо Войти или Зарегистрироваться.