前面时间看了一下黄佳先生的《SAP高级应用开发》,总体来说,我认为该书写的一般,当然我做了一些笔记,权当作是复习,先记录如下:
1, RFM: Remote Function Model
2, RFC的通信模式:同步通信和异步通信
3, RFC的模式:sRFC,synchronous RFC
aRFC,asynchronous RFC
tRFC,transaction RFC
qRFC,queued RFC
pRFC,parrodel FRC
4, FRM: a 参数申明:必须在参数定义是申明<passed valued>
b 格式转化:实参长度不能大于被调用形参的长度
C 异常处理:raise exception
5, 调用RFM: Call Function rfm_name
Destination dest
parameter list
其中Destination dest在 SM59 中定义
FM:SXPG_COMMAND_EXECUTE用于执行服务器的系统命令
Call Function –Destination sRFC
Call Function –Starting new Task aRFC
Call Function –In Background Task tRFC
6 , RFC上下文
A 本地正常调用:在跳用程序的work process中
B 远程调用:独立的工作进程
C 所有的远程调用都在目标系统中存在一个独立的 RFC上下文即RFC Context
D 通常情况下,功能模块调用和主程序位于相同的LUW中,不会触发Commit/Rollback,需显示执行。但 SRFC和aRFC调用中的每一个FM都拥有自己的 LUW,即每次调用是都将隐式触发提交
7, sRFC和aRFC中可以存在dialog过程,如call screen, call transcation等。尽管RFC可以在后台处理,但如果在后台处理,RFC的对话将引起system_failture.
8, RFC的调式:对于aRFC,将打开新的会话进行远程调式
9, sRFC的调用:调用程序将等待返回。
10, aRFC:被调用的功能模块立即执行,调用程序不等待结果<Strating New Task>
A: 不能指定Importing 参数
B:对话处理和调式:打开新的会话并可以来回切换,打开新的会话:调式窗口
C:aRFC调用时的结果接收
Performing return_Form on end of Task
Form return_form using taskname
… receive results from funcation rfc_name
EndForm.
一般情况下会在rerun_form中设置set user_command ‘OKCD’,然后在主程序中使用AT user_Command.
D: 异步调用的等待
Wait until 必须与Performing同时使用
Wait until log_exp[up to sec seconds]可以在return_form中对log_exp中的条件赋值,从而达到等待RFC返回结果的目的。
11, tRFC:将多个逻辑上相关的远程调用绑定至同一个LUW上,并按照调用顺序执行,在到达 commit work 时执行所有计划的更新。
<In background task ….Commit work>
A: tRFC部要求被调用时立即执行,如果远程系统不可用将保存在本地队列中,如果在设定时间内,远程系统仍不可用,将自动设置为后台作业
B: 不能返回结果,不允许交互性对话、调试
C: FM中不能存在Export的参数,Call Funcation 时 不能指定improting
D: 事务ID : 表aRFCState: LUW执行状态
aRFCSdate:输入的数据
SM58查看并重启出错的RFM
E: 多RFC处理:多个 RFC针对不同的目标
F:出错:系统报表RSAFCSE重新执行。