自定义F4的新记录
New record for custom F4
我创建了一个包含 2 个字段的搜索帮助:id
和 description
我想将新行添加到不是来自源 table 的结果中。我听说我们可以通过搜索帮助退出来完成,但我不知道该怎么做。
我想添加这一行:
ID Description
00004 "For all users"
上下文:我的搜索帮助是在后端创建的,我将其附加到我的 CRM WEBUI 组件的分配块中,效果很好。但是,现在我需要在我的 F4 中添加新值,只有一个新行。
默认情况下,搜索帮助显示数据库 table 或视图 ("selection method") 的内容、搜索帮助中定义的所有列或仅特定列。
如果您希望通过从头构建数据(空 "selection method")或调整从 "selection method" 读取的数据来显示不同的数据,您需要使用 Search Help Exit .
搜索帮助出口是分配给搜索帮助的功能模块,在搜索帮助执行过程中的不同时刻(称为"steps")被调用,它可以修改行为和内容寻找帮助(求助。最重要的步骤是:
- "SELECT":在SAP从数据库中提取数据(如果有的话)之前调用,在最终显示选择对话框以输入值以过滤数据之后调用。如果"selection method"为空,此时可以自行初始化数据。
- "DISP":在 SAP 从数据库中提取数据后(如果有 "selection method"),就在显示之前调用。这个时候,你可能会更改数据。
创建搜索帮助退出的步骤:
- 创建具有以下签名的功能模块(您可以复制模板功能模块
F4IF_SHLP_EXIT_EXAMPLE
):
CHANGING
VALUE(SHLP) TYPE SHLP_DESCR
VALUE(CALLCONTROL) LIKE DDSHF4CTRL
TABLES
SHLP_TAB TYPE SHLP_DESCT
RECORD_TAB LIKE SEAHLPRES.
- 在您的功能模块中添加 ABAP 代码以构建或过滤数据:
- 步骤名称为参数
callcontrol-step
。
- 记录在参数
RECORD_TAB
中;要更改它们,请使用您手动键入的中间内部 table 以匹配搜索帮助中为 "hit list output" 选择的列(列的顺序并不重要,因为 F4UT_*
的逻辑以下功能模块基于列名)。要将 RECORD_TAB 转移到您的内部 table 您调用功能模块 F4UT_PARAMETER_VALUE_GET
(一次一列,多次调用它),并转移您的内部 table RECORD_TAB 你调用函数模块 F4UT_RESULTS_MAP
.
- 如果您需要它们,最终的数据选择在参数
SHLP-SELOPT
中。
- 编辑搜索帮助(事务代码 SE11),并在屏幕字段中输入您的功能模块的名称 "Search help exit"。
更多信息请阅读SAP Library about Search Help Exits,F4UT_*
功能模块在您的系统中提供了一些文档,并且在您的系统中有搜索帮助SFLIGHT等演示。
在您的具体情况下,我建议您不要定义 "selection method" 并使用带有此代码的搜索帮助退出:
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.
我创建了一个包含 2 个字段的搜索帮助:id
和 description
我想将新行添加到不是来自源 table 的结果中。我听说我们可以通过搜索帮助退出来完成,但我不知道该怎么做。
我想添加这一行:
ID Description
00004 "For all users"
上下文:我的搜索帮助是在后端创建的,我将其附加到我的 CRM WEBUI 组件的分配块中,效果很好。但是,现在我需要在我的 F4 中添加新值,只有一个新行。
默认情况下,搜索帮助显示数据库 table 或视图 ("selection method") 的内容、搜索帮助中定义的所有列或仅特定列。
如果您希望通过从头构建数据(空 "selection method")或调整从 "selection method" 读取的数据来显示不同的数据,您需要使用 Search Help Exit .
搜索帮助出口是分配给搜索帮助的功能模块,在搜索帮助执行过程中的不同时刻(称为"steps")被调用,它可以修改行为和内容寻找帮助(求助。最重要的步骤是:
- "SELECT":在SAP从数据库中提取数据(如果有的话)之前调用,在最终显示选择对话框以输入值以过滤数据之后调用。如果"selection method"为空,此时可以自行初始化数据。
- "DISP":在 SAP 从数据库中提取数据后(如果有 "selection method"),就在显示之前调用。这个时候,你可能会更改数据。
创建搜索帮助退出的步骤:
- 创建具有以下签名的功能模块(您可以复制模板功能模块
F4IF_SHLP_EXIT_EXAMPLE
):CHANGING VALUE(SHLP) TYPE SHLP_DESCR VALUE(CALLCONTROL) LIKE DDSHF4CTRL TABLES SHLP_TAB TYPE SHLP_DESCT RECORD_TAB LIKE SEAHLPRES.
- 在您的功能模块中添加 ABAP 代码以构建或过滤数据:
- 步骤名称为参数
callcontrol-step
。 - 记录在参数
RECORD_TAB
中;要更改它们,请使用您手动键入的中间内部 table 以匹配搜索帮助中为 "hit list output" 选择的列(列的顺序并不重要,因为F4UT_*
的逻辑以下功能模块基于列名)。要将 RECORD_TAB 转移到您的内部 table 您调用功能模块F4UT_PARAMETER_VALUE_GET
(一次一列,多次调用它),并转移您的内部 table RECORD_TAB 你调用函数模块F4UT_RESULTS_MAP
. - 如果您需要它们,最终的数据选择在参数
SHLP-SELOPT
中。
- 步骤名称为参数
- 编辑搜索帮助(事务代码 SE11),并在屏幕字段中输入您的功能模块的名称 "Search help exit"。
更多信息请阅读SAP Library about Search Help Exits,F4UT_*
功能模块在您的系统中提供了一些文档,并且在您的系统中有搜索帮助SFLIGHT等演示。
在您的具体情况下,我建议您不要定义 "selection method" 并使用带有此代码的搜索帮助退出:
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.