SAPфорум.RU https://sapboard.ru/forum/ |
|
Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка https://sapboard.ru/forum/viewtopic.php?f=13&t=96341 |
Страница 1 из 1 |
Автор: | Валерка [ Чт, апр 26 2018, 14:53 ] |
Заголовок сообщения: | Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Наконец-то решил сделать WIZARD для генерации шаблона программы на основе ALV. Т.е. на селекционном экране вводим имя программы+запрос+пакет+описание и генерируется сама программ (с инициализацией ALV) + экран + GUI- статус (R_BACK+R_CANCEL+R_EXIT) + заголовок. Собственно вопрос есть что-то для добавления экранов и GUI статусов (а может и программ) чтобы не писать пакетники на все это дело? |
Автор: | LAT [ Чт, апр 26 2018, 20:28 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
А не проще сделать программу-шаблон, и просто копировать ее? |
Автор: | Валерка [ Чт, апр 26 2018, 20:38 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Системы могут быть разные. |
Автор: | hoar [ Чт, апр 26 2018, 21:00 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Валерка написал(а): .....Собственно вопрос есть что-то для добавления экранов и GUI статусов (а может и программ) чтобы не писать пакетники на все это дело? Есть внутри ABAP команды: generate dynpro, activate dynpro и еще парочка команд для создания модификации окон. Но эти команды описаны в Хелпе, как "для внутреннего использования SAP-ом". Для программ есть аналогичные. Про генерацию GUI статусов ничего сказать не могу. |
Автор: | Валерка [ Пт, апр 27 2018, 07:38 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Решение получилось следующее: Программы (и INCLUDE) - можно создать через пакетный ввод GUI-Заголовок - тоже через пакетный ввод Экран - создать экран можно, но без спец элемента. Поэтому подумав понял что можно копировать стандартный экран группы функций SLVC_FULLSCREEN экран 500 (ну или что-то другое подходящее из стандарта) GUI-статус - это сложнее всего, так как указать команды через пакетный ввод не получается. Однако тоже можно копировать из какой-нибудь стандартной программы подходящий. |
Автор: | NeMurometz [ Пт, апр 27 2018, 07:52 ] |
Заголовок сообщения: | Re:Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Посмотрите как это реализовано в SAPLINK |
Автор: | LAT [ Пт, апр 27 2018, 10:07 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Валерка написал(а): Системы могут быть разные. Не понятно, почему эта проблема касается программы-шаблона, но не касается визарда. Но если так надо: по поводу гуи-статустов имеет смысл обратить внимание на ФМ-ы RS_CUA* (RS_CUA_INTERNAL_FETCH, RS_CUA_INTERNAL_WRITE, RS_CUA_GENERATE_STATUS и т.д.). С экранами можно побороться с помощью IMPORT/EXPORT DYNPRO. В принципе, на этом форуме участники Parazit и DKiyanov выкладывали свои разработки, в которых производится выгрузка-загрузка программ, примеры создания экранов и гуи-статусов можно глянуть в их коде.
|
Автор: | Валерка [ Пт, апр 27 2018, 13:49 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
С GUI решил все через создание нового GUI с помощью пакетника. А потом RS_CUA_INTERNAL_FETCH+<добавление своих команд>+RS_CUA_INTERNAL_WRITE. |
Автор: | Saperx [ Сб, апр 28 2018, 09:31 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, |
Валерка написал(а): Решение получилось следующее: Программы (и 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. Зачем то у меня еще такой код выполняется, не помню что будет, если его убрать 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-заголовку думаю можно подобное найти |
Автор: | Валерка [ Сб, апр 28 2018, 09:41 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Вставлять текст программы через пакетник - нашел один плюс: можно сделать структурную печать За наводки спасибо. Может как-нибудь доработаю свою поделку. |
Автор: | LAT [ Вс, апр 29 2018, 15:07 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Структурная печать: ФМ PRETTY_PRINTER. |
Автор: | AFH [ Чт, май 03 2018, 07:56 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
В abapgit не смотрели? https://github.com/larshp/abapGit/blob/ ... .clas.abap Code: METHOD serialize_dynpros.
METHOD deserialize_dynpros. |
Автор: | Валерка [ Чт, май 03 2018, 09:22 ] |
Заголовок сообщения: | Re: Динамическое добавление в программу экрана (+добавить на экран компонент), GUI-статуса, Заголовка |
Не смотрел. Не знал про такой проект. Задачу свою решил через пакетники. Вроде работает. Посмотрю ещё по результатам эксплуатации. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |