有业务需求,希望点击按钮跳转至配置表,且只允许读取不允许修改配置表,并且希望选择屏幕的选择条件能对配置表生效,话不多说,上代码

1.新建配置表,并乱维护一笔数据

源代码如下

*&---------------------------------------------------------------------*
*& Report ZTEST_PZB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_PZB.
TABLES :SSCRFIELDS,ZTEST_DEMO.


SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS:
    S_KOSTL  FOR ZTEST_DEMO-KOSTL     MODIF ID M1,
    S_BUKRS  FOR ZTEST_DEMO-BUKRS     MODIF ID M1.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN FUNCTION KEY :1.

INITIALIZATION .

PERFORM frm_initial_data .

AT SELECTION-SCREEN.

  PERFORM FRM_FC_PRESS.  "按钮触发

*&---------------------------------------------------------------------*
*& Form frm_initial_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_initial_data .
  DATA:functxt TYPE smp_dyntxt.

  functxt-icon_id       = icon_table_settings.
  functxt-icon_text     = '配置表'.
  sscrfields-functxt_01 = functxt.


ENDFORM.

FORM frm_fc_press .

  CASE sy-ucomm.
    WHEN 'FC01'. " 下载模板

      PERFORM frm_main_data  USING 'ZTEST_DEMO'. "维护数据

    WHEN OTHERS.
  ENDCASE.
ENDFORM.

FORM frm_main_data  USING pv_name . "维护数据
  DATA:lt_dba_sellist TYPE STANDARD TABLE OF vimsellist.
  DATA:ls_dba_sellist TYPE  vimsellist.
  DATA: lt_exclfun TYPE vimexclfun OCCURS 0 WITH HEADER LINE.
  DATA:lt_tabname TYPE dd02v-tabname ."表名称
  lt_exclfun[] = VALUE #( ( function =  'AEND' ) ) .


  PERFORM frm_sel_data TABLES lt_dba_sellist s_kostl  USING 'KOSTL'.
  PERFORM frm_sel_data TABLES lt_dba_sellist s_bukrs  USING 'BUKRS'.

  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action                         = 'S'
      generate_maint_tool_if_missing = 'X'
      view_name                      = pv_name
    TABLES
      dba_sellist                    = lt_dba_sellist
      excl_cua_funct                 = lt_exclfun[]
    EXCEPTIONS
      client_reference               = 1
      foreign_lock                   = 2
      invalid_action                 = 3
      no_clientindependent_auth      = 4
      no_database_function           = 5
      no_editor_function             = 6
      no_show_auth                   = 7
      no_tvdir_entry                 = 8
      no_upd_auth                    = 9
      only_show_allowed              = 10
      system_failure                 = 11
      unknown_field_in_dba_sellist   = 12
      view_not_found                 = 13
      maintenance_prohibited         = 14
      OTHERS                         = 15.

  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

FORM frm_sel_data  TABLES   pt_sel STRUCTURE vimsellist
                            pt_sel_in TYPE STANDARD TABLE
                            USING VALUE(pv_name).
  .
  DATA:lt_dba_sellist TYPE STANDARD TABLE OF vimsellist,
       ls_dba_sellist TYPE vimsellist.
  CHECK pt_sel_in[] IS NOT INITIAL .

  CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
    EXPORTING
      fieldname = pv_name
      append_conjunction = 'AND'
    TABLES
      sellist   = pt_sel
      rangetab  = pt_sel_in.
*  APPEND LINES OF lt_dba_sellist TO pt_sel .

ENDFORM.

可以通过debug看具体程序的入参数据,建完配置表,代码可直接复制运行

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