ABAP中的同步和异步调用

ABAP 的 CALL FUNCTION 类似于 Java/.NET 中的本地或远程方法调用。
CALL FUNCTION 可以分为四种:
1. Synchronous RFC (sRFC) - 同步调用
2. Asynchronous RFC (aRFC) - 异步调用
3. Transactional RFC (tRFC) - 保证 Transaction 数据一致性的调用
4. Queued RFC (qRFC) - 用一个对列序列化的 tRFC

本文很好地介绍了前面两种,也是最常用的两种。
SAP Help 的相关文档是:

http://help.sap.com/SAPhelp_nw04/helpdata/en/9f/db98ef35c111d1829f0000e829fbfe/frameset.htm
Calling Function Modules

http://help.sap.com/saphelp_nwpi71/helpdata/en/8f/53b67ad30be445b0ccc968d69bc6ff/frameset.htm
CALL FUNCTION

一、从一个程序同步调用其他的ABAP程序,有2种方式:

1,调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行。如:

CALL FUNCTION
<function>

SUBMIT <program> AND
RETURN

CALL TRANSACTION
<tcode>

使用CALL
FUNCTION ‘AAA’调用FM的时候,相应的FUNCTION
GROUP被加载到调用程序所在的internal
session。当FM执行完毕,接着执行调用程序。FUNCTION GROUP和其GLOBAL DATA会一直保存在这个internal
session
直到调用程序结束。当调用程序再次调用这个FM的时候,不会再次加载相应的FUNCTION GROUP。这个FUNCTON GROUP的GLOBAL
DATA和第一次调用它时的内容是一样的。

使用SUBMIT
<program> AND RETURN或者CALL
TRANSACTION <tcode>的时候,实际是插入了一个新的internal
session,当被调用的程序执行完毕之后,新插入的internal
session会被删除,继续执行调用程序。可以使用leave
program
语句来结束程序

2,调用程序被结束,被调用程序开始执行。如:

SUBMIT
<program>

LEAVE
TO TRANSACTION <tcode>.

使用SUBMIT语句之后,调用程序从所在的internal session中被删除了,被调用的程序被加载到这个internal session。

使用LEAVE
TO TRANSACTION <tcode>之后,当前external session中的所有internal session会被删除,并产生一个新的internal session,被调用的tcode会加载到这个新的internal
session中。特别要注意的是,使用这个语句之后,ABAP MEMORY会被初始化,意思就是你不可以通过ABAP MEMORY向被调用的tcode传值。

二,FUNCTION
MODULE的异步调用

CALL FUNCTION ‘AAA’ STARTING
NEW TASK <taskname>

PERFORMING <subroutine> ON END OF TASK

EXPORTING

…..

使用上面语句之后,AAA和调用其的程序会并行运行。可以在<subroutine>中使用RECEIVE RESULTS FROM FUNCTION
‘AAA’语句来获得FUNCTION运行的结果。值得注意的是,用STARTING NEW TASK形式的FM的processing type必须要是REMOTE-CAPABLE MODULE.

ABAP中的同步和异步调用,码迷,mamicode.com

时间: 2024-10-10 00:39:44

ABAP中的同步和异步调用的相关文章

C#同步和异步调用

这篇文章仅当总结之用,参考了很多前辈们的文章,加上了点点自己的理解 C#的同步和异步线程是依靠委托来完成,主要需要用到委托的Invoke方法,BeginInvoke和EndInvoke方法 所谓同步线就是阻塞当前线程来完成调用的方法,然后才继续调用当前线程的后面的操作,实际上都是在同一个线程中执行,效率不高.需要用到Invoke方法 异步线程不阻塞当前线程,而是把需要调用的方法加入线程池中,来同步执行,即同一时间两个及其以上的线程共同都在执行,效率很高.需要用到BeginInvoke和EndIn

网络编程中的同步与异步

网络编程中有三对关键的词,单线程与多线程.阻塞与非阻塞.同步与异步,同步与异步一直是比较疑惑的地方.以前认为,同步就是阻塞socket,异步就是非阻塞socket,现在发现这样理解很片面的,其实好多地方有同步异步的概念. 数字电路中的同步与异步是针对时钟来说的 同步时序逻辑电路:各触发器有相同的时钟脉冲,时钟脉冲到来时所有触发器状态同时改变异步时序逻辑电路:没有统一的时钟脉冲,所有触发器的状态转换不一定发生在同一时刻,某些触发器的状态转换有可能会延迟. 在通信原理中也有同步与异步的概念 同步传输

[SAP ABAP开发技术总结]Function远程、同步、异步调用

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 20.1.         Function调用... 233 20.1.1.     更新FM:LUW.. 233 20.1.2.     RFC函数:远程调用... 234 20.1.2.1.           同步... 234 20.1.2.2.           异步... 234 20.1.2.2.1.       事务性RFC调用... 234 20.1

spring-boot实战【10】【转】:Spring Boot中使用@Async实现异步调用

什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序. 同步调用 下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

spring boot中使用@Async实现异步调用

什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序. 同步调用 下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) package com.dxz.demo1; import java.util.Random; import org.sprin

C#:Func的同步、异步调用(转)

实际开发中,对于一些耗时较长的操作,我们往往会将其封装成异步方式调用,以加速系统响应或改善用户体验,下面是一个示例: 有一个现成的类MyMath,里面有一个Add方法: 1 public class MyMath 2 { 3 4 public int Add(int a, int b) 5 { 6 System.Threading.Thread.Sleep(5000); 7 return a + b; 8 } 9 10 } 对Add方法做下封装,对了对比,同时提供“同步调用”与"异步调用&quo

java中的同步与异步

在多线程的环境中,经常会碰到数据的共享问题,即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某--时刻只能被-一个线程使用,否则,程序的运行结果将会是不可预料的,在这种情况下就必须对数据进行同步,例如多个线程同时对同- - 数据进行写操作,即当线程A需要使用某个资源时,如果这个资源正在被线程B使用,同步机制就会让线程A-.直等待下去,直到线程B结束对该资源的使用后,线程A才能使用这个资源,由此可见,同步机制能够保证资源的安全. 要想实现同步操作,必须要获得每一个线程对象的锁.获

python 37 同步、异步调用

目录 1. 阻塞与非阻塞 2. 同步与异步 2.1 异步调用 2.2 同步调用 2.3 异步调用回收的第一种方式 3. 异步调用+回调函数 3.1 requests模块 3.2 异步调用回收的第二种方式 1. 阻塞与非阻塞 执行的角度: ? 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作).函数只有在得到结果之后才会将阻塞的线程激活. ? 非阻塞:程序没有遇到IO阻塞,或者程序遇到IO,通过某种方式,让CPU强行运行程序. 2. 同步与异步 发布的角度: ? 同步调用:在发

Gevent中的同步与异步详解

同步,异步概念 1.同步就是发生调用时,一定等待结果返回,整个调用才结束: 2.异步就是发生调用后,立即返回,不等待结果返回.被调用者通过状态.通知来通知调用者,或通过回调函数处理这个调用. 查询 1.同步查询 2.异步查询 同步异步与阻塞,非阻塞区别 1.阻塞/非阻塞, 它们是程序在等待消息(无所谓同步或者异步)时的状态: 2.同步/异步,是程序获得关注消息通知的机制. 同步异步与阻塞,非阻塞组合 1.同步阻塞 效率最低(日志程序). 2.同步非阻塞 效率也不高(需要轮询). 3.异步阻塞 一