自定义F4的新记录

时间:2019-07-23 07:37:08

标签: sap abap sap-crm

我创建了一个搜索帮助,其中包含2个字段:iddescription

我想将新行添加到不是源表中的结果中。听说我们可以通过“搜索帮助出口”来完成此操作,但是我不知道该怎么做。

我要添加此行:

ID       Description
00004    "For all users"

上下文:我的搜索帮助是在后端中创建的,并将其附加到CRM WEBUI组件上的分配块中,并且效果很好。但是,现在我需要在F4中添加新值,只需增加一行即可。

2 个答案:

答案 0 :(得分:2)

默认情况下,搜索帮助会显示数据库表或视图(“选择方法”),所有列或仅在搜索帮助中定义的特定列的内容。

如果您希望通过从头开始构建(空的“选择方法”)或改编从该“选择方法”中读取的数据来显示不同的数据,则需要使用Search Help Exit

搜索帮助出口是要分配给搜索帮助的功能模块,在执行搜索帮助期间的不同时刻(称为“步骤”)调用,可以修改搜索帮助的行为和内容。最重要的步骤是:

  • “ SELECT”:在最终显示选择对话框以输入值以过滤数据之后,在SAP从数据库中提取数据(如果有)之前调用它。如果“选择方法”留空,则此时您可以自己初始化数据。
  • “ DISP”:在SAP从数据库中提取数据(如果有“选择方法”)之后,即在显示之前调用它。目前,您可以更改数据。

创建搜索帮助出口的步骤:

  1. 使用以下签名创建功能模块(您可以复制模板功能模块F4IF_SHLP_EXIT_EXAMPLE):
    CHANGING
       VALUE(SHLP) TYPE SHLP_DESCR
       VALUE(CALLCONTROL) LIKE DDSHF4CTRL
    TABLES
       SHLP_TAB TYPE SHLP_DESCT
       RECORD_TAB LIKE SEAHLPRES.
    
  2. 在功能模块中添加ABAP代码以构建或过滤数据:
    • 步骤名称是参数callcontrol-step
    • 记录在参数RECORD_TAB中;要更改它们,请使用您手动键入的intermeidate内部表来匹配搜索帮助中为“命中列表输出”选择的列(列的顺序并不重要,因为此后F4UT_*功能模块的逻辑是基于列名)。要将RECORD_TAB传送到您的内部表,请调用功能模块F4UT_PARAMETER_VALUE_GET(一次一列,多次对其重复调用),然后将您的内部表传送到RECORD_TAB,请调用功能模块F4UT_RESULTS_MAP
    • 如果需要它们,最终的数据选择在参数SHLP-SELOPT中。
  3. 编辑搜索帮助(事务代码SE11),然后在屏幕字段“搜索帮助出口”中输入功能模块的名称。

有关更多信息,请阅读SAP Library about Search Help ExitsF4UT_*功能模块随系统一起提供一些文档,并且系统中还有一些示例,例如搜索帮助SFLIGHT。

在您的特定情况下,建议您不要定义“选择方法”,并使用带有以下代码的搜索帮助退出:

DATA source_tab TYPE TABLE OF zyourtable.
IF callcontrol-step = 'SELECT'.
  SELECT * FROM zyourtable INTO TABLE source_tab.
  APPEND value ty_source( ID = '00004' Description = 'For all users' ) TO source_tab.
  CALL FUNCTION 'F4UT_RESULTS_MAP' " transfer of source_tab to record_tab
    TABLES
      SHLP_TAB    = shlp_tab
      RECORD_TAB  = record_tab
      SOURCE_TAB  = source_tab
    CHANGING
      SHLP        = shlp
      CALLCONTROL = callcontrol.
ENDIF.

答案 1 :(得分:1)

这是我基于桑德拉(Sandra)答案的最终解决方案:

IF callcontrol-step = 'SELECT'.
DATA: BEGIN OF ls_res_tab,
        id          TYPE zdt_favorite_retail_store,
        description TYPE zdt_favorite_retail_store_decr,
      END OF ls_res_tab.

DATA: res_tab LIKE TABLE OF ls_res_tab.

SELECT id description FROM ztx_fav_store INTO TABLE res_tab.

ls_res_tab-id = '00004'.
ls_res_tab-description = 'For all  users'.
APPEND ls_res_tab TO res_tab.

"* Prepare for output
CALL FUNCTION 'F4UT_RESULTS_MAP'
  TABLES
    shlp_tab          = shlp_tab
    record_tab        = record_tab
    source_tab        = res_tab
  CHANGING
    shlp              = shlp
    callcontrol       = callcontrol
  EXCEPTIONS
    illegal_structure = 1
    OTHERS            = 2.

EXIT. "Don't process STEP DISP additionally in this call.
ENDIF.