Текущее время: Вс, июн 22 2025, 17:50

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Счётчик инстанций
СообщениеДобавлено: Ср, июн 08 2016, 10:30 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
Приветствую!
идея вот в чём: хочу организовать работу с разными инстанциями класса дифференцированно т.е. для каждой инстанции разные параметры и разные наборы методов
подскажите пример какой - нибудь?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Счётчик истанций
СообщениеДобавлено: Ср, июн 08 2016, 11:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
AL13SH написал(а):
Приветствую!
идея вот в чём: хочу организовать работу с разными инстанциями класса дифференцированно т.е. для каждой инстанции разные параметры и разные наборы методов
подскажите пример какой - нибудь?

Тогда это уже разные классы!
Вообще-то ничего непонятно, в чём задача, что нужно разработать?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик истанций
СообщениеДобавлено: Ср, июн 08 2016, 12:18 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
AL13SH написал(а):
хочу организовать работу с разными инстанциями класса дифференцированно т.е. для каждой инстанции разные параметры и разные наборы методов
подскажите пример какой - нибудь?
Вопрос сформулирован как-то странно и, подозреваю, некорректно. Вы хотите: 1) чтобы какая-то часть атрибутов и методов для разных инстанций совпадала, а какая-то - нет? Или: 2) чтобы одни и те же методы могли вызываться с разными наборами параметров? Или: 3) сделать javascript-подобное наследование? 4) Или именно то, что написали?
ЗЫ. Кстати, название темы "Счётчик истанций" лично у меня как-то совершенно не вяжется с вопросом.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик истанций
СообщениеДобавлено: Ср, июн 08 2016, 14:55 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
Задачу уже практически решил.

что именно непонятно в постановке?

есть класс наследник от глобального класса. инстанция этого класса обладает неким набором параметров, которые я хочу выставлять дифференцировано в зависимости от конкретных нужд. Но! сколько именно инстанций будет я не знаю. Поэтому не могу прописать
Code:
PUBLIC SECTION.
DATA:
mo_1 TYPE REF ..
mo_2 TYPE REF....

и т.д.


Количество инстанций зависит от конкретных практических задач, выполняемых этим ПО.

Вопрос: как динамически вести количество инстанций?

На данный момент решаю так:
- создал таблицу со структурой: counter/объект типизированный как целевой класс\
- определил статический метод create в котором создаю объект с требуемыми атрибутами и кладу его в таблицу(предварительно считав количество объектов в ней и выставив соответствующий counter)
- когда требуется обратиться к этому объекту то считываю его из таблицы по counter


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Счётчик истанций
СообщениеДобавлено: Ср, июн 08 2016, 15:02 
Начинающий
Начинающий

Зарегистрирован:
Вт, окт 18 2011, 07:55
Сообщения: 13
Пол: Мужской
Посмотрите классы CL_OBJECT_MAP и CL_OBJECT_COLLECTION, возможно то что нужно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Счётчик истанций
СообщениеДобавлено: Ср, июн 08 2016, 18:21 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 23 2006, 17:37
Сообщения: 197
Откуда: Москва
Пол: Мужской
Просто не совсем понятна была терминология.

Согласитесь, "разный набор методов" и "разные значения параметров" - это немного различающиеся понятия.

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

Вот, очень полезная статья о шаблонах проектирования.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик истанций
СообщениеДобавлено: Чт, июн 09 2016, 12:45 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
AL13SH, не забудьте что Ваш код придется кому то сопровождать :)
сорри за оффтоп.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик инстанций
СообщениеДобавлено: Пт, июн 10 2016, 09:11 
Специалист
Специалист

Зарегистрирован:
Пт, янв 22 2016, 10:20
Сообщения: 170
Решил так: используем переменные для передачи параметров конструктора VIewer, создаём несколько инстанций
его класса(каждому подэкрану по инстанции) кладём их в табличку, при необходимрсти считываем отуда по Counter
основной экран
Code:
PROCESS BEFORE OUTPUT.
  MODULE status_0111.

  CALL SUBSCREEN sub_maindata
       INCLUDING sy-repid '0112'.

  CALL SUBSCREEN sub_history
       INCLUDING sy-repid '0113'.

  CALL SUBSCREEN sub_chat
       INCLUDING sy-repid '0114'.
