SAPфорум.RU
https://sapboard.ru/forum/

Динамический GUI status & title
https://sapboard.ru/forum/viewtopic.php?f=13&t=93009
Страница 1 из 1

Автор:  AL13SH [ Вт, май 17 2016, 10:18 ]
Заголовок сообщения:  Динамический GUI status & title

Приветствую! есть ли у кого какие соображения по этому поводу и возможно примеры?

Автор:  LAT [ Вт, май 17 2016, 14:13 ]
Заголовок сообщения:  Re: Динамический GUI status & title

2. Создаете гуи-заголовок 'xxx' содержащий строку &1, вызываете его в PBO как SET TITLEBAR 'xxx' WITH 'yyy'. Если 1 плейсхолдера - мало, в хелпе утверждается, что можно использовать до 9 плейсхолдеров.
1. С гуи-статусом немного хуже. В зависимости от задачи, можно создать гуи-статус на все случаи жизни (Вашей программы) и динамически показывать/скрывать/менять названия для кнопок. Или создать несколько гуи-статусов и переключать их в PBO. Или подключить уже готовые гуи-статусы других программ (только обрабатывать их команды, естественно, придется самостоятельно).

Автор:  AL13SH [ Вт, май 17 2016, 14:34 ]
Заголовок сообщения:  Re: Динамический GUI status & title

LAT написал(а):
2. Создаете гуи-заголовок 'xxx' содержащий строку &1, вызываете его в PBO как SET TITLEBAR 'xxx' WITH 'yyy'. Если 1 плейсхолдера - мало, в хелпе утверждается, что можно использовать до 9 плейсхолдеров.
1. С гуи-статусом немного хуже. В зависимости от задачи, можно создать гуи-статус на все случаи жизни (Вашей программы) и динамически показывать/скрывать/менять названия для кнопок. Или создать несколько гуи-статусов и переключать их в PBO. Или подключить уже готовые гуи-статусы других программ (только обрабатывать их команды, естественно, придется самостоятельно).



а поконкретнее про статус можно? или где почитать ? а лучше пример где это реализовано

Автор:  Besa [ Вт, май 17 2016, 16:24 ]
Заголовок сообщения:  Re: Динамический GUI status & title

AL13SH написал(а):
LAT написал(а):
2. Создаете гуи-заголовок 'xxx' содержащий строку &1, вызываете его в PBO как SET TITLEBAR 'xxx' WITH 'yyy'. Если 1 плейсхолдера - мало, в хелпе утверждается, что можно использовать до 9 плейсхолдеров.
1. С гуи-статусом немного хуже. В зависимости от задачи, можно создать гуи-статус на все случаи жизни (Вашей программы) и динамически показывать/скрывать/менять названия для кнопок. Или создать несколько гуи-статусов и переключать их в PBO. Или подключить уже готовые гуи-статусы других программ (только обрабатывать их команды, естественно, придется самостоятельно).



а поконкретнее про статус можно? или где почитать ? а лучше пример где это реализовано

Да куда еще конкретнее? :)
Пользуйтесь поиском и жмите f1 на операторах, многие вопросы отпадут.

Автор:  UKY [ Ср, май 18 2016, 04:18 ]
Заголовок сообщения:  Re: Динамический GUI status & title

Ещё в GUI статус можно динамические названия кнопок выводить. Можно заранее сделать миллион динамических кнопок и динамически же их обрабатывать. Вот только зачем? :)

P.S.: Пример динамической кнопки можно посмотреть в группе функций MEGUI, статус NORMAL.

Автор:  Besa [ Ср, май 18 2016, 17:45 ]
Заголовок сообщения:  Re: Динамический GUI status & title

UKY написал(а):
Ещё в GUI статус можно динамические названия кнопок выводить. Можно заранее сделать миллион динамических кнопок и динамически же их обрабатывать. Вот только зачем? :)

P.S.: Пример динамической кнопки можно посмотреть в группе функций MEGUI, статус NORMAL.

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

Автор:  AL13SH [ Пт, май 20 2016, 15:19 ]
Заголовок сообщения:  Re: Динамический GUI status & title

Besa написал:
UKY написал(а):
Ещё в GUI статус можно динамические названия кнопок выводить. Можно заранее сделать миллион динамических кнопок и динамически же их обрабатывать. Вот только зачем? :)

