SAP RFC教程

 

转载自:http://lrj0767.blog.163.com/blog/static/126031919201251953651978/

ABAP_RFC_BAPI培训教程

 

SAP R/3的接口方式主要有RFC、IDOC、BAPI三种。

RFC分二种:1 正常的本地RFC。2 远程RFC(外部系统调用)。

BAPI(SAP自带业务函数--封装好函数)。

RFC,BAPI 都可以理解成一个函数。它有输入、输出,改变,排除 参数,表(既可以输入也输出)。

 

1.1 RFC 参数介绍

1.2 创建一个SAP本地RFC。

1.3 创建一个远程RFC。

 

2 查找BAPI

 

3 调用RFC,BAPI

 

1.1 RFC 参数介绍

SE37

Attributes(属性), Import(输入参数),Export(输出参数),Changing(更改参数),

Tables(输入,输出内表),Exceptions(排除参数),Source code(编写代码)。

Attributes(属性):

Normal Function Module :在SAP内部调用RFC

Remote-Enabled Module:远程函数调用,即使用外部系统(.NET,VB,JAVA....)调用SAP RFC。

Update Module: 一般使用 Start immed(立刻执行).

 

Import(输入参数):

就是要传入来的条件参数,不能为内表。最常用。

Export(输出参数):

     就是返回值,也不能为内表。最常用。

Changing(更改参数):

     返回值,与export差不多,这个很少用。

Tables(输入,输出内表):

    可以把多个内表的值传进来,同时也可以把多个内表返回。

Exceptions(排除参数。):

    不常用。

Source code(编写代码):

就是编写代码了,如果不写代码,那这个RFC就没有用处了。

 

輸入參數,輸出參數,表 可以不全部使用.

1.2 创建一个SAP本地RFC。

运行SE37 TCODE.

填写一个RFC函数名,名字必须是以"Z"或"Y"开头,建议使用"Z"开头.然后点击Create按钮。

填写函数组与函数描述。

如果现有的函数组没有自己想的保存的函数组,则自己新创建一个。新开一个窗口,运行SE37.

填写函数组名字及描述,

保存。

在弹出要求填写包界面,如果该函数组不需要传到PRD,则保存到本地就行了,连扫LOACL OBJECT,如果要上传,自己从PACKAGE中选择包,与请求传输号。使用SE80創建包.

函数组创建成功,再返回到刚才创建RFC函数要求选择函数组的界面选择。

 

属性:

选择Normal Function Module 与 Start immed.

Import输入参数:

如果有输入参数,就填写,没有,可以不填写。

Parameter Name:填写参数名字。

Typing:填写参考类型,如Type, TYPE REF TO.

Associated Type:填写参考的字段,可以手工填写,也可以查找。

Default Value:填写默认值。

Optional:表示是否是可选。 打勾表示可以不必填写,不打勾表示必填。

Pass Value: 打勾表示使用默认值。如果填写了默认值,则此选择要勾上。

Short text:该参数的描述,如果是使用系统字段,则自动带出来。

在沒有默認值,如果optional沒有打勾,則會提示輸入值.

Export 输出参数:

如果有输出参数,就填写,没有,可以不填写。

Table :

引用结构或表,使用 LIKE, 不能使用TYPE。

在这里 ZPO_IN表示是传入的内表,ZPO_out是输出的内表。

Associated type :填写参考的结构或表名。

 

Source code:

编写代码跟在SE38中是一样的了,定义变量,结构,内表,SQL等。

FUNCTION Z_RFC_TEST1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(BUKRS_IN) TYPE  BUKRS DEFAULT 1000
*"  EXPORTING
*"     REFERENCE(BUKRS_OUT) TYPE  BUKRS
*"  TABLES
*"      ZPO_IN STRUCTURE  ZFI001_018_PR
*"      ZPO_OUT STRUCTURE  ZFI001_018_PR
*"----------------------------------------------------------------------
  DATA:BEGIN OF GI_EKKO OCCURS 0,  "PO 采购订单表头
    EBELN LIKE EKKO-EBELN, "PO 采购订单号
    BUKRS LIKE EKKO-BUKRS, "公司代码
  END OF GI_EKKO.
  
