Ошибка времени выполнения радиопереключателя на экране выбора с динамической видимостью - PullRequest
1 голос
/ 17 июня 2019

При настройке экрана выбора с динамической видимостью элементов управления я столкнулся с неожиданной ошибкой во время выполнения DYNP_TOO_MANY_RADIOBUTTONS_ON.Пример кода приведен к следующему воспроизводимому примеру:

REPORT ztest1.

SELECTION-SCREEN BEGIN OF BLOCK category.
PARAMETER:
  rb_cata   RADIOBUTTON GROUP cat USER-COMMAND selection_changed DEFAULT 'X',
  rb_catb   RADIOBUTTON GROUP cat.
SELECTION-SCREEN END OF BLOCK   category.
SELECTION-SCREEN BEGIN OF BLOCK action.
PARAMETER:
  rb_act1   RADIOBUTTON GROUP act USER-COMMAND selection_changed DEFAULT 'X' MODIF ID act,
  rb_act2   RADIOBUTTON GROUP act.
SELECTION-SCREEN END OF BLOCK   action.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'ACT'.
        screen-invisible  = COND #( WHEN rb_cata = abap_true THEN 0 ELSE 1 ).
      WHEN OTHERS.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.

При выборе rb_catb, а затем при повторном выборе первого радиомодуля я получаю ошибку времени выполнения DYNP_TOO_MANY_RADIOBUTTONS_ON с комментарием:

Inгруппа переключателей, должно быть установлено ровно одно из полей - это означает, что должно иметь значение «X».Если это не так, возникает одна из следующих ситуаций: - Несколько переключателей группы устанавливаются одновременно.Эта ошибка приводит к завершению приложения и вызывает короткий дамп, который вы сейчас читаете.

Но я только изменяю видимость кнопок, почему я получаю сообщение об ошибке, относящееся к фактическому активномустатус?

1 Ответ

0 голосов
/ 17 июня 2019

Причиной этого является невозможность установить точно такой же MODIF ID на всех кнопках в группе радиокнопок . Хотя к точной логике обработки экрана сложно прийти, похоже, что все элементы в группе радиокнопок (RBG) необходимо менять одновременно, чтобы избежать проблем с обработкой. Итак, в приведенном выше примере:

rb_act1   RADIOBUTTON GROUP act USER-COMMAND selection_changed DEFAULT 'X' MODIF ID act,
rb_act2   RADIOBUTTON GROUP act MODIF ID act.

Я изначально подозревал проблемы с конфликтами атрибутов ACTIVE или INVISIBLE, но они кажутся несвязанными. Фактическая причина, по которой эти элементы управления должны изменяться в режиме блокировки, неизвестна, если не будет возможности взглянуть на логику обработки экрана, которая, вероятно, скрыта в ядре. Обратите внимание, что MODIF ID должен быть точно таким же, любое смешивание этих идентификаторов в пределах одной RBG приведет к этой ошибке во время выполнения.

...