SAP自建表做搜索条件时,需要的search help(源代码)

以我之前写的:在SAP自建 全国各大城市数据表http://blog.csdn.net/szlaptop/article/details/8074609 为基础,设计search help。

最终效果如下:



因为是自建全国各省市数据表,用做查询的时候没有search help ,很难记住那个省份,城市的ID是多少。所以利用search help功能。操作如下:

代码相对简单,入门级别的一看便知。


*&---------------------------------------------------------------------*
*& REPORT  ZSEARCHHELP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSEARCHHELP.
TABLES ZCHINA_MESSAGE.

TYPES:BEGIN OF T_AREA,
      AREACODE TYPE ZCHINA_MESSAGE-AREACODE,
      AREANAME TYPE ZCHINA_MESSAGE-AREANAME,
  END OF T_AREA.

TYPES:BEGIN OF T_PROVINCE,
    PROVINCECODE TYPE ZCHINA_MESSAGE-PROVINCECODE,
    PROVINCE TYPE ZCHINA_MESSAGE-PROVINCE,
END OF T_PROVINCE.

TYPES:BEGIN OF T_CITY,
    CITYCODE TYPE ZCHINA_MESSAGE-CITYCODE,
    CITY TYPE ZCHINA_MESSAGE-CITY,
END OF T_CITY.


DATA: IT_AREA TYPE STANDARD TABLE OF T_AREA,   "定义大区内表
      IT_PROVINCE TYPE STANDARD TABLE OF T_PROVINCE, "定义省份内表
      IT_CITY TYPE STANDARD TABLE OF T_CITY,   "定义城市内表

      WA_RETURN_TAB TYPE DDSHRETVAL,
      IT_RETURN_TAB TYPE STANDARD TABLE OF DDSHRETVAL, "接口结构搜索帮助 <-> 帮助系统
      V_REPID TYPE SY-REPID,
      V_DYNNR TYPE SY-DYNNR. "ABAP 程序, 当前屏幕的编号

SELECT-OPTIONS:S_ACODE FOR ZCHINA_MESSAGE-AREACODE NO INTERVALS NO-EXTENSION,
               S_PCODE FOR ZCHINA_MESSAGE-PROVINCECODE NO INTERVALS NO-EXTENSION,
               S_CCODE FOR ZCHINA_MESSAGE-CITYCODE NO INTERVALS NO-EXTENSION.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ACODE-LOW.

  IF IT_AREA[] IS INITIAL.
    PERFORM INIT_AREALIST.
  ENDIF.
  PERFORM F_VALUEHELP_AREA.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PCODE-LOW.

  IF IT_PROVINCE[] IS INITIAL.
    PERFORM INIT_PROVINCELIST.
  ENDIF.
  PERFORM F_VALUEHELP_PROVINCE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CCODE-LOW.

  IF IT_CITY[] IS INITIAL.
    PERFORM INIT_CITYLIST.
  ENDIF.
  PERFORM F_VALUEHELP_CITY.



*&---------------------------------------------------------------------*
*&      Form  INIT_KSTARLIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM INIT_AREALIST.
  V_REPID = SY-REPID.
  V_DYNNR = SY-DYNNR.

  SELECT DISTINCT AREACODE AREANAME FROM ZCHINA_MESSAGE INTO TABLE IT_AREA ORDER BY AREACODE.

ENDFORM.                    "INIT_AREALIST

*&---------------------------------------------------------------------*
*&      Form  INIT_PROVINCELIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM INIT_PROVINCELIST.
  V_REPID = SY-REPID.
  V_DYNNR = SY-DYNNR.

  SELECT DISTINCT PROVINCECODE PROVINCE FROM ZCHINA_MESSAGE INTO TABLE IT_PROVINCE ORDER BY PROVINCECODE.

ENDFORM.                    "INIT_PROVINCELIST

*&---------------------------------------------------------------------*
*&      Form  INIT_CITYLIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM INIT_CITYLIST.
  V_REPID = SY-REPID.
  V_DYNNR = SY-DYNNR.

  SELECT DISTINCT CITYCODE CITY FROM ZCHINA_MESSAGE INTO TABLE IT_CITY ORDER BY CITYCODE.

ENDFORM.                    "INIT_CITYLIST

*&---------------------------------------------------------------------*
*&      Form  F_VALUEHELP_KSTAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_VALUEHELP_AREA.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'AREACODE'
      DYNPPROG        = V_REPID
      DYNPNR          = V_DYNNR
      DYNPROFIELD     = 'S_ACODE-LOW'
      VALUE_ORG       = 'S'
      MULTIPLE_CHOICE = 'X'
    TABLES
      VALUE_TAB       = IT_AREA
      RETURN_TAB      = IT_RETURN_TAB.

  IF SY-SUBRC = 0.
    S_ACODE-SIGN = 'I'.
    S_ACODE-OPTION = 'EQ'.

    LOOP AT IT_RETURN_TAB INTO WA_RETURN_TAB.  "将内表的值传给结构
      S_ACODE-LOW = WA_RETURN_TAB-FIELDVAL.  "将屏幕选取的值填充上去
      APPEND S_ACODE.
    ENDLOOP.

  ENDIF.


ENDFORM.                    "F_VALUEHELP_AREA

*&---------------------------------------------------------------------*
*&      Form  F_VALUEHELP_PROVINCE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_VALUEHELP_PROVINCE.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'PROVINCECODE'
      DYNPPROG        = V_REPID
      DYNPNR          = V_DYNNR
      DYNPROFIELD     = 'S_PCODE-LOW'
      VALUE_ORG       = 'S'
      MULTIPLE_CHOICE = 'X'
    TABLES
      VALUE_TAB       = IT_PROVINCE
      RETURN_TAB      = IT_RETURN_TAB.

  IF SY-SUBRC = 0.
    S_PCODE-SIGN = 'I'.
    S_PCODE-OPTION = 'EQ'.

    LOOP AT IT_RETURN_TAB INTO WA_RETURN_TAB.
      S_PCODE-LOW = WA_RETURN_TAB-FIELDVAL.
      APPEND S_PCODE.
    ENDLOOP.

  ENDIF.


ENDFORM.                    "F_VALUEHELP_PROVINCE

*&---------------------------------------------------------------------*
*&      Form  F_VALUEHELP_CITY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_VALUEHELP_CITY.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'CITYCODE'
      DYNPPROG        = V_REPID
      DYNPNR          = V_DYNNR
      DYNPROFIELD     = 'S_CCODE-LOW'
      VALUE_ORG       = 'S'
      MULTIPLE_CHOICE = 'X'
    TABLES
      VALUE_TAB       = IT_CITY
      RETURN_TAB      = IT_RETURN_TAB.

  IF SY-SUBRC = 0.
    S_CCODE-SIGN = 'I'.
    S_CCODE-OPTION = 'EQ'.

    LOOP AT IT_RETURN_TAB INTO WA_RETURN_TAB.
      S_CCODE-LOW = WA_RETURN_TAB-FIELDVAL.
      APPEND S_CCODE.
    ENDLOOP.

  ENDIF.


ENDFORM.                    "F_VALUEHELP_CITY


作为一名刚入行不久的新人,在接到任务要做一个这样的工作时,脑子一片空白不知道如何下手。将自建的表的字段要出现在查询条件 时才知道没有search help。如果不考虑search help,理论上这个工作没法交差的,毕竟那么多省区谁能记住编码呢。

几经搜索,sap标准里面有个示例程序“DEMO_DYNPRO_F4_HELP_MODULE”,于是照猫画虎的做了一遍不见效果。这里面的代码有的难度的,要重新添加屏幕,定位屏幕,设置屏幕等。于是继续google,搜到一条老外的博文,虽说是E文,但是有图有代码,很容易就看明白了,这样就有了上面的源代码。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值