Новый рекорд для кастом F4
Я создал справку по поиску, которая имеет 2 поля: id
а также description
Я хочу добавить новую строку в результаты, которые не приходят из исходной таблицы. Я слышал, что мы можем сделать это через выход Help Search, но я не знаю, как это сделать.
Я хочу добавить эту строку:
ID Description
00004 "For all users"
Контекст: моя справка по поиску была создана в BackEnd, и я добавил ее в блок назначения в моем компоненте CRM WEBUI, и он работает хорошо. Но теперь мне нужно добавить новое значение в мой F4, только одну новую строку.
2 ответа
По умолчанию справка поиска отображает содержимое таблицы или представления базы данных ("метод выбора"), все столбцы или только определенные столбцы, определенные в справке поиска.
Если вы хотите отобразить разные данные, либо создавая их с нуля (пустой "метод выбора"), либо адаптируя данные, считанные из этого "метода выбора", вам необходимо использовать выход из справки по поиску.
Выход справки по поиску - это функциональный модуль, который назначается справке по поиску и вызывается в разные моменты (называемые "шагами") во время выполнения справки по поиску, что может изменить поведение и содержание справки по поиску. Наиболее важные шаги:
- "SELECT": вызывается до того, как SAP извлечет данные из базы данных (если есть), после того, как в конечном итоге отобразился диалог выбора для ввода значений для фильтрации данных. Если "метод выбора" был оставлен пустым, вы можете инициализировать данные самостоятельно в этот момент.
- "DISP": вызывается после того, как SAP извлекает данные из базы данных (если есть "метод выбора"), непосредственно перед отображением. В это время вы можете изменить данные.
Шаги по созданию выхода справки по поиску:
- Создайте функциональный модуль со следующей подписью (вы можете скопировать функциональный модуль шаблона
F4IF_SHLP_EXIT_EXAMPLE
):CHANGING VALUE(SHLP) TYPE SHLP_DESCR VALUE(CALLCONTROL) LIKE DDSHF4CTRL TABLES SHLP_TAB TYPE SHLP_DESCT RECORD_TAB LIKE SEAHLPRES.
- Добавьте код ABAP в свой функциональный модуль для построения или фильтрации данных:
- Имя шага является параметром
callcontrol-step
, - Записи в параметре
RECORD_TAB
; чтобы изменить их, используйте внутреннюю таблицу intermeidate, которую вы вводите вручную, чтобы соответствовать столбцам, выбранным для "вывода списка совпадений" в справке поиска (порядок столбцов не важен, поскольку логикаF4UT_*
функциональные модули в дальнейшем основаны на именах столбцов). Чтобы перенести RECORD_TAB во внутреннюю таблицу, вы вызываете функциональный модуль.F4UT_PARAMETER_VALUE_GET
(по одному столбцу за раз, вызывайте его несколько раз для нескольких столбцов), и для переноса внутренней таблицы в RECORD_TAB вы вызываете функциональный модульF4UT_RESULTS_MAP
, - Если они вам нужны, возможный выбор данных находится в параметре
SHLP-SELOPT
,
- Имя шага является параметром
- Отредактируйте справку по поиску (код транзакции SE11) и введите имя своего функционального модуля в поле экрана "Выход из справки по поиску".
Для получения дополнительной информации прочитайте SAP-библиотеку о выходах справки по поиску, F4UT_*
Функциональные модули снабжены некоторой документацией в вашей системе, и в вашей системе есть демонстрационные примеры, например, справка по поиску SFLIGHT.
В вашем очень конкретном случае я советую вам не определять "метод выбора" и использовать выход справочной системы поиска с этим кодом:
DATA source_tab TYPE TABLE OF zyourtable.
IF callcontrol-step = 'SELECT'.
SELECT * FROM zyourtable INTO TABLE source_tab.
APPEND value ty_source( ID = '00004' Description = 'For all users' ) TO source_tab.
CALL FUNCTION 'F4UT_RESULTS_MAP' " transfer of source_tab to record_tab
TABLES
SHLP_TAB = shlp_tab
RECORD_TAB = record_tab
SOURCE_TAB = source_tab
CHANGING
SHLP = shlp
CALLCONTROL = callcontrol.
ENDIF.
Вот мое окончательное решение, основанное на ответе Сандры:
IF callcontrol-step = 'SELECT'.
DATA: BEGIN OF ls_res_tab,
id TYPE zdt_favorite_retail_store,
description TYPE zdt_favorite_retail_store_decr,
END OF ls_res_tab.
DATA: res_tab LIKE TABLE OF ls_res_tab.
SELECT id description FROM ztx_fav_store INTO TABLE res_tab.
ls_res_tab-id = '00004'.
ls_res_tab-description = 'For all users'.
APPEND ls_res_tab TO res_tab.
"* Prepare for output
CALL FUNCTION 'F4UT_RESULTS_MAP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = res_tab
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.