Текущее время: Сб, сен 22 2018, 14:40

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Чт, апр 26 2018, 15:53 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 17:38
Сообщения: 227
Наконец-то решил сделать WIZARD для генерации шаблона программы на основе ALV. Т.е. на селекционном экране вводим имя программы+запрос+пакет+описание и генерируется сама программ (с инициализацией ALV) + экран + GUI- статус (R_BACK+R_CANCEL+R_EXIT) + заголовок.

Собственно вопрос есть что-то для добавления экранов и GUI статусов (а может и программ) чтобы не писать пакетники на все это дело?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Чт, апр 26 2018, 21:28 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 17:06
Сообщения: 257
А не проще сделать программу-шаблон, и просто копировать ее?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Чт, апр 26 2018, 21:38 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 17:38
Сообщения: 227
Системы могут быть разные.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Чт, апр 26 2018, 22:00 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, апр 12 2006, 13:43
Сообщения: 842
Откуда: СССР
Пол: Мужской
Валерка написал(а):
.....Собственно вопрос есть что-то для добавления экранов и GUI статусов (а может и программ) чтобы не писать пакетники на все это дело?


Есть внутри ABAP команды: generate dynpro, activate dynpro и еще парочка команд для создания модификации окон. Но эти команды описаны в Хелпе, как "для внутреннего использования SAP-ом". Для программ есть аналогичные. Про генерацию GUI статусов ничего сказать не могу.

_________________
Никого не трогаю, примусы починяю.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка  Тема решена
СообщениеДобавлено: Пт, апр 27 2018, 08:38 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 17:38
Сообщения: 227
Решение получилось следующее:
Программы (и INCLUDE) - можно создать через пакетный ввод
GUI-Заголовок - тоже через пакетный ввод
Экран - создать экран можно, но без спец элемента. Поэтому подумав понял что можно копировать стандартный экран группы функций SLVC_FULLSCREEN экран 500 (ну или что-то другое подходящее из стандарта)
GUI-статус - это сложнее всего, так как указать команды через пакетный ввод не получается. Однако тоже можно копировать из какой-нибудь стандартной программы подходящий.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Пт, апр 27 2018, 08:52 
Специалист
Специалист

Зарегистрирован:
Ср, дек 22 2010, 20:49
Сообщения: 108
Посмотрите как это реализовано в SAPLINK

_________________
Человек готов работать 24 часа в сутки, лишь бы ничего не делать.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Пт, апр 27 2018, 11:07 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 17:06
Сообщения: 257
Валерка написал(а):
Системы могут быть разные.
Не понятно, почему эта проблема касается программы-шаблона, но не касается визарда. Но если так надо: по поводу гуи-статустов имеет смысл обратить внимание на ФМ-ы RS_CUA* (RS_CUA_INTERNAL_FETCH, RS_CUA_INTERNAL_WRITE, RS_CUA_GENERATE_STATUS и т.д.). С экранами можно побороться с помощью IMPORT/EXPORT DYNPRO. В принципе, на этом форуме участники Parazit и DKiyanov выкладывали свои разработки, в которых производится выгрузка-загрузка программ, примеры создания экранов и гуи-статусов можно глянуть в их коде.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Пт, апр 27 2018, 14:49 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 17:38
Сообщения: 227
С GUI решил все через создание нового GUI с помощью пакетника. А потом RS_CUA_INTERNAL_FETCH+<добавление своих команд>+RS_CUA_INTERNAL_WRITE.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса,
СообщениеДобавлено: Сб, апр 28 2018, 10:31 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 10:38
Сообщения: 138
Валерка написал(а):
Решение получилось следующее:
Программы (и INCLUDE) - можно создать через пакетный ввод
GUI-Заголовок - тоже через пакетный ввод
Экран - создать экран можно, но без спец элемента. Поэтому подумав понял что можно копировать стандартный экран группы функций SLVC_FULLSCREEN экран 500 (ну или что-то другое подходящее из стандарта)
GUI-статус - это сложнее всего, так как указать команды через пакетный ввод не получается. Однако тоже можно копировать из какой-нибудь стандартной программы подходящий.

