科莱特教育

 找回密码
 立即注册
查看: 3073|回复: 0

ABAP: FUNCTION MODULE

[复制链接]

11

主题

11

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2020-12-31 08:23:50 | 显示全部楼层 |阅读模式
ABAP 开发系列(10): Function Module
内容包括:
1. Function Module概述
2. Function Group
3. Function Module的操作
4. RFC (Remote Function Call)
5. 创建Function Module实例
6. BAPI

1. Function Module 概述
Function Module是模块化(Modularization)的另一种单元,也叫函数模块,一般简称为函数(FM)。
SAP R/3系统提供了Function Library(FL)来封装Function Module,而每个Function Module 都会有一个输入/输出参数的接口供程序调用传输。
能多次独立或直接被SAP其他程序调用,强调了其可复用性。
Function Module也支持远程访问模式,即:Remote Function Call(RFC),提供外部接口供非SAP系统使用;
同时,SAP官方也提供了 JCO(Java Connector)、NCO(.Net Connector)等组件与SAP RFC通信。
下面介绍 Function Module 的操作及相关应用。

2. 函数组(Function Groups
每个Function Module都必须指定分属Function Group,用于区分函数操作类别。
一般情况下,Function Group定义的都是操作类似的Function Module,包括一系列组件:

1). 数据对象(Data Objects
Function Group的全局变量、内表、结构、类等对象,可通用于整个Function Group;
2). 子程序(Subroutine
创建的子程序可被在该Function Group内的 Function Module 调用;
3). 屏幕(Screens
创建的屏幕可被在该Function Group内的Function Module使用;

                               
登录/注册后可看大图

2.1 创建Function Group
1). 通过T-Code:SE37,进入Function Builder的初始界面:

                               
登录/注册后可看大图
2) 通过菜单栏路径:Goto -> Function Groups -> Create Groups

                               
登录/注册后可看大图
(除了Create Group外,还有 Change Group、Display Group、Delete Group、Find Group,分别用于修改、显示、删除、查找Function Group属性信息)
选择Create Group之后,会弹出 “Create Function Group” 的对话框:

                               
登录/注册后可看大图
输入Function Group名称及描述后保存按钮。
弹出 “Create Object Directory Entry” 对话框,要求存放在哪个开发包(Package)里面,因为为测试Demo,故点击“本地对象(Local Object)”即可。

                               
登录/注册后可看大图

3)保存成功后,系统会在状态栏上弹出提示:

                               
登录/注册后可看大图

3.  Function Module 的操作
每个Function Module的接口都会包含以下元素:
1). Import Parameter(输入参数)

                               
登录/注册后可看大图
调用 Function Module 时,外部传入的参数;
如若勾选参数中的Option选项,则该参数为非必输,如若不勾选,则表示必输。
定义传入参数与定义变量时一样,可用Like语句参考数据字典中的类型,如若用TYPE定义,Associated Type可以是基本类型,也可以是预定义类型。

2). Export Parameter (输出参数)

                               
登录/注册后可看大图
当 Function Module 处理完数据逻辑后,返回输出的参数;
不仅可返回变量,也可返回结构。

3). Changing Parameter

                               
登录/注册后可看大图
作为输入参数传入 Function Module 操作后,修改并作为返回输出的参数;

4). Tables

                               
登录/注册后可看大图
可传输内表作为数据源,Function Module 处理完成后,返回结果集。

5). Exceptions (异常)

                               
登录/注册后可看大图
设定异常参数,在 Function Module 处理过程中,自定义异常输出。

3.1 Calling Function Module
Function Module 可以被不同的程序重复调用,避免了不同系统相同功能代码的重复开发。
然而在开发过程中,不可能每个函数的Import参数和Export参数都能记住,可以使用 ABAP 的Pattern方式调用 Function Module。
操作步骤:
1) 将光标聚焦在需要Call Function的地方;
2) 点击ABAP编辑器工具栏中的 ”Pattern“按钮:

                               
登录/注册后可看大图
弹出对话框,在CALL  FUNCTION 栏位输入函数名称并单击确定:

                               
登录/注册后可看大图
3) 编辑器中会出现Function 相应的接口参数:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em][size=1em]CALL FUNCTION 'LAST_DAY_OF_MONTHS'
[size=1em]  EXPORTING
[size=1em]    day_in                  =
[size=1em]* IMPORTING
[size=1em]*   LAST_DAY_OF_MONTH       =
[size=1em]* EXCEPTIONS
[size=1em]*   DAY_IN_NO_DATE          = 1
[size=1em]*   OTHERS                  = 2
[size=1em]          .
[size=1em]IF sy-subrc <> 0.
[size=1em]* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
[size=1em]*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
[size=1em]ENDIF.



系统会将Function必输项作为默认的输入项。