DATA:BEGIN OF GI_EKPO OCCURS 0,  "采购表ITEM表
    EBELN LIKE EKKO-EBELN, "采购单
    EBELP LIKE EKPO-EBELP, "采购单ITEM
    MATNR LIKE EKPO-MATNR, "物料号
    MENGE LIKE EKPO-MENGE, "采购数量
  END OF GI_EKPO.

  
SELECT EBELN BUKRS INTO TABLE GI_EKKO   FROM EKKO
    
WHERE BUKRS = BUKRS_IN.  "公司代码的值从输入参数中来。

  IF ZPO_IN[] IS NOT INITIAL.
    
SELECT EBELN EBELP MATNR MENGE INTO TABLE GI_EKPO FROM EKPO
      
FOR ALL ENTRIES IN ZPO_IN  "输入参数表
      WHERE EBELN = ZPO_IN-EBELN AND EBELP = ZPO_IN-EBELP.
*      记住,使用FOR ALL ENTRIES IN 来连接内表,一定要判断该内表不要为空,否则把该表全部记录都读取出来
  ENDIF.

  
READ TABLE GI_EKKO INDEX 1.
  
IF SY-SUBRC = 0.
    BUKRS_OUT = GI_EKKO-BUKRS.   
"把采购订单的第一条记录的公司代码输出
  ENDIF.

  
LOOP AT GI_EKPO.
    
MOVE-CORRESPONDING GI_EKPO TO ZPO_OUT. "输出内表
    APPEND ZPO_OUT.
    
CLEAR:GI_EKPO,ZPO_OUT.
  
ENDLOOP.
ENDFUNCTION.

代码编写完成程,然后激活,

本地RFC创建完成。

 

1.3 创建远程函数。

在属性处选择Remote-Enabled Module.

在输入、输出参数处还要把PASS VALUE勾选上。如果不勾选,不能激活

 

表,代码 都是一样的.

激活成功之后,还需要释放。

 

 

2 查找BAPI

BAPI是个SAP的封装好的业务函数。

运行BAPI TOCDE查找BAPI。

在里面分模块,根据业务去找相对应的BAPI。

 

 

通过Hierarchical 可看R3模块的业务BAPI,不是所有业务都有BAPI。

下面找到一个是创建发票的BAPI。

双击BAPI进入查看,或者运行SE37进入查看,

双击BAPI进入查看, 也是直接进入SE37的界面的。

输入参数:

TABLE:

 

 

3 调用RFC,BAPI.

在程序调用RFC,BAPI的地方,点击按钮,查看查找函数。

 

点击确认按钮,会自动带出所有参数出来。

如果输入参数,输出参数据都需要,则把它们去掉注解。

并给参数,内表绑定值。

得到的返回内表或输出参数再进行数据处理。

 

BAPI也是这样调用:

到这里还没有结束,调用RFC,BAPI都有一个返回信息,使用.

SY-SUBRC 判断是否成功。

 

Rfc: Z_RFC_TEST3

Code: ZRFC_TEST

REPORT  Z_RFC_TEST.

CALL FUNCTION 'Z_RFC_TEST1'
* EXPORTING
*   BUKRS_IN        = 1000
* IMPORTING
*   BUKRS_OUT       =
  TABLES
    ZPO_IN          =
    ZPO_OUT         =
          .

if sy-subrc = 0.
   
" 等于 0 表示成功  
endif.

CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'
* EXPORTING
*   CREATORDATAIN         =
*   TESTRUN               =
*   POSTING               =
  TABLES
    BILLINGDATAIN         =
*   CONDITIONDATAIN       =
*   CCARDDATAIN           =
*   TEXTDATAIN            =
*   ERRORS                =
    RETURN                =
    SUCCESS               =
          .

if sy-subrc = 0.
   
" 等于 0 表示成功  
endif.

 

 

剩下的就是自己处理返回的参数与内表了。

你可能感兴趣的:(RFC,+,WS,+,PI接口相关)