P.S.: Пример динамической кнопки можно посмотреть в группе функций MEGUI, статус NORMAL.

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


Вот это вроде, то что нужно! можно поподробнее?

смысл в том, чтобы одним viewer*ом выводить десятки разных моделей. или есть другой более простой способ?

Автор:  Удав [ Вс, май 22 2016, 23:04 ]
Заголовок сообщения:  Re: Динамический GUI status & title

AL13SH написал(а):
смысл в том, чтобы одним viewer*ом выводить десятки разных моделей. или есть другой более простой способ?

См. транзакцию SE16 :wink:

Автор:  LAT [ Пн, май 23 2016, 11:27 ]
Заголовок сообщения:  Re: Динамический GUI status & title

AL13SH написал(а):
смысл в том, чтобы одним viewer*ом выводить десятки разных моделей.
А гуи-статусы тут при чем?
ЗЫ. Если глянуть первый вопрос и эту фразу, создается впечатление, что [в терминологии MVC] Вы хотите к одному представлению подцепить несколько контроллеров.

Автор:  AL13SH [ Вт, май 24 2016, 12:02 ]
Заголовок сообщения:  Re: Динамический GUI status & title

Вот что в итоге получилось.

В ПБО экрана в зависимости от выбранных параметров присваиваются соответствующие параметры конструктора Представления.
Code:
IF ( p_add = abap_true OR p_dir = abap_true ) AND go_pay_viewer IS NOT BOUND.

    IF p_add = abap_true.
      gv_ddstruct = 'ZHR_T_PLANN_PAY'.
      gv_way = 'GO_PAY_WORKER->MT_OUTTAB'.
      lo_tdestr ?= cl_abap_tabledescr=>describe_by_data( go_pay_worker->mt_outtab ).
      CREATE DATA gv_tab TYPE HANDLE lo_tdestr.
      IF gv_tab IS BOUND.
        ASSIGN gv_tab->* TO <gt_outtab>.
        IF <gt_outtab> IS ASSIGNED.
          <gt_outtab> = go_pay_worker->mt_outtab.
        ENDIF.
      ENDIF.

    ELSEIF  p_dir = abap_true.
      go_pay_worker->fill_dir( ).
      gv_ddstruct = 'ZHR_T_BANK_DIR'.
      gv_way = 'GO_PAY_WORKER->MT_BANK_DIR'.
      lo_tdestr ?= cl_abap_tabledescr=>describe_by_data( go_pay_worker->mt_bank_dir ).
      CREATE DATA gv_tab TYPE HANDLE lo_tdestr.
      IF gv_tab IS BOUND.
        ASSIGN gv_tab->* TO <gt_outtab>.
        IF <gt_outtab> IS ASSIGNED.
          <gt_outtab> = go_pay_worker->mt_bank_dir.
        ENDIF.
      ENDIF.
    ENDIF.
    CREATE OBJECT go_pay_viewer
      EXPORTING
        iv_dynpro = '0100'
        iv_cont   = 'CONT1'.
  ENDIF.

  go_pay_viewer->setup_alv( i_has_top = abap_false ).
  go_pay_viewer->disp( ).



Так выглядит конструктор:
Code:
CLASS lcl_payment_viewer IMPLEMENTATION.

  METHOD constructor.
* В конструкторе мы используем динамические параметры для реализации возможности выводы разных гридов
    super->constructor( sy-repid ).
    me->md_repid          = sy-repid.
    me->md_dynnr          = iv_dynpro.
    me->md_container_name = iv_cont.
    me->md_ddstruct       = gv_ddstruct.
    me->md_data_table     = gv_way.
  ENDMETHOD.       


Выдержка из настроек альва
Code:
  METHOD setup_alv.

    super->setup_alv( i_has_top = abap_false ).

   ....

    CREATE OBJECT go_pay_controller .
      SET HANDLER go_pay_controller->on_toolbar   FOR me->mr_grid.
      SET HANDLER go_pay_controller->on_user_command   FOR me->mr_grid.
      SET HANDLER go_pay_controller->on_data_changed  FOR me->mr_grid.
  .....
.................t_fieldcatalog( ).
      me->set_handlers( ).
      me->set_layout( ).
      me->set_sort( ).
   
  ENDMETHOD.



разные гриды выводятся нормально, но не работают кнопки на тулбаре. В отладке всё корректно вроде, и до рефреша доходит, но на экране изменений я не вижу.