*
PROCESS AFTER INPUT.

  CALL SUBSCREEN sub_maindata.
  CALL SUBSCREEN sub_history.
  CALL SUBSCREEN sub_chat.

  MODULE user_command_0111.


ПБОха 112 подэкрана
Code:
MODULE status_0112 OUTPUT.

  go_application->fill_doc( ).
  go_application->fill_req( ).

  go_application->set_comment( ).
  LOOP AT SCREEN.
    CASE <gs_signdoc>-signreq_type.
      WHEN   '01'.
        CASE screen-group2.
          WHEN '001'.
            screen-active = 0.
            MODIFY SCREEN.
          WHEN OTHERS.
        ENDCASE.

      WHEN '02' OR '03' OR '04' OR '09' OR '99'.

      WHEN OTHERS.
        CASE screen-group1.
          WHEN '001'.
            screen-active = 0.
            MODIFY SCREEN.
          WHEN OTHERS.
        ENDCASE.
    ENDCASE.
  ENDLOOP.

  CLEAR wa_viewer.
  CASE <gs_signdoc>-signreq_type.
    WHEN   '01'.
      lcl_viewer=>mv_viewer_cont = '1'.
      gv_ddstruct = 'ZHR_S_SIGNDOC_RQ'.
      gv_way = 'GO_APPLICATION->MT_REQ'.
      lcl_viewer=>create(
        EXPORTING
          iv_dynpro1 = '0111'
          iv_cont1  = 'INFO_SIGNDOC' ).

      READ TABLE lcl_viewer=>mt_inst_counter INTO lcl_viewer=>ms_inst_counter
        WITH TABLE KEY count = lcl_viewer=>mv_viewer_cont.
      wa_viewer = lcl_viewer=>ms_inst_counter-object.

      wa_viewer->setup_alv( i_has_top = abap_false ).

    WHEN '04' OR '05' OR '06' OR '07' OR '08'.
      lcl_viewer=>mv_viewer_cont = '1'.
      gv_ddstruct = 'ZHR_S_SIGNDOC_PR'.
      gv_way = 'GO_APPLICATION->MT_PROJ'.
      lcl_viewer=>create(
        EXPORTING
          iv_dynpro1 = '0111'
          iv_cont1  = 'INFO_SIGNDOC' ).

      READ TABLE lcl_viewer=>mt_inst_counter INTO lcl_viewer=>ms_inst_counter
        WITH TABLE KEY count = lcl_viewer=>mv_viewer_cont.
      wa_viewer = lcl_viewer=>ms_inst_counter-object.

      wa_viewer->setup_alv( i_has_top = abap_false ).

    WHEN OTHERS.
  ENDCASE.
ENDMODULE.


ПБОха 113
Code:
MODULE STATUS_0113 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.
" Создаем окно с историей изменений зароса
    IF go_application->mo_history IS NOT BOUND.
      CREATE OBJECT go_application->mo_history.
    ENDIF.
    go_application->mo_history->set_history_list( ).

CLEAR wa_viewer.

    lcl_viewer=>mv_viewer_cont = '2'.
    gv_ddstruct = 'ZHR_T_HS_SIGNDOC'.
    gv_way = 'GO_APPLICATION->MO_HISTORY->MT_OUTTAB'.
    lcl_viewer=>create(
      EXPORTING
        iv_dynpro1 = '0111'
        iv_cont1  = 'HISTORY_CONT' ).

    READ TABLE lcl_viewer=>mt_inst_counter INTO lcl_viewer=>ms_inst_counter
      WITH TABLE KEY count = lcl_viewer=>mv_viewer_cont.
    wa_viewer = lcl_viewer=>ms_inst_counter-object.

    wa_viewer->setup_alv( i_has_top = abap_false ).
ENDMODULE.                 " STATUS_0113  OUTPUT




волшебный метод
Code:
METHOD create.
    DATA:
          lo_viewer TYPE REF TO lcl_viewer.

    CREATE OBJECT lo_viewer
      EXPORTING
        iv_dynpro = iv_dynpro1
        iv_cont   = iv_cont1.

    lcl_viewer=>ms_inst_counter-count = mv_viewer_cont.
    lcl_viewer=>ms_inst_counter-object = lo_viewer.
    APPEND lcl_viewer=>ms_inst_counter TO lcl_viewer=>mt_inst_counter.


  ENDMETHOD.                    "create


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB