• SAP 选择屏幕动态通过Radio Button 显示与隐藏以及控制是否必输


    如何在选择屏幕上进行动态展示屏幕字段,并且进行必输项检查控制

    1. 选择屏幕定义

    1. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
    2. SELECTION-SCREEN BEGIN OF LINE.
    3. PARAMETERS: p_r1 TYPE c RADIOBUTTON GROUP grp USER-COMMAND uc DEFAULT 'X'. "核价申请
    4. SELECTION-SCREEN COMMENT 2(23) TEXT-002 FOR FIELD p_r1.
    5. PARAMETERS: p_r2 TYPE c RADIOBUTTON GROUP grp. "核价清单
    6. SELECTION-SCREEN COMMENT 27(23) TEXT-003 FOR FIELD p_r2.
    7. SELECTION-SCREEN END OF LINE.
    8. PARAMETERS: p_vkorg TYPE vbak-vkorg MODIF ID md1.
    9. SELECT-OPTIONS: s_zdjba FOR zsdt040a-zdjba MODIF ID md2 MATCHCODE OBJECT zdjba_esh, "核价单号
    10. s_zhjrq FOR zsdt040a-zhjrq MODIF ID md2, "核价日期
    11. s_kunnr FOR zsdt040a-kunnr MODIF ID md2, "客户
    12. s_vkorg FOR zsdt040a-vkorg MODIF ID md2, "销售组织
    13. s_status FOR zsdt040a-status MODIF ID md2. "审批状态
    14. SELECTION-SCREEN END OF BLOCK b1.

    注意:1. 需要给radio button指定功能码,比如上面程序代码中指定的功能码为uc

               2. 需要对选择屏幕上需要进行动态显示的字段进行分组,哪些字段属于一组进行动态控制,可以通过modif id进行分组

    2. 屏幕字段属性设置

    1. INITIALIZATION.
    2. PERFORM frm_init.
    3. AT SELECTION-SCREEN OUTPUT.
    4. PERFORM frm_set_attribute.
    5. *&---------------------------------------------------------------------*
    6. *& Form frm_init
    7. *&---------------------------------------------------------------------*
    8. *& text
    9. *&---------------------------------------------------------------------*
    10. *& --> p1 text
    11. *& <-- p2 text
    12. *&---------------------------------------------------------------------*
    13. FORM frm_init .
    14. ENDFORM.
    15. *&---------------------------------------------------------------------*
    16. *& Form frm_set_attribute
    17. *&---------------------------------------------------------------------*
    18. *& text
    19. *&---------------------------------------------------------------------*
    20. *& --> p1 text
    21. *& <-- p2 text
    22. *&---------------------------------------------------------------------*
    23. FORM frm_set_attribute .
    24. LOOP AT SCREEN.
    25. IF p_r1 IS NOT INITIAL.
    26. IF screen-group1 = 'MD2'.
    27. screen-invisible = 1.
    28. screen-active = 0.
    29. screen-required = 0.
    30. ELSE.
    31. screen-invisible = 0.
    32. screen-active = 1.
    33. screen-required = 2.
    34. ENDIF.
    35. ELSE.
    36. IF screen-group1 = 'MD1'.
    37. screen-invisible = 1.
    38. screen-active = 0.
    39. ELSE.
    40. screen-invisible = 0.
    41. screen-active = 1.
    42. IF screen-name = 'S_ZHJRQ-LOW'.
    43. screen-required = 2.
    44. ENDIF.
    45. ENDIF.
    46. ENDIF.
    47. MODIFY SCREEN.
    48. ENDLOOP.
    49. ENDFORM.

    注意:1. 屏幕字段的显示与隐藏可以通过screen的属性invisible和active进行控制

                2. 屏幕字段是否需要必输,可以通过screen的属性required进行控制,required有三个值:0和1和2,其中0表示不用必输,1表示必输且会进行必输检查,2也表示必输,但是只是展示必输的标识,但不会做必输检查,如果赋值为2要进行必输检查控制的话,需要单独在AT SELECTION-SCREEN中进行检查控制,选择2的目的是为了在点击radio button切换的时候,不会因为有必输的检查标识不能自动来回切换

    3. 必输检查控制

    1. AT SELECTION-SCREEN.
    2. PERFORM frm_check_input.
    3. START-OF-SELECTION.
    4. *&---------------------------------------------------------------------*
    5. *& Form frm_check_input
    6. *&---------------------------------------------------------------------*
    7. *& text
    8. *&---------------------------------------------------------------------*
    9. *& --> p1 text
    10. *& <-- p2 text
    11. *&---------------------------------------------------------------------*
    12. FORM frm_check_input .
    13. IF sy-ucomm <> 'UC' AND
    14. sy-ucomm <> '%011'.
    15. IF p_r1 IS NOT INITIAL.
    16. IF p_vkorg IS INITIAL.
    17. IF sy-langu = '1'.
    18. MESSAGE '在必填字段 "销售组织" 中进行输入' TYPE 'E'.
    19. ELSE.
    20. MESSAGE 'Make an entry in mandatory field "Sales Organization"' TYPE 'E'.
    21. ENDIF.
    22. ENDIF.
    23. ELSE.
    24. IF s_zhjrq[] IS INITIAL.
    25. IF sy-langu = '1'.
    26. MESSAGE '在必填字段 "核价日期" 中进行输入' TYPE 'E'.
    27. ELSE.
    28. MESSAGE 'Make an entry in mandatory field "Valuation date"' TYPE 'E'.
    29. ENDIF.
    30. ENDIF.
    31. ENDIF.
    32. ENDIF.
    33. ENDFORM.

    注意:排除某些功能码的目的是为了,在触发这些功能码的时候,无需做必输的检查,比如上面代码中排除了radio button的功能码UC,所以在点击radio button按钮的时候,不会做在这个radio button展示的屏幕字段信息进行必输检查

    效果图如下:

  • 相关阅读:
    全年冲刺200万辆!座舱域控制器进入「软硬升级」周期
    JDK 动态代理原理
    【方法】如何取消ZIP压缩包的密码?
    d共享左值
    复旦教授报告400多个安卓漏洞,历时16个月谷歌终于修复,此前曾立flag
    [Spring MVC6]事务管理与缓存机制
    MYSQL根据FRM文件导出表结构
    自绘 控件
    718. 最长重复子数组
    基于树莓派的Hadoop集群搭建
  • 原文地址:https://blog.csdn.net/weixin_37949164/article/details/132916318