Новый рекорд для кастом F4

Я создал справку по поиску, которая имеет 2 поля: id а также description

Я хочу добавить новую строку в результаты, которые не приходят из исходной таблицы. Я слышал, что мы можем сделать это через выход Help Search, но я не знаю, как это сделать.

Я хочу добавить эту строку:

ID       Description
00004    "For all users"

Контекст: моя справка по поиску была создана в BackEnd, и я добавил ее в блок назначения в моем компоненте CRM WEBUI, и он работает хорошо. Но теперь мне нужно добавить новое значение в мой F4, только одну новую строку.

2 ответа

Решение

По умолчанию справка поиска отображает содержимое таблицы или представления базы данных ("метод выбора"), все столбцы или только определенные столбцы, определенные в справке поиска.

Если вы хотите отобразить разные данные, либо создавая их с нуля (пустой "метод выбора"), либо адаптируя данные, считанные из этого "метода выбора", вам необходимо использовать выход из справки по поиску.

Выход справки по поиску - это функциональный модуль, который назначается справке по поиску и вызывается в разные моменты (называемые "шагами") во время выполнения справки по поиску, что может изменить поведение и содержание справки по поиску. Наиболее важные шаги:

  • "SELECT": вызывается до того, как SAP извлечет данные из базы данных (если есть), после того, как в конечном итоге отобразился диалог выбора для ввода значений для фильтрации данных. Если "метод выбора" был оставлен пустым, вы можете инициализировать данные самостоятельно в этот момент.
  • "DISP": вызывается после того, как SAP извлекает данные из базы данных (если есть "метод выбора"), непосредственно перед отображением. В это время вы можете изменить данные.

Шаги по созданию выхода справки по поиску:

  1. Создайте функциональный модуль со следующей подписью (вы можете скопировать функциональный модуль шаблона F4IF_SHLP_EXIT_EXAMPLE):
    CHANGING
       VALUE(SHLP) TYPE SHLP_DESCR
       VALUE(CALLCONTROL) LIKE DDSHF4CTRL
    TABLES
       SHLP_TAB TYPE SHLP_DESCT
       RECORD_TAB LIKE SEAHLPRES.
    
  2. Добавьте код ABAP в свой функциональный модуль для построения или фильтрации данных:
    • Имя шага является параметром callcontrol-step,
    • Записи в параметре RECORD_TAB; чтобы изменить их, используйте внутреннюю таблицу intermeidate, которую вы вводите вручную, чтобы соответствовать столбцам, выбранным для "вывода списка совпадений" в справке поиска (порядок столбцов не важен, поскольку логика F4UT_* функциональные модули в дальнейшем основаны на именах столбцов). Чтобы перенести RECORD_TAB во внутреннюю таблицу, вы вызываете функциональный модуль. F4UT_PARAMETER_VALUE_GET (по одному столбцу за раз, вызывайте его несколько раз для нескольких столбцов), и для переноса внутренней таблицы в RECORD_TAB вы вызываете функциональный модуль F4UT_RESULTS_MAP,
    • Если они вам нужны, возможный выбор данных находится в параметре SHLP-SELOPT,
  3. Отредактируйте справку по поиску (код транзакции 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.
Другие вопросы по тегам