前言
基于现在项目的要求,程序需要动态的调用不同的client,去生成数据,使用配置表比较复杂,且需要更改底表,所以讲RFC连接做成自定义搜索帮助,通过不同变式,可以实现动态跨client生成数据。
选择屏幕
首先选择屏幕定义一个PARAMETERS模板系统,在此基础上增加搜索帮助
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002.
"目标系统
PARAMETERS:p_mandt LIKE rfcdes-rfcdest.
SELECTION-SCREEN END OF BLOCK blk2.
INITIALIZATION 和 AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
*& Event initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
PERFORM frm_get_mandt_f4. "创建例程
*&---------------------------------------------------------------------*
*& Event at selection-screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_mandt. "
PERFORM frm_create_mandt_help. " 创建自定义帮助
生成PERFORM
frm_get_mandt_f4
*&---------------------------------------------------------------------*
*& Form frm_get_mandt_f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_mandt_f4 .
SELECT a~rfcdest,b~rfcdoc1 INTO TABLE @gt_f4 FROM rfcdes AS a
INNER JOIN rfcdoc AS b
ON a~rfcdest EQ b~rfcdest
AND b~rfclang EQ '1'
WHERE a~rfctype EQ '3'.
ENDFORM.
frm_create_mandt_help
*&---------------------------------------------------------------------*
*& Form frm_create_mandt_help
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_mandt_help .
DATA: lt_dfies TYPE TABLE OF dfies,
lr_tabdescr TYPE REF TO cl_abap_structdescr,
lv_offset TYPE doffset.
READ TABLE gt_f4 INTO DATA(gs_f4) INDEX 1.
lr_tabdescr ?= cl_abap_structdescr=>describe_by_data( gs_f4 ). " ?= 显示向下转换
lt_dfies = cl_salv_data_descr=>read_structdescr( lr_tabdescr ). " 获取结构
LOOP AT lt_dfies ASSIGNING FIELD-SYMBOL(<fs_dfies>). " 填入相关描述
<fs_dfies>-lfieldname = <fs_dfies>-fieldname.
<fs_dfies>-offset = lv_offset.
IF <fs_dfies>-fieldname = 'RFCDEST'.
<fs_dfies>-scrtext_l = 'RFC连接'.
<fs_dfies>-scrtext_m = 'RFC连接'.
<fs_dfies>-scrtext_s = 'RFC连接'.
<fs_dfies>-reptext = 'RFC连接'.
ELSEIF <fs_dfies>-fieldname = 'RFCDOC1'.
<fs_dfies>-scrtext_l = 'RFC 连接描述'.
<fs_dfies>-scrtext_m = 'RFC 连接描述'.
<fs_dfies>-scrtext_s = 'RFC 连接描述'.
<fs_dfies>-reptext = 'RFC 连接描述'.
ENDIF.
lv_offset = lv_offset + <fs_dfies>-intlen.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'RFCDEST' " 参考的表字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_MANDT' " 用于选择屏幕上的哪一个
value_org = 'S'
TABLES
value_tab = gt_f4 " 自定义的表
field_tab = lt_dfies " 表头描述
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM.
页面效果
BAPI使用
bapi 或者远程函数后面直接加DESTINATION 和选择屏幕字段即可
"--调用BAPI
CALL FUNCTION 'ZFM_ZWZMM08B_CREATE' DESTINATION p_mandt