Программы - можно генерировать на прямую, без пакетника.
Только перед этим необходимо проверить:
1) нет ли уже такой программы
я использовал кусок ниже для поиска по маске, т.к. у меня все инклюды генерятся по одному шаблону, например:
ZABAP_test
ZABAP_test_TOP
ZABAP_test_PBO
...
Code:
      SELECT DISTINCT name
             FROM trdir
             INTO CORRESPONDING FIELDS OF TABLE lt_programm
             WHERE name LIKE l_programm.

2) прогнать имя программы через ФМ RS_PROGRAM_CHECK_NAME, чтобы проверить корректность имени.
3) проверить корректность пакета
Code:
      SELECT SINGLE *
        FROM tdevc
        INTO CORRESPONDING FIELDS OF ls_tdevc
        WHERE devclass = pr_devcl.

для генерации текста можно использовать макросы и писать его прямо в коде(как я делал ниже), а можно вынести например в документы smw0
Code:
  DEFINE _0_.
    append &1 to lt_abaptext[].
  END-OF-DEFINITION.

FORM create_include_t
  CHANGING
    ct_abaptext             TYPE abapprog.

  DATA:
    lt_abaptext             TYPE abapprog.

  _0_ ''.
  _0_ ' DATA: gt_data type table of but000.'.
  _0_ ''.
  _0_ ' CLASS cl_alv_handler DEFINITION DEFERRED.'.
  _0_ '*ALV'.
  _0_ ' DATA: g_grid            TYPE REF TO cl_gui_alv_grid,'.
  _0_ '       g_container       TYPE REF TO cl_gui_custom_container,'.
  _0_ '       g_event_receiver  TYPE REF TO cl_alv_handler.'.

  INSERT LINES OF lt_abaptext INTO TABLE ct_abaptext[].
ENDFORM.

После того как получили текст - создаём программу. В своей программе я почему-то делал свой перформ, точно почему - не помню. Можете попробовать использовать ФМ RPY_PROGRAM_INSERT.
Проверки полномочий:
Code:
  CALL FUNCTION 'RS_ACCESS_PERMISSION'
    EXPORTING
      authority_check          = 'X'
      global_lock              = space
      mode                     = 'INSERT'
      object                   = i_programm
      object_class             = 'ABAP'
...
  CALL FUNCTION 'RS_ACCESS_PERMISSION'
    EXPORTING
      authority_check          = 'X'
      global_lock              = space
      mode                     = 'INSERT'
      object                   = i_programm
      object_class             = 'TEXT'
...

Добавление в запрос
Code:
    CALL FUNCTION 'RS_CORR_INSERT'
      EXPORTING
        object       = i_programm
        object_class = 'ABAP'
        global_lock  = abap_true
        devclass     = pr_devcl
        korrnum      = l_trkorr
      EXCEPTIONS
        OTHERS       = 1.

Создание программы
Code:

  CLEAR:
    lw_trdir.
  lw_trdir-name   = i_programm.  "Наименование программы
  lw_trdir-edtx   = abap_false.  "Блокировка редактора
  lw_trdir-dbna   = abap_false.  "Log. Datenbank
  CLEAR:
    lw_trdir-sqlx,               "Lesen/Aendern mit SAP-SQL
    lw_trdir-dbapl,              "Datenbank aus der Anwendung
    lw_trdir-clas,               "Programmklasse
    lw_trdir-type,               "Nr. des Selektionsbildes der
    lw_trdir-occurs,             "OCCURS-Paramater dynamisch
    lw_trdir-unam,               "Name des letzten Anderers
    lw_trdir-udat.               "Фnderungsdatum
  IF ( i_type = 'M' ).
    lw_trdir-subc = '1'.         "Тип программы
  ELSE.
    lw_trdir-subc = 'I'.         "Тип программы
  ENDIF.
  lw_trdir-appl   = '*'.         "Приложение
  lw_trdir-secu   = space.       "Группа полномочий
  lw_trdir-cnam   = sy-uname.    "Автор
  lw_trdir-cdat   = sy-datum.    "Дата создания
  lw_trdir-vern   = 1.           "№ версии
  lw_trdir-levl   = sy-saprl.    "Номер версии создания/посл. изменения
  UNPACK sy-mandt TO lw_trdir-rmand. "Мандант создания/посл. изменения
  CLEAR:
    lw_trdir-rstat,              "Status
    lw_trdir-rload,              "???
