Показаны сообщения с ярлыком TOOLBAR. Показать все сообщения
Показаны сообщения с ярлыком TOOLBAR. Показать все сообщения

27 апреля 2011 г.

ABAP: добавление своей кнопки в TOOLBAR ALV GRID

Для этого надо создать класс обработчик для обработки событий toolbar и user_command для ALV GRID.

Пример:

CLASS cl_trans_g_event_receiver DEFINITION.
  PUBLIC SECTION.
  METHODS:
    handle_toolbar
      FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive,
    handle_user_command
      FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.
ENDCLASS.

CLASS cl_trans_g_event_receiver IMPLEMENTATION.
  METHOD handle_toolbar.
    PERFORM method_trans_toolbar USING e_object.
  ENDMETHOD.

  METHOD handle_user_command.
    PERFORM method_trans_user_command USING e_ucomm.
  ENDMETHOD.
ENDCLASS.

* Добавление кнопки в тулбар
FORM METHOD_TRANS_TOOLBAR USING P_E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET.
  DATA: ty_toolbar TYPE stb_button.

* разделитель
  CLEAR ty_toolbar.
  ty_toolbar-butn_type = 3.
  APPEND ty_toolbar TO p_e_object->mt_toolbar.

* кнопка
  CLEAR ty_toolbar.
  ty_toolbar-function = 'MYBUTT'.
  ty_toolbar-icon = ICON_HISTORY.
  ty_toolbar-butn_type = 0.
  ty_toolbar-text = 'Моя кнопка'.

  APPEND ty_toolbar TO p_e_object->mt_toolbar.
ENDFORM.

* Обработка команд
FORM METHOD_TRANS_USER_COMMAND USING P_E_UCOMM TYPE SY-UCOMM.
  CASE p_e_ucomm.
    WHEN 'MYBUTT'.
*     ЧТО-ТО ДЕЛАЕМ
  ENDCASE.
ENDFORM.

Ну и надо незабыть инициализировать все это после создания грида:

  DATA: trans_g_event_receiver TYPE REF TO cl_trans_g_event_receiver.

  CREATE OBJECT trans_g_event_receiver.

  SET HANDLER trans_g_event_receiver->handle_toolbar FOR trans_grid.
  SET HANDLER trans_g_event_receiver->handle_user_command FOR trans_grid.
Подробнее...

3 ноября 2010 г.

ABAP: добавление кнопок (и не только) в TOOLBAR ALV GRID, созданного через REUSE_ALV_GRID_DISPLAY

REUSE_ALV_GRID_DISPLAY позволяет указать PF-STATUS который будет использоваться при выводе грида, и название формы в которой будет происходить обработка юзер-комманд. Этим и стоит воспользоваться.

PF-STATUS лучше делать не с нуля, а в транзакции SE41 скопировать из программы SAPLSLVC_FULLSCREEN статус STANDARD_FULLSCREEN, чтобы иметь на тулбаре все стандартные кнопки грида.

После того как статус создан можно писать код.

ПРИМЕР:


В скопированный GUI-STATUS добавил кнопку


*--------------------------------------------------------------*

* сохраняем в перемнную имя программы
  lv_repid = sy-repid.


* вызывавем ФМ, указываем в нем названия форм которые
* устанавливают pf-status и обрабатывают команды
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM                = lv_repid
      I_CALLBACK_PF_STATUS_SET          = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'
      I_GRID_TITLE                      = 'Отчет по планированию доходов'
      IT_FIELDCAT_LVC                   = lt_fcat
    TABLES
      T_OUTTAB                          = it_plantab
    EXCEPTIONS
      PROGRAM_ERROR                     = 1
      OTHERS                            = 2
            .      

* устанавливаем PF-STATUS
FORM SET_PF_STATUS USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'GUI_ALVGRIDX'.
ENDFORM.

* обрабатываем команды
FORM USER_COMMAND USING p_ucomm LIKE sy-ucomm
                        ps_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN 'PXLS'.
      " выполняем что-то крайне важное
  ENDCASE.
ENDFORM.

*--------------------------------------------------------------*
Подробнее...

29 октября 2010 г.

ABAP: добавление своей кнопки в TOOLBAR SELECTION-SCREEN

Один из способов добавить свою кнопку в toolbar на SELECTION-SCREEN. 

*--------------------------------------------------------------*
* Объявляем специальную системную 
* структуру для работы с экраном
  TABLES: sscrfields.
* Объявляем структуру которую будем 
* использовать для формирования текстов для кнопок
  DATA: functxt TYPE smp_dyntxt.


  SELECT-OPTIONS...
  PARAMETERS...
* Активируем кнопку номер 1
  SELECTION-SCREEN FUNCTION KEY 1.

* в этом событии создаем кнопку и записываем 
* ее в sscrfields
  AT SELECTION-SCREEN OUTPUT.
    functxt-icon_id = icon_create.
    functxt-quickinfo = 'Создать'.
    functxt-icon_text = 'Создать'.
    MOVE funcxt TO sscrfields-functxt_01.

* Обрабатываем реакцию на нажатие кнопки  
  AT SELECTION-SCREEN.
    CASE sscrfields-ucomm.
      WHEN 'FC01'.
      "тут происходит что-то важное
      "и тут
      "и еще немного тут
    ENDCASE.
*--------------------------------------------------------------*

В результате получится что-то в этом духе:


Подробнее...