BC415学习笔记(三) Transactional RFC && Queued RFC

  • srfc和arfc每次调用都会生成一个独立的逻辑处理单元(LUW), trfc可以将多个调用组合到一个LUW中,当其中一个发生错误时,会自动全部回滚
  • trfc也是多线程调用的,和arfc不同的是,trfc不能接收返回参数
  • 在事务码SM58中可以查看和修改LUW

  •  trfc调用时会先存储到透明表ARFCSSTATE和ARFCSDATA中,ARFCSSTATE记录执行状态的日志,ARFCSDATA记录trfc的调用相关数据,LUW成功执行后会删除表中的数据,执行失败的会自动做重复计划或回滚
  • 如果不想立即执行LUW,可以在commit work前面调用START_OF_BACKROUNDTASK,然后指定调用时间
  • 如果commit work时update也被触发了,update成功执行后才会开始trfc的调用

 远程调用时:

  • 如果目标系统无法连接,日志会记录到表ARFCSSTATE,同时重新生成计划任务,trfc的可选属性中可以设置失败后重复执行的次数以及时间间隔,默认是30次,间隔15分钟
  • 如果程序出现A/X类型的message或者trfc执行后触发exception,rtfc会进行回滚,相应的日志信息会写到ARFCSSTATE,可在事务代码SM58中查看
  • 回滚并重新执行可以使用RESTART_OF_BACKGROUNGTASK

  • 不同目标系统的函数调用会生成不同的LUW
  • 如果想每个trfc调用生成独立的LUW,可以使用AS SEPARATE UNIT作为附加选项
  • 每个trfc-LUW都会分配一个独立的事务ID,可在SM58中查看,或调用函数ID_OF_BACKGROUNDTASK返回ID,函数STATUS_OF_BACKROUNDTASK用来确认状态

 qrfc相当于是trfc的扩展

trfc生成的LUW是互相独立的,函数调用顺序和执行顺序不一定相同,为保证生成LUW的顺序和执行顺序一致,可以使用QRFC,每次函数调用前先调用TRFC_SET_QUEUE_NAME设置队列名,队列名长度24位,不允许名字中带有‘%’和‘*’,队列信息存储在表QRFCQOUT中,可以使用事务代码SMQ1查看

 

 trfc测试程序:

SM58会记录执行中的trfc,执行成功后数据删除,执行失败的记录失败日志

CALL FUNCTION 'ZRFC_TRANSACTIONAL_TEST1' IN BACKGROUND TASK.
CALL FUNCTION 'ZRFC_TRANSACTIONAL_TEST2' IN BACKGROUND TASK.

COMMIT WORK. 

FUNCTION zrfc_transactional_test1 .
*"----------------------------------------------------------------------
*"*"Local interface:
*"----------------------------------------------------------------------

  WAIT UP TO 100 SECONDS.

ENDFUNCTION.

FUNCTION zrfc_transactional_test2 .
*"----------------------------------------------------------------------
*"*"Local interface:
*"----------------------------------------------------------------------

  WAIT UP TO 100 SECONDS.

ENDFUNCTION. 

qrfc测试

CALL FUNCTION 'TRFC_SET_QUEUE_NAME'
  EXPORTING
    qname = 'Q1'.

CALL FUNCTION 'ZRFC_TRANSACTIONAL_TEST1' IN BACKGROUND TASK.

COMMIT WORK.

CALL FUNCTION 'TRFC_SET_QUEUE_NAME'
  EXPORTING
    qname = 'Q2'.

CALL FUNCTION 'ZRFC_TRANSACTIONAL_TEST2' IN BACKGROUND TASK.

COMMIT WORK.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值