sap abap 自定义RFC搜索帮助,实现动态调用跨client的bapi生成数据

前言

基于现在项目的要求,程序需要动态的调用不同的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好coder

大佬们,行行好!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值