ABAP tRFC和qRFC

Transactional RFC

        简述

        tRFC是用于事务性的 RFC 调用的 bgRFC 的前身。

        属于真正的异步通信,当 RFC 客户端程序正在执行 tRFC 时,远程系统不需要可用。tRFC 组件将调用的 RFC 函数连同相应的数据一起存储在 SAP 系统的数据库中,同时生成一个唯一的事务标识符(TID)。

        如果被调用系统不可用,会在之后继续调用,如果一定时间仍然不可用,则会变为批量运行。

        如果接收系统在一定时间内没有变为活动状态,则调用将调度为批量运行

        如果函数作为 逻辑工作单元(LUW) 执行,则始终使用 tRFC。在 LUW 中,所有调用都是

        按照它们被调用的顺序执行。

        在目标系统的同一程序上下文中执行

        在单个事务中执行:它们作为一个单元提交或回滚。

        tRFC的处理

        RSARFCSE 对调用进行后台处理,会以设定的时间间隔自动运行(默认为每十五分钟一次,最多尝试 30 次,SMOD 增强SABP0000 和 SABP0003 可以自定义间隔及次数)

        如果一定时间被调用系统不可用,会将状态CPICERR 写入 ARFCSDATA 表。在另一个指定时间(默认为八天)内,删除 ARFCSSTATE 表中的相应条目(也可以自定义此限制)

        SM59 进入连接,菜单编辑 ->TRFC 选项可以设置任务的连接尝试次数以及重复尝试之间的时间

ABAP tRFC和qRFC_第1张图片

        表 ARFCSSTATE 调用状态(输送)的描述

        表 ARFCSDATA  调用数据

        功能模块 ARFC_DEST_SHIP   将数据传输到目标系统

        功能模块 ARFC_EXECUTE   执行存储的函数调用

        功能模块       ARFC_DEST_CONFIRM            确认在目标系统中成功执行。最后,删除表ARFCSSTATE 和 ARFCSDATA 中的条目。

        日志查看

        事务代码SM58 查看tRFC日志,并可对tRFC进行管理操作

        关键词... AS SEPARATE UNIT 单独上下文

        表示功能模块在单独的上下文中执行,COMMIT 提交的每个功能模块都会注册一个单独的事务ID,如果没有添加该关键词,则一个事务ID下的功能模块如果多次调用,可以共同使用全局数据。

        tRFC适用于在分布式环境中实现 LUW(一个典型的应用是 ALE)

        在一个COMMIT WORK和下一个 COMMIT WORK之间发生的所有具有单一目的地的 tRFC 都 属于一个单一的逻辑工作单元 (LUW)。 

        调用示例

        一个逻辑单元在同一个上下文中执行

        函数

ABAP tRFC和qRFC_第2张图片

CALL FUNCTION 'YLC_FUNC002' IN BACKGROUND TASK DESTINATION 'NONE'.
CALL FUNCTION 'YLC_FUNC002' IN BACKGROUND TASK DESTINATION 'NONE'.
CALL FUNCTION 'YLC_FUNC002' IN BACKGROUND TASK DESTINATION 'NONE'.
COMMIT WORK.

        SM58查看记录

ABAP tRFC和qRFC_第3张图片

        执行结果

ABAP tRFC和qRFC_第4张图片

        注意点

        以事务方式调用的功能模块不建议定义EXPORT 参数,因为调用程序中的 IMPORTING 参数会导致语法错误。

        回调函数(DESTINATION 'BACK')不能以异步的形式调用

        RFC服务器上的LUW的顺序不一定与RFC客户端中SAP LUW的顺序相对应,即提交时顺序和调用时的顺序不一定一致,如果要实现序列化的一致,需要使用qRFC。

        tRFC状态

EXECUTED

相关LUW的执行在目标系统中完成。在删除此条目之前,系统会等待来自发送系统的内部 tRFC/qRFC 确认。

HOLD

接收应用程序已部分处理此 LUW,并且不希望在发生后续网络或通信错误时重试( 如果大量条目具有此状态, 请参阅 SAP Note 366869 )。

WCONFIRM

在 LUW 执行期间,应用程序已提示 tRFC/qRFC 管理器设置状态 HOLD。WCONFIRM 在 LUW 执行完成但尚未收到内部 tRFC/qRFC 确认时设置。

