В подробных текстах сообщений (тр. SE91) или в документации (тр. SO10) мы кроме непосредственно описания можем так же вставлять ссылки на транзакции или отчёты для их запуска, что позволяет упростить жизнь пользователям.
Однако у стандартной реализации данного механизма есть ряд ограничений:
- Длинна ссылки ограничена, из-за чего передать все необходимые параметры для запуска транзакции может не получиться.
- Нет возможности вставки интернет-ссылок более 70 символов (ограничение стандарта).
- Нет возможности запуска отчёта с параметрами (только запуск с вариантом).
В статье рассмотрим каким образом можно расширить стандартные возможности чтобы избежать вышеуказанных ограничений.
Для того чтобы вставить ссылку в подробном тексте сообщения, необходимо перейти в меню:
При активации может возникнуть сообщение об ошибке, следует нажать кнопку игнорировать.
Для корректного отображения вставляемых ссылок следует отключить графический редактор:
Существует несколько стандартных возможности по вставке ссылок на транзакции/отчёты, разберём на примере запуска транзакции просмотра журнала (тр. SLG1) и отчёта автоматического поиска нот (тр. ANST):
- Запуск транзакции без пропуска экрана (связь с транзакцией…): <DS:TRAN.SLG1(BALOBJ.&V1&)(BALSUBOBJ.&V2&)>Open SLG1</>
- Запуск транзакции с пропуском экрана: <DS:TRAS.SLG1(BALOBJ.&V1&)>Run SLG1</>
- Запуск отчёта (диалоговое выполнение отчёта…): <DS:REPO.ANST_SEARCH_TOOL.&V3&>Open ANST Report</>
- Есть и другие варианты, например — немедленное планирование отчёта в фоне, но логика обработки там аналогичная.
BALOBJ и BALSUBOBJ это ID параметров, которые можно передавать через память при запуске транзакции (SET MEMORY ID…):
При запуске диалогового выполнения отчёта мы указываем имя варианта. Во всех случаях для большей гибкости параметры передаются из программы через параметры к сообщению (хотя можно задавать и статически).
Пример вызова сообщения:
1 2 |
START-OF-SELECTION. MESSAGE i000(zsm_mess) WITH 'ANST_TESTING' 'ANST_TESTING_AT_REC' 'VAR'. |
Стандартная реализация обработки таких ссылок лежит в классе CL_EPSS_SAPEVENT, а вызов его происходит по настройке в ракурсе EPSSA2. Чтобы создать свой обработчик для своих типов ссылок, следует создать наследуемый от вышеуказанного класс и добавить запись в ракурс через тр. SM30:
При этом стандартную запись следует удалить, чтобы обеспечить корректность порядка вызовов (если этого не сделать, придётся вносить типы ссылок в настройку TDCLD). В наследуемом классе мы переопределим для Custom типов ссылок поведения обработчика — метод RESOLVE_LINK, для всех прочих типов ссылок будет отрабатывать стандартная логика.
Полный код нового класса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
CLASS zcl_epss_sapevent DEFINITION PUBLIC INHERITING FROM cl_epss_sapevent FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES: tt_report_parameters TYPE STANDARD TABLE OF rsparamsl_255 . CLASS-METHODS set_report_parameters IMPORTING !it_parameters TYPE tt_report_parameters . METHODS resolve_link REDEFINITION . PROTECTED SECTION. PRIVATE SECTION. CONSTANTS: BEGIN OF gc_link_types, zrep TYPE string VALUE 'ZREP', zurl TYPE string VALUE 'ZURL', END OF gc_link_types . DATA mv_doc_link TYPE string. CLASS-DATA gt_report_parameters TYPE tt_report_parameters . METHODS process_report . METHODS process_url . ENDCLASS. CLASS zcl_epss_sapevent IMPLEMENTATION. METHOD process_report. " Пример: <DS:ZREP.ANST_SEARCH_TOOL>Open ANST</> SPLIT mv_doc_link+8 AT '.' INTO TABLE DATA(lt_parts). DATA(lv_prog) = VALUE sy-cprog( lt_parts[ 1 ] OPTIONAL ). IF lv_prog IS INITIAL. CLEAR: gt_report_parameters. RETURN. ENDIF. SUBMIT (lv_prog) VIA SELECTION-SCREEN AND RETURN WITH SELECTION-TABLE gt_report_parameters. CLEAR: gt_report_parameters. ENDMETHOD. METHOD process_url. " Пример: <DS:ZURL.http://abap-blog.ru>Open ABAP Blog</> DATA: lv_url TYPE bxmnodes-url. lv_url = mv_doc_link+8. CALL FUNCTION 'CALL_BROWSER' EXPORTING url = lv_url EXCEPTIONS OTHERS = 0. ENDMETHOD. METHOD resolve_link. mv_doc_link = doc_link. CASE mv_doc_link+3(4). WHEN gc_link_types-zrep. process_report( ). WHEN gc_link_types-zurl. process_url( ). WHEN OTHERS. super->resolve_link( EXPORTING doc_link = doc_link epss_html_viewer = epss_html_viewer help_info = help_info ). ENDCASE. ENDMETHOD. METHOD set_report_parameters. gt_report_parameters = it_parameters. ENDMETHOD. ENDCLASS. |
Новые типы ссылок:
- Запуск URL: <DS:ZURL.http://abap-blog.ru>Open ABAP Blog</>
- Запуск отчёта с заданными параметрами экрана: <DS:ZREP.ANST_SEARCH_TOOL>Open ANST</>
Для запуска отчёта мы предварительно заполняем параметры отчёта:
1 2 3 4 5 |
START-OF-SELECTION. zcl_epss_sapevent=>set_report_parameters( it_parameters = VALUE #( ( selname = 'P_TRANS' kind = 'P' option = 'EQ' low = 'SE24' ) ) ). MESSAGE i000(zsm_mess) WITH 'ANST_TESTING' 'ANST_TESTING_AT_REC' 'VAR'. |
Подводя итог можно сказать что таким образом мы можем реализовать как собственные типы ссылок, так и расширять функционал стандартных.