*    lw_trdir-fixpt,              "Festpunktarithmetik
    lw_trdir-sset,               "Start nur ueber Variante
    lw_trdir-sdate,              "Generierung Standardselektion
    lw_trdir-stime,              "Generierung Standardselektion
    lw_trdir-idate,              "Generierung eigenes Selektion
    lw_trdir-itime.              "Generierung eigenes Selektion
  lw_trdir-fixpt = 'X'.
  lw_trdir-uccheck = 'X'.
* Подготовка заголовка
  CLEAR:
    lw_textpool,
    lt_textpool[].
  lw_textpool-id    = 'R'.
  lw_textpool-entry = i_title.
  INSERT lw_textpool INTO TABLE lt_textpool[].

  INSERT TEXTPOOL lw_trdir-name FROM lt_textpool LANGUAGE sy-langu.
  INSERT REPORT i_programm FROM it_abaptext.
  MODIFY trdir FROM lw_trdir.
  COMMIT WORK.

Зачем то у меня еще такой код выполняется, не помню что будет, если его убрать :D
Code:
*----------------------------------------------------------------------*
* Актуализация и освобождение объектов
*----------------------------------------------------------------------*

  ls_pname-program = i_programm.
  CALL FUNCTION 'WB_TREE_ACTUALIZE'
    EXPORTING
      tree_name = ls_pname.
  CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT'
    EXPORTING
      object    = lw_trdir-name
      program   = lw_trdir-name
      operation = 'INSERT'
      type      = 'CP'.
  CALL FUNCTION 'RS_ACCESS_PERMISSION'
    EXPORTING
      mode         = 'FREE'
      object       = i_programm
      object_class = 'ABAP'.
  CALL FUNCTION 'RS_ACCESS_PERMISSION'
    EXPORTING
      mode         = 'FREE'
      object       = i_programm
      object_class = 'TEXT'.

Экран и GUI-статус - делал также как и вы решили, копированием. Но только раз уж я сделал программу для генерации, зачем мне их искать в других программах? Я просто создал их у себя
Копирование статуса
Code:
  CALL FUNCTION 'RS_CUA_COPY_STA'
    EXPORTING
      im_program      = source_programm
      im_status       = 'STATUS_0100'
      im_tprogram     = target_programm
      im_tstatus      = 'STATUS_0100'
      suppress_dialog = 'X'
    EXCEPTIONS
      OTHERS          = 12.

Копирование экрана
Code:
  CALL FUNCTION 'RS_SCRP_COPY'
    EXPORTING
      source_dynnr    = '0100'
      source_progname = source_programm
      target_dynnr    = '0100'
      target_progname = target_programm
    EXCEPTIONS
      OTHERS          = 2.

По gui-заголовку думаю можно подобное найти


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Сб, апр 28 2018, 10:41 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 17:38
Сообщения: 227
Вставлять текст программы через пакетник - нашел один плюс: можно сделать структурную печать :)

За наводки спасибо. Может как-нибудь доработаю свою поделку.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Вс, апр 29 2018, 16:07 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 17:06
Сообщения: 257
Структурная печать: ФМ PRETTY_PRINTER.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Чт, май 03 2018, 08:56 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 10:02
Сообщения: 207
В abapgit не смотрели?

https://github.com/larshp/abapGit/blob/ ... .clas.abap

Code:
METHOD serialize_dynpros.
METHOD deserialize_dynpros.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка
СообщениеДобавлено: Чт, май 03 2018, 10:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 17:38
Сообщения: 227
Не смотрел. Не знал про такой проект.

Задачу свою решил через пакетники. Вроде работает. Посмотрю ещё по результатам эксплуатации.


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

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


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

Сейчас этот форум просматривают: Aleksoid1978


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

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