如果相关应用程序通知 tRFC/qRFC 管理器关于逻辑 LUW 端,则删除此条目( 有关详细信息, 请参阅 SAP Note 366869 )

https://blog.csdn.net/xiefireworks/article/details/126294452

Queued RFC

        简述

        qRFC 是 bgRFC type Q 的前身,qRFC 可以固定处理顺序。qRFC 背后的技术基于 tRFC。区别是在实际的 tRFC 调用之前通过执行功能模块TRFC_SET_QUEUE_NAME使用队列进行序列化。

        使用qRFC调用时,相互依赖的功能模块被放置在发送系统的出站队列中。发送数据时, 对比tRFC,会保持准确的顺序。

        如果目标系统为SAP系统,则具有入站队列。

        qRFC 通过额外的排队机制得到增强,该机制将要发送或接收的 LUW 分别保存在 出站队列或入站队列中。这些 LUW 会按照它们保存的确切顺序发送或传输到接收器应用程序。

        qRFC的处理

        在 COMMIT WORK 时,将这些内部表的内容存入数据库(ARFCSSTATE 和 ARFCSDATA)。然后,RFC 管理器需要一个 DIALOG 工作流程来将此 LUW 发送到合作伙伴系统。

        如果一个 qRFC 调用分配给多个出站队列,或者被分配到一个出站队列,但是相关的 LUW 发送到不同的目标系统,执行功能模块 TRFC_SET_QUEUE_RECEIVER_LIST.

        调用RFC后调用函数模块 TRFC_SET_QIN_PROPERTIES添加到入站队列

        RSTRFCEU 设置批处理作业,在后台定期执行删除任务来提高性能

        LUW 依赖项和相关队列的所有数据都存储在 TRFCQOUT 表中。

        监控管理

        SMQS:QOUT 出站调度程序管理

                配置 QOUT Scheduler 的资源(指定用于将 LUW 发送到特定目标的工作进程数,控制资源消耗。)

                注册、注销和排除目的地

                为 RFC 目标指定登录数据

                优化性能

                显示管理数据

        SMQR : 管理 QIN 入站调度程序

        SMQ1:出站队列的 qRFC 监视器

                检查队列状态

                重新启动阻塞的队列

                测试 qRFC 连接

        SMQ2 - 入站队列的 qRFC 监视器。

        注意点

        如果出站队列中的第一个 LUW 由于连接错误( CPIC 错误)而无法处理,那么它不仅会被该队列阻塞,而且会阻塞在其中找到相关 LUW 的所有其他队列

        tRFC 和 qRFC混合使用,如第一次调用是 tRFC 调用,需要执行功能模块 TRFC_QUEUE_INITIALIZE 初始化qRFC 管理器。

        入站队列队列名称不得包含以下字符:*、&、% 或小写字母,不能以空格开头。

        调用示例

ABAP tRFC和qRFC_第5张图片

         查看记录

ABAP tRFC和qRFC_第6张图片

         RFC连接测试

        程序:RSTRFCT0

ABAP tRFC和qRFC_第7张图片

         本地执行qRFC

        如果使用 DESTINATION SPACE,则功能模块可以在系统中的任何应用服务器上执行。

        如果使用 DESTINATION NONE,函数模块将在执行 qRFC 调用的应用程序服务器上执行。

        QIN 调度器被激活,会自动处理对应名称的队列,如果为* 则所有入站队列都由 QIN 调度程序自动处理。

        qRFC状态

ARETRY

在 LUW 执行期间,应用程序已诊断出一个临时问题,并已通过特定的 qRFC 调用提示发送系统中的 qRFC 管理器,以根据事务 SM59 中的定义为重复调度批处理作业。

ANORETRY

在 LUW 执行过程中,应用程序发现了一个严重错误,并通过特定的 qRFC 调用提示 qRFC Manager 取消对该 LUW 的处理。需要来自受影响应用程序的信息才能解决问题。要解决此问题,您需要在此处通知相关应用程序。

CPICERR

在目标系统中传输或处理第一个 LUW 期间,发生网络或通信错误。当您双击此状态时,系统会显示错误文本。有关此错误的更多信息,请参阅系统日志 (SM21)、跟踪文件 dev_rd 或 dev_rfc*。根据所用目的地的事务 SM59 中的定义,调度批处理作业进行重新发送。尽管未发生通信错误,但状态 CPICERR 也可能存在于以下情况:qRFC 应用程序发现由于应用程序中的临时错误而无法进一步处理 LUW,因此调用 RESTART_OF_BACKGROUNDTASK 功能模块提示 qRFC Manager 取消执行此 LUW,并在以后根据事务 SM59 中的规范。在这种情况下,qRFC 使用文本“对 tRFC/qRFC 的命令:再次执行 LUW”模拟通信错误。如果此错误经常发生,您必须联系相应的应用程序。

EXECUTED

此队列的第一个 LUW 已被处理。在处理进一步的 LUW 之前,系统会等待来自目标系统的 qRFC 内部确认。如果此状态的队列挂起超过 30 分钟,这可能意味着负责发送此 LUW 的工作进程已终止。对比状态RUNNING,这个当前的LUW肯定已经执行成功了。您可以毫无问题地重新激活此队列。qRFC Manager 会自动删除已经执行的 LUW 并发送下一个 LUW。

MODIFY

由于正在修改 LUW 数据,因此该队列的处理被暂时锁定。

NOSEND

此队列的 LUW 不发送,而是由特殊应用程序检索。 NOSEND队列仅在 SAP 内部用于组件 BW 或 CRM 与移动客户端之间的通信。即使相应应用程序(BW、CRM)已读取 LUW,此 NOSEND 状态也不会改变。此 LUW 仅在此应用程序确认收集后才从队列中删除(可以进行集体确认)。

在任何情况下都不应使用事务 SMQ1 重置此 NOSEND 状态并激活队列。

NOSENDS

NOSEND 用于通过事务 SMQ1 调试 LUW 的执行。在 qRFC 调用期间,应用程序同时确定当前 LUW 不会立即发送。

READY

队列已准备好传输和处理。

这种状态通常是暂时的。

但是,可能存在队列被手动锁定或由程序使用事务 SMQ1/SMQ2 锁定的数据状态,然后只能在 没有同时激活的情况下解锁。在这种情况下, 必须 显式激活此队列。

RUNNING

当前正在处理此队列中的第一个 LUW。如果此状态的队列挂起超过 30 分钟,这可能意味着负责发送此 LUW 的工作进程已终止。如果是这种情况,您可以再次激活此队列。请注意,如果此时目标系统中仍在处理该 LUW,则激活处于 RUNNING 状态的队列可能会导致该 LUW 被执行多次。因此,我们建议您在重新激活队列之前至少等待 30 分钟。

STOP

在此队列或通用队列(例如 BASIS_*)上明确设置了锁(SMQ1 或程序)。请注意,qRFC 的处理从不锁定队列。通知相应的应用程序后,您可以使用事务 SMQ1 解锁并激活此队列。

SYSFAIL

执行此队列的第一个 LUW 时,目标系统发生严重错误。执行被中断。当您双击此状态时,系统会显示错误文本。有关此错误的更多信息,请参阅目标系统中的相应短转储 (ST22)。没有安排后台作业进行重试,并且不再处理队列。要解决此问题,您需要在此处通知相关应用程序。

WAITING

该队列的第一个 LUW 对其他队列有依赖关系,并且这些队列中至少有一个当前还包含其他具有更高优先级的 LUW。

WAITSTOP

该队列的第一个 LUW 对其他队列有依赖关系,并且这些队列中至少有一个当前仍处于锁定状态。

WAITUPDA

如果在还包含一个或多个更新函数的事务中调用 qRFC,则设置此状态。由于此状态,LUW 和队列被阻塞,直到更新成功完成。

如果此状态花费的时间超过几分钟,请使用事务 SM13 检查更新或更新请求的状态。成功追溯更新后,会自动发送被阻止的 LUW。

您可以使用事务 SMQ1 或通过报告 RSTRFCK7 重置此状态,然后重新激活队列。请注意,由于重新激活,应用程序数据中的两个系统之间可能会出现不一致。

VBERROR

如果与 LUW 相关的更新过程终止,则状态将从 WAITUPDA 更改为 VBERROR 。通过双击相关的错误文本,您可以分支到事务 SM13 以显示更新记录,并在必要时将其删除。

如果删除更新记录,则所有相关 LUW 也会被删除。

        出站队列的 qRFC API

TRFC_GET_QUEUE_INFO 和 TRFC_GET_QUEUE_INFO_DETAILS

        读取一个或所有出站队列的当前上下文。有关详细信息,请参阅示例程序 RSTRFCQR.

TRFC_QUEUE_INITIALIZE

        通知 qRFC-Manager 您正在 LUW( 混合模式)中使用 tRFC 和 qRFC,并且第一个调用是 tRFC调用。

TRFC_QOUT_ACTIVATE

        如果要指定队列名称(单个或通用,例如 基础测试_*) 和处理一个或多个队列的目的地。仅当队列由于通信或网络错误而阻塞,或者发生系统或应用程序异常并且问题已经解决时才使用此功能。

        已停止的队列(通过调用函数 TRFC_QOUT_STOP) 不能用这个函数处理。

        如果导入参数 力量更改为 ',qRFC Manager 重新发送 LUW,即使它处于状态 执行中. 此参数设置仅适用于系统程序。在正常情况下,您不需要此功能,因为 qRFC 管理器会自动尝试解决此类阻塞。另见程序 RSTRFCQ0.

TRFC_QOUT_DELETE_LUW

        删除使用导入参数定义的出站队列中的 LUW TID.

TRFC_QOUT_DELETE_QUEUE

        删除使用导入参数定义的整个队列 QNAME和 目的地.

TRFC_QOUT_GET_AND_PROCESS

        从本地或远程 SAP 系统的出站队列中读取 qRFC LUW。

        如果您使用 SINGLE_PROCESSING参数,如果在处理 LUW 时发生系统或应用程序异常, qRFC 管理器将向调用系统发送错误代码和错误消息。出站队列中所有成功处理的 LUW 都将被删除。有错误的 qRFC LUW 保留在出站队列中。

        如果你不使用 SINGLE_PROCESSING参数,系统或应用程序异常会导致短转储,并且所有要读取的 LUW 都保留在出站队列中。它们可以在以后重新读取和处理。

TRFC_QOUT_GET_CURRENT_QUEUES

        显示所有当前现有的队列。

TRFC_QOUT_GET_ERROR_QUEUES

        显示由于以下错误消息之一而被阻止的所有错误队列: 系统故障, CPICERR, 重试, 阿雷特里, 异地恋.

        具有状态的队列 等待不 显示。

TRFC_QOUT_GET_FIRST_LUW

        显示队列中第一个 LUW 的信息(例如 TID)。

TRFC_QOUT_GET_HANGING_QUEUES

        显示所有阻塞的队列,包括应用程序已 显式写入队列以供以后处理且状态为 WAITING 的队列。

TRFC_QOUT_OVERVIEW

        您可以使用此功能模块概览存在的各种可选导入参数(例如队列名称、目标、SAP 客户端)的当前出站队列。

TRFC_QOUT_RESTART

        如果要指定队列名称(单个或通用,例如 基础测试_*) 和一个目的地来继续处理一个或多个队列,而不管队列是否已经停止。

        如果你改变 FORCE 导入参数到 SPACE, qRFC 管理器减少 STOP 计数器。如果计数器为 0,则激活队列。否则,qRFC 管理器总是激活队列而不管 STOP 计数器。

        如果队列被阻塞,请使用上述调用而 不是 TRFC_QOUT_ACTIVATE.

        如果设置导入参数 NO_ACTIVATE到 '‘,qRFC 管理器解锁队列,但不激活它。另见程序 RSTRFCQ3..

TRFC_QOUT_RESTART_COND

        如果要指定队列名称、高优先级队列名称或重新启动一个或多个队列(单个或通用,例如 基础测试_*)。

        如果更改导入参数 TILL_STOP至 SPACE,一旦这个高优先级队列为空,qRFC 管理器就会重新启动队列。否则,该队列一旦停止或为空就会重新启动。

        如果没有其他 STOP 呼叫已安排,使用调用此函数 TILL_STOP = 空间通话时自动结束队列。见程序 RSTRFCQ4(till_stop = 空间)和 RSTRFCQA(直到停止='X')。

