Текущее время: Пн, июн 23 2025, 07:18

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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