SAP 成本中心标准搜索帮助增强

导语:最近接到一个需求,关于KS03中,成本中心的搜索帮助增强,标准的搜索帮助过于死板了,用户希望在搜索帮助界面先过滤一次数据,只看未冻结的成本中心数据,下面分享一下实现过程。

👉【增强记录清单…】

一、效果展示

在这里插入图片描述

二、增强搜索帮助字段

找到了需要增强的搜索帮助是【KOST】,这是个集中检索搜索帮助,最终需要调整的是包含搜索帮助【KOSTN】。
在这里插入图片描述
在参数处增加需要增强的字段,我这里是冻结标识,并给了默认值,参照【F4IF_SHLP_EXIT_EXAMPLE】,创建一个新函数【F4IF_SHLP_EXIT_EXAMPLE_KOSTN】。

在这里插入图片描述
函数【F4IF_SHLP_EXIT_EXAMPLE_KOSTN】
在这里插入图片描述

FUNCTION f4if_shlp_exit_example_kostn.
*"--------------------------------------------------------------------
*"*"局部接口:
*"  TABLES
*"      SHLP_TAB TYPE  SHLP_DESCT
*"      RECORD_TAB STRUCTURE  SEAHLPRES
*"  CHANGING
*"     VALUE(SHLP) TYPE  SHLP_DESCR
*"     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
*"--------------------------------------------------------------------

* EXIT immediately, if you do not want to handle this step
  IF callcontrol-step <> 'SELONE' AND
     callcontrol-step <> 'SELECT' AND
     " AND SO ON
     callcontrol-step <> 'DISP'.
    EXIT.
  ENDIF.

*"----------------------------------------------------------------------
* STEP SELONE  (Select one of the elementary searchhelps)
*"----------------------------------------------------------------------
* This step is only called for collective searchhelps. It may be used
* to reduce the amount of elementary searchhelps given in SHLP_TAB.
* The compound searchhelp is given in SHLP.
* If you do not change CALLCONTROL-STEP, the next step is the
* dialog, to select one of the elementary searchhelps.
* If you want to skip this dialog, you have to return the selected
* elementary searchhelp in SHLP and to change CALLCONTROL-STEP to
* either to 'PRESEL' or to 'SELECT'.
  IF callcontrol-step = 'SELONE'.
*   PERFORM SELONE .........
    EXIT.
  ENDIF.

*"----------------------------------------------------------------------
* STEP PRESEL  (Enter selection conditions)
*"----------------------------------------------------------------------
* This step allows you, to influence the selection conditions either
* before they are displayed or in order to skip the dialog completely.
* If you want to skip the dialog, you should change CALLCONTROL-STEP
* to 'SELECT'.
* Normaly only SHLP-SELOPT should be changed in this step.
  IF callcontrol-step = 'PRESEL'.
*   PERFORM PRESEL ..........
    EXIT.
  ENDIF.
*"----------------------------------------------------------------------
* STEP SELECT    (Select values)
*"----------------------------------------------------------------------
* This step may be used to overtake the data selection completely.
* To skip the standard seletion, you should return 'DISP' as following
* step in CALLCONTROL-STEP.
* Normally RECORD_TAB should be filled after this step.
* Standard function module F4UT_RESULTS_MAP may be very helpfull in this
* step.
  DATA : rc TYPE sy-subrc.
  IF callcontrol-step = 'SELECT'.
    PERFORM step_select_kostn TABLES record_tab shlp_tab
                        CHANGING shlp callcontrol rc.
    IF rc = 0.
      callcontrol-step = 'DISP'.
    ELSE.
      callcontrol-step = 'EXIT'.
    ENDIF.
    EXIT. "Don't process STEP DISP additionally in this call.
  ENDIF.