TRFC_QOUT_STATE

        当您输入队列名称、目标和可选的 SAP 客户端时,您可以使用此功能模块来显示队列的状态。

        处于状态 CPICERR,队列的自动重复取决于SM59中目的地的配置(默认设置为是)。

        如果队列有状态 WAITSTOP 或者 WAITING,导出参数 WQNAME 显示当前队列在处理之前正在等待哪个队列。

        状态 NOSEND 和 NOSENDS之间的区别是一个有状态的队列NOSENDS可以使用 SMQ1 或相应的功能模块激 活和重新启动。有状态的队列 NOSEND只能使用其他系统或程序读取。见程序 RSTRFCQ2.

TRFC_QOUT_STOP

        在您指定队列名称(例如,单个或通用名称)时停止处理一个或多个队列 基础测试_*) 和目的地。

        如果导入参数FORCE改为 SPACE, qRFC Manager 只处理队列中存在的 LUW 停止时间。否则,qRFC 管理器会立即停止处理事务。

        STOP 计数器计数STOP队列的数量 。

        您还可以停止一个空的(不存在的)队列。在这种情况下,分配给此 LUW 的所有 LUW 都存储在队列中。另见程序 RSTRFCQ1.

TRFC_SET_BACKGROUND_SEQUENCE

        确定已从事务中的对话任务和更新任务调用的 qRFC LUW 的处理顺序。

TRFC_SET_QUEUE_NAME

        将队列名称传输到 qRFC 管理器。此队列名称对下一个有效 调用函数...在后台任务中。.

        如果导入参数 NOSEND 已设置为“X”或“S”,则 qRFC 管理器不会在提交工作时间发送 LUW,而是将其保存在 qRFC 表中。

        'S':此 LUW 可以从 SMQ1(或其他功能模块)重新启动。

        'X':'X':这个LUW只能被一个应用程序处理。无法使用 QOUT 调度程序对其进行处理。

此参数适用于整个 LUW。

TRFC_SET_QUEUE_NAME_LIST

        将队列名称传输到 qRFC 管理器,如果Call Function ... In Background中被分配到多个发送队列。您可以将此功能模块与 TRFC_SET_QUEUE_NAME在一个 LUW 中。

        如果导入参数 NOSEND 已设置为“X”或“S”,qRFC 管理器不会在 提交工作时间,但将其保存在 qRFC 表中。

        'S':此 LUW 可以从 SMQ1(或其他功能模块)重新启动。

        'X':'X':这个LUW只能被一个应用程序处理。无法使用 QOUT 调度程序对其进行处理。

此参数适用于整个 LUW。

TRFC_SET_QUEUE_RECEIVER_LIST

        如果函数被调用,则将队列名称传输到 qRFC 管理器 Call Function ... In Background 中将在不同的目标系统中进行处理。qRFC 管理器仅在数据库中存储此 qRFC 的所有数据一次。

        您还需要设置选项 作为独立单位和 目的地作为此函数的导入参数。

        如果导入参数 诺森德已设置为“X”或“S”,qRFC 管理器不会在提交工作时间发送 LUW,而是将其保存在 qRFC 表中。

        'S':此 LUW 可以从 SMQ1(或其他功能模块)重新启动。

        'X':'X':这个LUW只能被一个应用程序处理。无法使用 QOUT 调度程序对其进行处理。

此参数适用于整个 LUW。

        入站队列的 qRFC API

TRFC_GET_QIN_INFO 和 TRFC_GET_QIN_INFO_DETAILS

        显示一个或所有入站队列的当前内容。见程序 RSTRFCIR.

TRFC_QIN_GET_CURRENT_PARAM

        获取有关入站队列的以下信息:当前 LUW 的队列名称和队列计数器分配。如果 在入站队列中使用 qRFC 中 的 Re-use 功能,则需要此信息。

