При необходимости принудительного вызова средства поиска ABAP в ALV таблице, например, при нажатии кнопки или по какому-либо событию используется Функциональный модуль F4IF_FIELD_VALUE_REQUEST. Вызов этого ФМ позволяет создать диалог с пользователем SAP. В нужный момент вызывается средство поиска ABAP и обработать ответ пользователя. Анализируя, была ли выбрана пользователем запись и если выбрана, то какая именно.
Средство поиска ABAP в ALV таблице
F4IF_FIELD_VALUE_REQUEST
Подробнее рассмотрим вызов этого функционального модуля и его возможности. Для примера я выбрал принудительный вызов средства поиска для поля KUNNR – дебитора. С помощью данного ФМ мы будем вызывать пользовательское средство поиска “ZSD_KUNNR”. ФМ получает на вход следующие параметры:
- tabname – имя таблицы либо ракурс справки, как в нашем случае. Из этого ракурса или таблицы будут извлекаться доступные значения для выбора.
- fieldname – имя поля таблицы tabname, в котором хранится поле.
- searchhelp – средство поиска для принудительного вызова.
- multiple_choice – поле отвечает за возможность множественного выбора значений.
Так же другие параметры влияющие на вызов данного средство поиска можно посмотреть перейдя в параметры.
Итоговый код программы ABAP выглядит следующим образом:
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 |
DATA: ls_kunnr TYPE ts_kunnr, lt_kunnr_ret TYPE STANDARD TABLE OF ddshretval, lr_kunnr TYPE REF TO ddshretval. CASE e_ucomm. WHEN 'CREATE'. CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = 'ZSD_KUNNR_RS' fieldname = 'KUNNR' searchhelp = 'ZSD_KUNNR' multiple_choice = abap_true TABLES return_tab = lt_kunnr_ret EXCEPTIONS OTHERS = 5. LOOP AT lt_kunnr_ret REFERENCE INTO lr_kunnr_ret. READ TABLE mt_kunnr TRANSPORTING NO FIELDS WITH KEY kunnr = lr_kunnr_ret->fieldval. IF sy-subrc = 0. CONTINUE. ENDIF. ls_kunnr-kunnr = lr_kunnr->fieldval. ls_kunnr-updkz = 'I'. APPEND ls_kunnr TO mt_kunnr. ENDLOOP. WHEN OTHERS. RETURN. ENDCASE. mcl_alv->refresh( ). |
По итогу получаем таблицу результатов выбора пользователем, в которой в столбце fieldval хранятся значения выбранные пользователем. Теперь, если используется данную функцию при добавлении полей в таблицу ALV, то можно пройти по таблице, переместить нужные записи, например, проверив на наличие их в целевой таблице. После чего заполнить, в случае необходимости дополнительные поля. После чего обновить ALV.
Так же этот код можно было записать короче, если использовать новый синтаксис ABAP. Например, используя инлайновую декларацию мы можем отказаться от предварительного объявления переменной lr_kunnr_ret. И использовать код:
1 |
LOOP AT lt_kunnr_ret REFERENCE INTO DATA(lr_kunnr_ret). |
Как используется ФМ F4IF_FIELD_VALUE_REQUEST в реальных задачах?
- По нажатию кнопки в панели ALV таблицы мы принудительно вызываем средство поиска ABAP и в нём выбираем, например, нужный код завода. После выбора этого кода мы, например, определённым образом производим начальное заполнение строки или другой вариант.