Текущее время: Пн, июл 23 2018, 06:11

Часовой пояс: 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
Сообщения: 256
А не проще сделать программу-шаблон, и просто копировать ее?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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
Сообщения: 256
Валерка написал(а):
Системы могут быть разные.
Не понятно, почему эта проблема касается программы-шаблона, но не касается визарда. Но если так надо: по поводу гуи-статустов имеет смысл обратить внимание на ФМ-ы 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
Сообщения: 137
Валерка написал(а):
Решение получилось следующее:
Программы (и 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
Сообщения: 256
Структурная печать: ФМ 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 часа


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

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


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

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