TRFC_QIN_ACTIVATE

        如果要指定队列名称(单个或通用,例如 基础测试_*) 和处理一个或多个队列的目的地。仅当队列由于通信错误而阻塞,或者发生系统或应用程序异常且问题已解决时,才应使用此功能。如果 LUW 已保存在入站队列中并且需要重新激活,您也可以使用它。

        被调用函数阻塞的队列 TRFC_QIN_STOP 无法使用此功能进行处理。

        如果设置导入参数 MAXLUW值不等于 0,qRFC 管理器激活入站队列中的所有 LUW。

        如果设置导入参数 最大时间到不等于 0 的值(0 = 队列为空时立即返回调用),qRFC 管理器仅在指定时间内激活队列。如果在处理最后一个 LUW 时超时,则在最后一个 LUW 之后返回此调用。

        如果更改导入参数MODE 对于 B,qRFC 管理器在后台任务中激活队列(执行 qRFC LUW)。导入参数对于启动此后台作业是可选的(默认情况下)。 立即)。

        如果更改导入参数MODE 对于“L”,qRFC 管理器在调用者上下文中处理队列中的所有 qRFC LUW。如果此队列中的功能模块发生异常,则会导致短转储,因为 qRFC Manager 无法检测此会话中的异常。

        如果设置导入参数 USERDEST 到 SM59 中的“本地”RFC 目标(例如,以 NONE 或 SPACE 作为参考目标的逻辑目标),qRFC 管理器处理当前登录用户下的队列中的所有 qRFC LUW。如果未输入目的地,或未定义用户,则使用当前用户。见程序 RSTRFCI0.

TRFC_QIN_DELETE_LUW

        删除入站队列(由导入参数 TID 定义)中的 LUW。

TRFC_QIN_DELETE_QUEUE

        删除导入参数定义的整个入站队列 QNAME.

TRFC_QIN_GET_CURRENT_QUEUES

        显示所有当前现有的队列。

TRFC_QIN_GET_ERROR_QUEUES

        显示由于以下状态设置之一而被阻止的所有错误队列: SYSFAIL,CPICERR, RETRY,ARETRY,ANORETRY.

        具有状态 WAITING 的队列 不 显示。

TRFC_QIN_GET_FIRST_LUW

        显示队列中第一个 LUW 的信息(例如 TID)。

TRFC_QIN_GET_HANGING_QUEUES

        该函数显示所有被阻塞的队列,包括应用程序已 显式写入队列以供以后处理并具有状态WAITING 的队列.

        此功能显示 所有具有状态WAITING的队列. 要查看有错误的队列 ,请使用功能模块 TRFC_QIN_GET_ERROR_QUEUES.

TRFC_QIN_OVERVIEW

        获取当前入站队列的概览。这些可以有各种可选的导入参数,例如,队列名称或 SAP 客户端。

TRFC_QIN_RESTART

        如果要指定队列名称(单个或通用,例如 基础测试_*) 继续处理一个或多个队列,无论这些队列之前 是否已停止。

        如果更改导入参数 FORCE 为 SPACE,qRFC 管理器减少 STOP 计数器,如果计数器为 0,则激活队列。否则,无论 STOP 计数器的状态如何,qRFC 管理器都将始终激活队列。

        如果设置导入参数 MAXLUW值不等于 0,qRFC 管理器激活入站队列中的所有 LUW。

        如果队列已停止,请使用此调用而 不是 TRFC_QIN_ACTIVATE。.

        如果更改导入参数 NO_ACTIVATE 到“X”时,qRFC 管理器解锁队列,但不激活它。

        如果设置导入参数 MAXTIME 到不等于 0 的值(0 = 队列为空时立即返回调用),qRFC 管理器仅在此时间内激活队列。如果在处理最后一个 LUW 时时间用完,则在处理完最后一个 LUW 后立即返回此调用。

        如果设置导入参数 MODE 对于“B”,qRFC 管理器激活队列并在后台作业中处理 qRFC LUW。导入参数对于启动此后台作业是可选的(默认值:立即)。 立即)。

        如果更改导入参数 MODE 对于“L”,qRFC 管理器在调用者上下文中处理队列中的所有 qRFC LUW。如果此队列中的功能模块发生异常,则会导致短转储,因为 qRFC Manager 无法检测此会话中的异常。

        如果设置导入参数 USERDEST 到事务 SM59 中的“本地”RFC 目标(例如,以 NONE 或 SPACE 作为参考目标的逻辑目标),qRFC 管理器处理当前登录用户下的队列中的所有 qRFC LUW。如果没有输入目的地,或者没有定义用户,则使用当前用户。参考程序RSTRFCI3.

