项目场景:
之前碰到顾问需求要求ALV的选择界面上根据一组RADIOBUTTON 动态显示每个按钮对应的搜索界面。
问题描述
在实际的设计中,我设计两个按钮,依据事件来控制每个按钮选择界面的隐藏和显示,但是不能做到点击按钮后 立即跳转对应的选择界面,需要选择按钮后,敲击回车才会转换界面,这样用户的体验较差。
PARAMETERS: p1 RADIOBUTTON GROUP g1 DEFAULT 'X',
p2 RADIOBUTTON GROUP g1.
PARAMETERS: p_werks LIKE mseg-werks OBLIGATORY.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS :
s_name FOR zmwb_students-zname MODIF ID m1,
s_zcode FOR zmwb_students-zcode MODIF ID m1,
p_erdat FOR afpo-strmp MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS :
s_name2 FOR zmwb_students-zname MODIF ID m2,
s_zcode2 FOR zmwb_students-zcode MODIF ID m2,
p_erdat2 FOR afpo-strmp MODIF ID m2.
SELECTION-SCREEN END OF BLOCK b2.
解决方案:
在RADIOBUTTON的第一个参数中添加 USER-COMMAND XXX后实现了点击按钮后 动态显示和隐藏对应的选择界面。
PARAMETERS: p1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND us1,
p2 RADIOBUTTON GROUP g1 .
PARAMETERS: p_werks LIKE mseg-werks OBLIGATORY.
顺便贴一下,隐藏和显示选择界面的代码,加深记忆
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_screen.
FORM frm_screen .
LOOP AT SCREEN.
CASE abap_true.
WHEN p1.
IF screen-group1 = 'M1'.
screen-active = '1'.
ENDIF.
IF screen-group1 = 'M2'.
screen-active = '0'.
ENDIF.
WHEN p2.
IF screen-group1 = 'M1'.
screen-active = '0'.
ENDIF.
IF screen-group1 = 'M2'.
screen-active = '1'.
ENDIF.
WHEN OTHERS.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.