Abap 自定义F4的新记录

Abap 自定义F4的新记录,abap,sap-crm,Abap,Sap Crm,我创建了一个搜索帮助,它有两个字段:id和description 我想在结果中添加新行,这些结果不是来自源表。我听说我们可以通过搜索帮助出口来完成,但我不知道怎么做 我要添加此行: ID Description 00004 "For all users" 上下文:我的搜索帮助是在后端创建的,我将其附加到CRM WEBUI组件的分配块中,效果良好。但是,现在我需要在F4中添加新值,只需添加一个新行。默认情况下,搜索帮助显示数据库表或视图(“选择方法”)的内容、所有列或搜索帮助中

我创建了一个搜索帮助,它有两个字段:
id
description

我想在结果中添加新行,这些结果不是来自源表。我听说我们可以通过搜索帮助出口来完成,但我不知道怎么做

我要添加此行:

ID       Description
00004    "For all users"

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

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

如果您希望通过从头构建(空的“选择方法”)或调整从该“选择方法”读取的数据来显示不同的数据,则需要使用

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

  • “选择”:在SAP从数据库提取数据(如果有)之前,在最终显示选择对话框以输入值以过滤数据之后,调用该选项。如果“选择方法”为空,此时您可以自己初始化数据
  • “DISP”:在SAP从数据库中提取数据(如果有“选择方法”)之后,在显示之前调用它。此时,您可以更改数据
创建搜索帮助出口的步骤:

  • 创建具有以下签名的功能模块(您可以复制模板功能模块
    F4IF\u SHLP\u EXIT\u示例
    ):
  • 在功能模块中添加ABAP代码以生成或过滤数据:
    • 步骤名称是参数
      callcontrol step
    • 记录在参数
      记录选项卡中
      ;要更改它们,请使用手动键入的intermeidate内部表来匹配为搜索帮助中的“命中列表输出”选择的列(列的顺序并不重要,因为
      F4UT.*
      功能模块的逻辑基于列名)。要将“记录”选项卡转移到内部表格,请调用函数模块
      F4UT\u参数\u值\u GET
      (一次一列,多次调用多列),要将内部表格转移到“记录”选项卡,请调用函数模块
      F4UT\u结果\u MAP
    • 如果需要,最终的数据选择在参数
      SHLP-SELOPT
  • 编辑搜索帮助(事务代码SE11),并在屏幕字段“搜索帮助退出”中输入功能模块的名称
  • 有关更多信息,请阅读,
    F4UT.*
    功能模块在您的系统中随附了一些文档,并且在您的系统中有类似搜索帮助指示灯的演示

    在您非常具体的情况下,我建议您不要定义“选择方法”,而是使用搜索帮助退出,并使用以下代码:

    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.
    

    以下是我基于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.
    

    您的问题与CRM WebUI的关系如何?搜索帮助用于SAP GUI for Windows(或Java或Web版本),而不是CRM WebUI。在这里,你的问题似乎只与搜索有关。是的,你是对的。这是我的错误。非常感谢你的评论。我的F4是在后端创建的,我将它附加到我的WEBUI上的分配块中,效果很好。但是,现在我需要在我的F4中添加新的值,只有一行。非常感谢,桑德拉。你的建议对我很有帮助。我解决了我的问题。行
    退出。“不要处理DISP…
    不是特定于问题的,因为您只需要为
    “选择”
    步骤定义ABAP代码,所以要继续回答问题,下一行应该是
    ENDFORTION
    ,无需使用
    EXIT
    (在其他情况下,如果您仍然需要退出,请选择
    RETURN
    以提供更清晰的含义,因为退出在其他情况下可能具有不同的含义;条件切换
    CASE callcontrol step
    也是一个很好的解决方案)。很好。我明白了。谢谢。
    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.