SearchHelp Listbox dialog

来源:互联网 发布:淘宝店铺被屏蔽怎么办 编辑:程序博客网 时间:2024/06/06 13:21

最近有点空闲时间,把搜索帮助 、下拉框 、程序计时的功能整理到了一起做成一个DEMO,供学习和工作使用。其中搜索帮助和下拉框有自动联动的效果,有个搜索帮助的函数和一前使用的不一样,还有计时的功能用到的时候比较少但是比较好玩。话不多说直接上干货。


选择屏幕按钮

源程序:

TYPE-POOLS: vrm,abap.DATA: go_time TYPE REF TO cl_gui_timer.PARAMETERS: p_01 RADIOBUTTON GROUP rg01 DEFAULT 'X' USER-COMMAND rg,            p_02 RADIOBUTTON GROUP rg01,            p_03 RADIOBUTTON GROUP rg01.SELECTION-SCREEN BEGIN OF BLOCK b1.SELECTION-SCREEN:BEGIN OF LINE.SELECTION-SCREEN: COMMENT 1(18) text-001 MODIF ID m01. "Shipping ConditionsPARAMETERS p_vsbed LIKE likp-vsbed MODIF ID m01.PARAMETERS p_vtext LIKE tvsbt-vtext MODIF ID m01.SELECTION-SCREEN POSITION 40 .SELECTION-SCREEN:END OF LINE.SELECTION-SCREEN END OF BLOCK b1.PARAMETER: p_werks TYPE t001w-werks AS LISTBOX VISIBLE LENGTH 4 MODIF ID m02 USER-COMMAND lb,           p_name1 TYPE t001w-name1 MODIF ID m02.CLASS cl_event_handler DEFINITION.  PUBLIC SECTION.***方法声明    METHODS : run_handler FOR EVENT finished OF cl_gui_timer.ENDCLASS.                    "cl_event_handler DEFINITIONCLASS cl_event_handler IMPLEMENTATION.***定时方法  METHOD run_handler.    go_time->cancel( ).    CALL METHOD cl_gui_cfw=>set_new_ok_code      EXPORTING        new_code = 'EXIT'.  ENDMETHOD.                    "run_handlerENDCLASS.                    "cl_event_handler IMPLEMENTATIONDATA: go_handler TYPE REF TO cl_event_handler.INITIALIZATION.AT SELECTION-SCREEN OUTPUT.  PERFORM frm_name1.  PERFORM frm_modify_screen.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vsbed.  PERFORM frm_f4_help .AT SELECTION-SCREEN ON p_werks.  PERFORM frm_initial_listbox.AT SELECTION-SCREEN .START-OF-SELECTION.  IF p_03 = 'X'.    CALL SCREEN 9000 STARTING AT 20 10.  ENDIF.*&---------------------------------------------------------------------**&      Form  FRM_F4_HELP*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_f4_help .  DATA: lv_value TYPE char4.  DATA: lt_dynpro_values TYPE TABLE OF dynpread,        ls_field         TYPE dynpread.  DATA: lt_field_tab TYPE TABLE OF  help_value,        ls_field_tab TYPE  help_value.  DATA: BEGIN OF ls_value,          VALUE(100),        END OF ls_value,        lt_value LIKE TABLE OF ls_value.  DATA: lt_tvsbt TYPE TABLE OF tvsbt,        ls_tvsbt TYPE tvsbt.  CLEAR:lt_value[].  SELECT *    INTO TABLE lt_tvsbt    FROM tvsbt    WHERE spras EQ 'E'.  LOOP AT lt_tvsbt INTO ls_tvsbt.    CLEAR: ls_value.    ls_value-value = ls_tvsbt-vsbed.    APPEND ls_value TO lt_value.    CLEAR: ls_value.    ls_value-value = ls_tvsbt-vtext.    APPEND ls_value TO lt_value.  ENDLOOP.  REFRESH lt_field_tab.  ls_field_tab-tabname   = 'TVSBT'.  ls_field_tab-fieldname = 'VSBED'.  ls_field_tab-selectflag = 'X'.  APPEND ls_field_tab TO lt_field_tab.  ls_field_tab-tabname   = 'TVSBT'.  ls_field_tab-fieldname = 'VTEXT'.  ls_field_tab-selectflag = ' '.  APPEND ls_field_tab TO lt_field_tab.* Popup zur Auswahl  CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'    EXPORTING      display                   = ' ' "等于 X 搜索帮助只显示不返回*     FIELDNAME                 = 'VSBED'*     TABNAME                   = 'TVSBT'    IMPORTING      select_value              = lv_value    TABLES      fields                    = lt_field_tab      valuetab                  = lt_value    EXCEPTIONS      field_not_in_ddic         = 01      more_then_one_selectfield = 02      no_selectfield            = 03.  IF NOT lv_value IS INITIAL.    p_vsbed = lv_value.  ENDIF.  READ TABLE lt_tvsbt INTO ls_tvsbt WITH KEY vsbed = p_vsbed.  IF sy-subrc = 0.    p_vtext = ls_tvsbt-vtext.  ENDIF.  CLEAR lt_dynpro_values[].  ls_field-fieldname = 'P_VTEXT' .  ls_field-fieldvalue = p_vtext.  APPEND ls_field TO lt_dynpro_values.  CALL FUNCTION 'DYNP_VALUES_UPDATE'    EXPORTING      dyname     = sy-cprog      dynumb     = sy-dynnr    TABLES      dynpfields = lt_dynpro_values.ENDFORM.*&---------------------------------------------------------------------**&      Form  FRM_INITIAL_LISTBOX*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_initial_listbox .  DATA: lt_values TYPE vrm_values,        ls_values TYPE vrm_value.  DATA: lt_werks TYPE TABLE OF t001w,        ls_werks TYPE t001w.  SELECT *    INTO TABLE lt_werks    UP TO 10 ROWS    FROM t001w CLIENT SPECIFIED    WHERE mandt = sy-mandt.  LOOP AT lt_werks INTO ls_werks.    ls_values-key = ls_werks-werks.    APPEND ls_values TO lt_values.  ENDLOOP.  CALL FUNCTION 'VRM_SET_VALUES'    EXPORTING      id              = 'P_WERKS'      values          = lt_values[]    EXCEPTIONS      id_illegal_name = 1      OTHERS          = 2.ENDFORM.*&---------------------------------------------------------------------**&      Form  FRM_NAM1*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_name1 .  CHECK p_werks IS NOT INITIAL.  CLEAR: p_name1.  SELECT SINGLE name1    INTO p_name1    FROM t001w    WHERE werks = p_werks.ENDFORM.*&---------------------------------------------------------------------**&      Form  FRM_MODIFY_SCREEN*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_modify_screen .  LOOP AT SCREEN.    CASE abap_true.      WHEN p_01.        IF screen-group1 = 'M02'.          screen-active = 0.        ELSE.          IF screen-name = 'P_VTEXT'.            screen-input = 0.          ENDIF.        ENDIF.      WHEN p_02.        IF screen-group1 = 'M01'.          screen-active = 0.        ELSE.          IF screen-name = 'P_NAME1'.            screen-input = 0.          ENDIF.        ENDIF.      WHEN p_03.        IF screen-group1 IS NOT INITIAL.          screen-active = 0.        ENDIF.      WHEN OTHERS.    ENDCASE.    MODIFY SCREEN.  ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**&      Module  STATUS_9000  OUTPUT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*MODULE status_9000 OUTPUT.*  SET PF-STATUS 'xxxxxxxx'.*  SET TITLEBAR 'xxx'.**创建定时刷新对象,类对象,进行固定时间监听  CREATE OBJECT go_time.  CREATE OBJECT go_handler.  SET HANDLER go_handler->run_handler FOR go_time.  go_time->interval = 10.  CALL METHOD go_time->run.ENDMODULE.*&---------------------------------------------------------------------**&      Module  USER_COMMAND_9000  INPUT*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*MODULE user_command_9000 INPUT.  CASE sy-ucomm.    WHEN 'EXIT'.      FREE go_time.      FREE go_handler.      LEAVE TO SCREEN 0.  ENDCASE.ENDMODULE.



0 0
原创粉丝点击