Установить идентификатор параметра не работает для пользовательского экрана - PullRequest
0 голосов
/ 14 декабря 2018

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

form handle_user_command using r_ucomm     like sy-ucomm
                               rs_selfield type slis_selfield.

  CASE r_ucomm.
    when '&IC1'.

      if rs_selfield-fieldname = 'SEL'.

        READ TABLE it_zcnclog into wa_zcnclog INDEX rs_selfield-tabindex.
        SET PARAMETER ID 'MAT' FIELD wa_zcnclog-material.
        Call SCREEN '1001'.

Если я заменяю пользовательскую транзакцию на стандартную транзакцию SAP, тогда значения отображаются на экране стандартной транзакции, но в противном случае это не так.Я установил флажки параметров SET / GET, а также проверил таблицы TPARA для записей, но не повезло.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Поле экрана может принимать значение, установленное с помощью `SET PARAMETER ID 'ZZZ' FIELD 'VALUE', только если:

  • Поле имеет тип" вход / выход "(во время разработки и ввремя выполнения)
  • Атрибут поля «идентификатор параметра» совпадает с идентификатором памяти SAP (ZZZ)
  • Атрибут поля «Параметр GET» проверен
  • В программе глобальныйпеременная, соответствующая имени поля экрана, является начальной (по крайней мере, в конце фазы «Процесс до вывода»)

Выдержка из ABAP документации : «При определении полей ввода dynproполя можно связать с параметрами SPA / GPA, введя имя параметра SPA / GPA из таблицы базы данных TPARA в качестве атрибута PARAMETER ID. Если соответствующий параметр GET PARAMETER установлен и никакое другое значение не назначено на входполе , поле ввода заполняется значением параметра SPA / GPA при отправке экрана. "

Демонстрация, значение, введенное в первом экране, появляетсяrs на втором экране и наоборот:

REPORT z.

TABLES sscrfields.

" Selection screen 1000 (implicit first one)
SELECTION-SCREEN COMMENT /1(40) text1000.
PARAMETERS p_start TYPE c LENGTH 10 LOWER CASE MEMORY ID zzzz.

" Selection screen 1001
SELECTION-SCREEN BEGIN OF SCREEN 1001.
SELECTION-SCREEN COMMENT /1(40) text1001.
PARAMETERS p_b1ab1a TYPE c LENGTH 10.
PARAMETERS p_end TYPE c LENGTH 10 LOWER CASE MEMORY ID zzzz.
PARAMETERS p_b2ab2a TYPE c LENGTH 10.
SELECTION-SCREEN END OF SCREEN 1001.

INITIALIZATION.
  text1000 = 'Press Enter to go to next screen'(000).
  text1001 = 'Press Enter to go to previous screen'(001).

AT SELECTION-SCREEN.
  IF sscrfields-ucomm IS INITIAL.
    CASE sy-dynnr.
      WHEN 1000.
        CLEAR p_end. " <== very important !
        CALL SELECTION-SCREEN 1001.
      WHEN 1001.
        CLEAR p_start. " <== very important !
        LEAVE TO SCREEN 0. " go to previous screen (don't use CALL 
          " SELECTION-SCREEN to avoid a stack of more than 50 dynpros)
    ENDCASE.
  ENDIF.
0 голосов
/ 14 декабря 2018

Для пользовательской транзакции, которую вы вызываете, требуется значение идентификатора MEMORY ID, установленное в объявлении параметра.

PARAMETER: matnr type mara-matnr MEMORY ID MAT.

Если транзакция, которую вы вызываете, является классической транзакцией dynpro, вам необходимо отредактировать атрибуты элемента.поля и добавьте ID ПАМЯТИ и поля параметров SET & GET.

screen element attributes

...