Вот тулбар:
Code:
METHOD on_toolbar.
    DATA:
           ls_toolbar  TYPE   stb_button
         .

    FIELD-SYMBOLS: <fs_alv_buttons> TYPE stb_button.


    READ TABLE e_object->mt_toolbar
        ASSIGNING <fs_alv_buttons>
        WITH KEY function = '&LOCAL&INSERT_ROW'.

    CHECK sy-subrc EQ 0.

    <fs_alv_buttons>-icon = icon_insert_row.

    <fs_alv_buttons>-function  = 'INS'.
    <fs_alv_buttons>-quickinfo = 'Добавить строку'(010).
    CLEAR ls_toolbar.

  ENDMETHOD.             



Вот обработка этой кнопки:
Code:
METHOD on_user_command.
    DATA:
               lt_rows   TYPE lvc_t_row
             , ls_rows   TYPE lvc_s_row
             , ls_outtab TYPE zhr_t_plann_pay
             , lv_pa_basis TYPE zhr_e_pay_basis
             , lv_txt      TYPE char_60
             , ls_bank_dir TYPE zhr_t_bank_dir
             .
    FIELD-SYMBOLS:
                  <ls_outtab> TYPE zhr_t_plann_pay
                  .


    CASE e_ucomm.
      WHEN 'INS'.
        IF p_add =  abap_true.
          ls_outtab-pay_basis = '1'.
          lv_pa_basis = ls_outtab-pay_basis.

          CALL FUNCTION 'ADS2KIPBRO_GET_DOMAIN_TEXT'
            EXPORTING
              e_table          = 'ZHR_T_PLANN_PAY'
              e_field          = 'PAY_BASIS'
              e_value          = lv_pa_basis
            IMPORTING
              i_text           = lv_txt
            EXCEPTIONS
              illegal_input    = 1
              domain_not_found = 2
              OTHERS           = 3.

          IF sy-subrc <> 0.
            MESSAGE text-007 TYPE 'I' DISPLAY LIKE 'E'.
          ENDIF.

          ls_outtab-pay_basis_text = lv_txt.
          ls_outtab-obj_mr_type = '0001'.
          CALL FUNCTION 'ADS2KIPBRO_GET_DOMAIN_TEXT'
            EXPORTING
              e_table          = 'ZHR_T_PLANN_PAY'
              e_field          = 'OBJ_MR_TYPE'
              e_value          = ls_outtab-obj_mr_type
            IMPORTING
              i_text           = lv_txt
            EXCEPTIONS
              illegal_input    = 1
              domain_not_found = 2
              OTHERS           = 3.

          IF sy-subrc <> 0.
            MESSAGE text-007 TYPE 'I' DISPLAY LIKE 'E'.
          ENDIF.
          ls_outtab-obj_mr_type_txt = lv_txt.
*        ls_outtab-initiatir_pay = sy-uname.
          ls_outtab-pay_mark = 'ОПЛАЧЕНО'.
          CALL FUNCTION 'ADS2KIPBRO_GET_DOMAIN_TEXT'
            EXPORTING
              e_table          = 'ZHR_T_PLANN_PAY'
              e_field          = 'PAY_MARK'
              e_value          = ls_outtab-pay_mark
            IMPORTING
              i_text           = lv_txt
            EXCEPTIONS
              illegal_input    = 1
              domain_not_found = 2
              OTHERS           = 3.

          IF sy-subrc <> 0.
            MESSAGE text-007 TYPE 'I' DISPLAY LIKE 'E'.
          ENDIF.
          ls_outtab-pay_mark = lv_txt.

          APPEND ls_outtab TO go_pay_worker->mt_outtab.
          go_pay_viewer->refresh( ).
        ELSEIF p_dir = abap_true.
          ls_bank_dir-currency = 'UE'.
          APPEND ls_bank_dir TO go_pay_worker->mt_bank_dir.
          go_pay_viewer->refresh( ).
        ENDIF.
    ENDCASE.

  ENDMETHOD.                    "on_user_command



Буду признателен, если поделитесь соображениям на тему: где я накосячил? :D

Автор:  AL13SH [ Вт, май 24 2016, 12:14 ]
Заголовок сообщения:  Re: Динамический GUI status & title

а всё сам нашёл ошибку! я филд символ не обновлял после добавления строки в таблицу

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/