注意:
原先定义的Export接口变为了程序中的Importing 参数;Import接口在程序中变为了Exporting参数:

                               
登录/注册后可看大图

3.2 异常处理
在Function Module中的Exception接口中,定义异常参数:

                               
登录/注册后可看大图
然后在程序处理过程,如若出现异常,可以通过 Raise 语句 输出异常:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em][size=1em]FUNCTION STRING_SPLIT.
[size=1em]  ...
[size=1em]  IF ...
[size=1em]     RAISE NO_DATA.
[size=1em]  ENDIF.



在调用函数时,通过EXCEPTIONS接口抛出异常
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em][size=1em]CALL FUNCTION 'STRING_SPLIT'
[size=1em]  EXPORTING
[size=1em]    delimiter = '-'
[size=1em]    string    = text
[size=1em]  IMPORTING
[size=1em]    head      = head
[size=1em]    tail      = tail
[size=1em]  EXCEPTIONS
[size=1em]    not_found = 1
[size=1em]    not_valid = 2
[size=1em]    too_long  = 3
[size=1em]    too_small = 4
[size=1em]    OTHERS    = 5.




4. RFC (Remote Function Call)
RFC是 Function Module 类型的一种,区别在于处理的类型为 Remote,在 Function Module 的Attribute属性中可以看到:

                               
登录/注册后可看大图
RFC允许该Function被SAP与非SAP程序调用,是SAP与外部应用系统的通信接口。

示例:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em]21

[size=1em]22

[size=1em]23

[size=1em][size=1em]DATA:  INFO LIKE RFCSI,       "Importing parameter
[size=1em]       MSG_TEXT(80) TYPE C.   "Message text
[size=1em] ...

[size=1em]CALL FUNCTION 'RFC_SYSTEM_INFO'  
[size=1em]DESTINATION 'NONE'
[size=1em] IMPORTING
[size=1em]    RFCSI_EXPORT = INFO
[size=1em] EXCEPTIONS
[size=1em]    COMMUNICATION_FAILURE = 1
[size=1em]    SYSTEM_FAILURE        = 2 .

[size=1em]IF SY-SUBRC NE 0.

[size=1em]    WRITE: MSG_TEXT.

[size=1em]ELSE.

[size=1em]   WRITE: 'O.K.'.

[size=1em]ENDIF.

[size=1em]...



通过DESTINATION定义不同的源,连接外部系统。

5. 创建Function Module实例
下面通过示例创建一个Function Module:
操作步骤:
1) 通过T-Code:SE37进入Function Builder,输入Function Module名称(以Z开头),点击Create:

                               
登录/注册后可看大图
弹出 “Create Function Module”对话框,输入上面创建好的Function Group及 Function Module 描述:

                               
登录/注册后可看大图
2) 点击确认后,会提示弹出对话框,表示该 Function Module 已被SAP保留:

                               
登录/注册后可看大图

3) 切换到Attribute选项卡,选择处理类型:

                               
登录/注册后可看大图
a). Normal Function Module:普通调用模式,该Function在SAP系统中使用;
b). Remote-Enabled Module:开启Remote功能,即远程调用模式,RFC
c). Update Module:将该 Function Module 设置为Update 模式,调用该模式,可使用Update语句:
CALL FUNCTION  ‘FMXXX’  IN UPDATE TASK
必须每次使用COMMIT命令时才能完成数据操作。
这里保持默认设置即可。

4) 输入接口参数(Import/Export/Changing/Tables参数)

                               
登录/注册后可看大图

5) 编辑程序后,激活程序:

                               
登录/注册后可看大图

6) 调用程序:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]CALL FUNCTION 'ZSAPJX_FM'
[size=1em]  EXPORTING
[size=1em]    ip_date = '20140101'.




6. BAPI
BAPI的全程为Business Application Process Interface,实质上是一种特殊的RFC,通过BAPI能够完成一些特殊的商业任务。
可以通过BAPI批量维护、处理业务数据。

SAP R/3系统提供了大量的BAPI,可以通过BAPI浏览器查找(T-Code:BAPI),可以将操作对象按实际业务进行分组:

                               
登录/注册后可看大图

例如,查找取物料明细的BAPI:Logistic – General -> Logistic Basic Data -> Material -> GetDetail

                               
登录/注册后可看大图
双击Function Module名称即可查看BAPI的相应的接口参数。





ABAP Basis, SAP ABAP, SAP ABAP 开发系列\ ABAP 开发, BAPI, Function, Function Group, RFC, SAP ABAP

回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则


QQ|科莱特教育

GMT, 2025-4-19 00:18 , Processed in 0.049195 second(s), 23 queries .

福州科莱特教育科技有限公司 版权所有 闽ICP备2021003729号-2

Copyright C 2018-2022 All Rights Reserved

快速回复 返回顶部 返回列表