TRFC_QIN_RESTART_COND

        如果您指定队列名称或高优先级队列名称(单个或通用,例如 基础测试_*) 用于重新启动一个或多个队列。

        如果更改导入参数 TILL_STOP至 SPACE,一旦这个高优先级队列为空,qRFC 管理器就会重新启动队列。否则,该队列一旦停止或为空就会重新启动。

        如果没有其他 停止呼叫已安排,使用调用此函数 TILL_STOP = 空间通话时自动结束队列。

参考程序RSTRFCI4.

TRFC_QIN_SAVE_CURRENT_LUW

        在功能模块执行期间通知 qRFC 管理器,当前 LUW 在成功执行后将被保存(以供重复使用)。

TRFC_QIN_STATE

        如果您指定队列名称和(可选)SAP 客户端,则使用此功能模块显示此队列的状态。

        队列具有以下可能的状态显示: READY, CPICERR, SYSFAIL, STOP, WAITSTOP, and WAITING.

        状态 SYSFAIL 由严重的系统错误导致,并且是由目标系统中正在处理当前 LUW 时的系统异常或应用 程序异常引起的。在这种情况下,队列被阻塞,无法自动重启。您可以使用该程序 RSTRFCI0重新激活 LUW,或使用程序 RSTRFCID删除 qRFC LUW。

        处于状态 CPICERR,也没有自动重试。仅当本地应用程序服务器上的网关出现故障时,才会出现此错误。利用 RSTRFCI0解决网关问题后重新启动队列。

        如果队列有状态 WAITSTOP 或者 WAITING, 导出参数 名称显示当前队列在处理之前正在等待哪个队列。参考程序RSTRFCI2.

TRFC_QIN_STOP

        如果您指定队列名称以停止处理一个或多个队列(例如,单个或通用队列),则使用此函数 基础测试_*)。

        如果导入参数 FORCE 改为 SPACE , qRFC Manager 只处理队列中存在的 LUW 停止时间。否则,qRFC 管理器会立即停止处理。

        STOP 计数器计数STOP调用。

        您还可以停止一个空的(不存在的)队列。在这种情况下,分配给此队列的所有 LUW 都保存在 qRFC 表中。见程序 RSTRFCI1.

TRFC_QINS_DELETE_LUW

        在存储的入站队列中删除使用导入参数 TID 定义的 LUW。

TRFC_QINS_DELETE_QUEUE

        删除导入参数定义的整个入站队列 QNAME.

TRFC_QINS_ERASE

        删除使用导入参数定义的部分或全部 LUW QNAME和 FROM_COUNT哪些是得救的。

TRFC_QINS_OVERVIEW

        获取当前保存的入站队列的概览。

TRFC_QINS_RESTORE

        删除使用导入参数定义的部分或全部 LUW QNAME和 FROM_COUNT哪些是得救的。

TRFC_RECEIVER_INFO

        从 tRFC 或 qRFC LUW 的发送方获取信息,例如 TID、客户端、用户、应用程序服务器的主机名、程序名称和事务代码。您还可以使用此功能模块来确定功能模块是否已通过入站队列的 tRFC 或 qRFC 发送。

TRFC_SET_QIN_PROPERTIES

        将出站队列名称、入站队列名称和(可选)队列计数器传输到 qRFC 管理器。这些参数仅对后台任务中的下一个调用函数有效。出站队列和入站队列可以具有相同的队列名称。见程序  RSTRFCT5

        Demo程序

ABAP tRFC和qRFC_第8张图片

备注

        1. 具有队列依赖关系使用qRFC,无队列依赖关系使用tRFC

        2. 根据官方建议使用bgRFC type T/bgRFC type Q来代替tRFC和qRFC的使用

        3. 对于两个 SAP 系统之间的 tRFC 和 qRFC 调用:函数组 ERFC 和 ARFC

        4. 另外对于外部(非 SAP)系统中的所有 RFC 调用:功能组 SYST。

        ABAP调试

ABAP tRFC和qRFC_第9张图片ABAP tRFC和qRFC_第10张图片

你可能感兴趣的:(ABAP,接口,abap)