*"----------------------------------------------------------------------
* STEP DISP     (Display values)
*"----------------------------------------------------------------------
* This step is called, before the selected data is displayed.
* You can e.g. modify or reduce the data in RECORD_TAB
* according to the users authority.
* If you want to get the standard display dialog afterwards, you
* should not change CALLCONTROL-STEP.
* If you want to overtake the dialog on you own, you must return
* the following values in CALLCONTROL-STEP:
* - "RETURN" if one line was selected. The selected line must be
*   the only record left in RECORD_TAB. The corresponding fields of
*   this line are entered into the screen.
* - "EXIT" if the values request should be aborted
* - "PRESEL" if you want to return to the selection dialog
* Standard function modules F4UT_PARAMETER_VALUE_GET and
* F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.
  IF callcontrol-step = 'DISP'.
*   PERFORM AUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB
*                           CHANGING SHLP CALLCONTROL.
    EXIT.
  ENDIF.
ENDFUNCTION.

*----------------------------------------------------------------------*
***INCLUDE LZFG_01F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form step_select_kostn
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> RECORD_TAB
*&      --> SHLP_TAB
*&      <-- SHLP
*&      <-- CALLCONTROL
*&      <-- RC
*&---------------------------------------------------------------------*
FORM step_select_kostn  TABLES   pt_record_tab STRUCTURE seahlpres
                                 pt_shlp_tab    TYPE shlp_desct
                        CHANGING cs_shlp        TYPE shlp_descr
                                 cs_callcontrol TYPE ddshf4ctrl
                                 cv_rc          TYPE sy-subrc.

  DATA:BEGIN OF gs_data,
         kostl      TYPE csks-kostl,
         kokrs      TYPE csks-kokrs,
         bukrs      TYPE csks-bukrs,
         kosar      TYPE csks-kosar,
         verak      TYPE csks-verak,
         verak_user TYPE csks-verak_user,
         mctxt      TYPE cskt-mctxt,
         spras      TYPE cskt-spras,
         datab      TYPE csks-datab,
         datbi      TYPE csks-datbi,
         bkzkp      TYPE csks-bkzkp,
         pkzkp      TYPE csks-pkzkp,
         pkzks      TYPE csks-pkzks,
         bkzks      TYPE csks-bkzks,
         bkzer      TYPE csks-bkzer,
         pkzer      TYPE csks-pkzer,
       END OF gs_data.
  DATA gt_data LIKE TABLE OF gs_data.

  DATA:lw_selopt     TYPE ddshselopt,
       lr_kostl      TYPE RANGE OF csks-kostl,
       lr_kokrs      TYPE RANGE OF csks-kokrs,
       lr_bukrs      TYPE RANGE OF csks-bukrs,
       lr_kosar      TYPE RANGE OF csks-kosar,
       lr_verak      TYPE RANGE OF csks-verak,
       lr_verak_user TYPE RANGE OF csks-verak_user,
       lr_mctxt      TYPE RANGE OF cskt-mctxt,
       lr_spras      TYPE RANGE OF cskt-spras,
       lr_bkzkp      TYPE RANGE OF csks-bkzkp.

  DATA : lw_kostl      LIKE LINE OF lr_kostl,
         lw_kokrs      LIKE LINE OF lr_kokrs,
         lw_bukrs      LIKE LINE OF lr_bukrs,
         lw_kosar      LIKE LINE OF lr_kosar,
         lw_verak      LIKE LINE OF lr_verak,
         lw_verak_user LIKE LINE OF lr_verak_user,
         lw_mctxt      LIKE LINE OF lr_mctxt,
         lw_spras      LIKE LINE OF lr_spras,
         lw_bkzkp      LIKE LINE OF lr_bkzkp.

  LOOP AT cs_shlp-selopt INTO lw_selopt.
    CASE lw_selopt-shlpfield.
      WHEN 'KOSTL'.
        CLEAR lr_kostl.
        lw_kostl-sign   = lw_selopt-sign.
        lw_kostl-option = lw_selopt-option.
        lw_kostl-low    = lw_selopt-low.
        lw_kostl-high   = lw_selopt-high.
        APPEND lw_kostl TO lr_kostl.
      WHEN 'KOKRS'.
        lw_kokrs-sign   = lw_selopt-sign.
        lw_kokrs-option = lw_selopt-option.
        lw_kokrs-low    = lw_selopt-low.
        lw_kokrs-high   = lw_selopt-high.
        APPEND lw_kokrs TO lr_kokrs.
      WHEN 'BUKRS'.
        lw_bukrs-sign   = lw_selopt-sign.
        lw_bukrs-option = lw_selopt-option.
        lw_bukrs-low    = lw_selopt-low.
        lw_bukrs-high   = lw_selopt-high.
        APPEND lw_bukrs TO lr_bukrs.
      WHEN 'KOSAR'.
        lw_kosar-sign   = lw_selopt-sign.
        lw_kosar-option = lw_selopt-option.
        lw_kosar-low    = lw_selopt-low.
        lw_kosar-high   = lw_selopt-high.
        APPEND lw_kosar TO lr_kosar.
      WHEN 'VERAK'.
        lw_verak-sign    = lw_selopt-sign.
        lw_verak-option  = lw_selopt-option.
        lw_verak-low     = lw_selopt-low.
        lw_verak-high    = lw_selopt-high.
        APPEND lw_verak TO lr_verak.
      WHEN 'VERAK_USER'.
        lw_verak_user-sign   = lw_selopt-sign.
        lw_verak_user-option = lw_selopt-option.
        lw_verak_user-low    = lw_selopt-low.
        lw_verak_user-high   = lw_selopt-high.
        APPEND lw_verak_user TO lr_verak_user.
      WHEN 'MCTXT'.
        lw_mctxt-sign   = lw_selopt-sign.
        lw_mctxt-option = lw_selopt-option.
        lw_mctxt-low    = lw_selopt-low.
        lw_mctxt-high   = lw_selopt-high.
        APPEND lw_mctxt TO lr_mctxt.
      WHEN 'SPRAS'.
        lw_spras-sign   = lw_selopt-sign.
        lw_spras-option = lw_selopt-option.
        lw_spras-low    = lw_selopt-low.
        lw_spras-high   = lw_selopt-high.
        APPEND lw_spras TO lr_spras.
      WHEN 'BKZKP'.
        lw_bkzkp-sign   = lw_selopt-sign.
        lw_bkzkp-option = lw_selopt-option.
        lw_bkzkp-low    = lw_selopt-low.
        lw_bkzkp-high   = lw_selopt-high.
        APPEND lw_bkzkp TO lr_bkzkp.
    ENDCASE.

  ENDLOOP.

  SELECT
    a~kostl
    a~kokrs
    a~bukrs
    a~kosar
    a~verak
    a~verak_user
    b~mctxt
    b~spras
    a~datab
    a~datbi
    FROM csks AS a
  INNER JOIN cskt AS b ON a~kokrs = b~kokrs AND a~kostl = b~kostl AND a~datbi = b~datbi
  INTO TABLE gt_data
  WHERE  a~kostl      IN  lr_kostl
    AND  a~kokrs      IN  lr_kokrs
    AND  a~bukrs      IN  lr_bukrs
    AND  a~kosar      IN  lr_kosar
    AND  a~verak      IN  lr_verak
    AND  a~verak_user IN  lr_verak_user
    AND  b~mctxt      IN  lr_mctxt
    AND  b~spras      IN  lr_spras
    AND  a~bkzkp      IN  lr_bkzkp.


  CALL FUNCTION 'F4UT_RESULTS_MAP'
    TABLES
      shlp_tab          = pt_shlp_tab
      record_tab        = pt_record_tab
      source_tab        = gt_data
    CHANGING
      shlp              = cs_shlp
      callcontrol       = cs_callcontrol
    EXCEPTIONS
      illegal_structure = 1
      OTHERS            = 2.
  IF sy-subrc <> 0.
    cv_rc = sy-subrc.
  ELSE.
    cv_rc = sy-subrc.
  ENDIF.

ENDFORM.

完成以上步骤就可以实现增强搜索帮助了。

作者:小飞猪猪猪猪猪猪猪–CSDN

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞猪猪猪猪猪猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值