ABAP 接口更新表或者BDC我提交更新不成功,怎么办?

问题
接口更新表或者BDC我提交更新不成功,偶尔掉了数据。自己比对数据无误,确认不是程序逻辑问题(大部分丢数据是程序代码问题)。我们该如何处理呢。

解决方案
1.记录更新前和更新后的数据,方便查找丢数据的位置。
2.更新不成功应该直接报错出来。
3.commit work之后等个0.01秒,查询一下底表的数据。
4.在一秒钟之内循环做更新提交的动作,降低丢数据的概率。

示例代码

"之前更新日志,或者返回接口消息"

DATA:ls_sflight TYPE sflight."航班表工作区"
DATA:lv_message TYPE string.
"1秒中执行重复动作"
GET TIME.
DATA(t1) = sy-timlo.
WHILE 1 = 1.
  "执行 BDC BAPI 或者更新数据库的操作.此处只是作为示例。"
  ls_sflight-carrid = 'CN'.
  ls_sflight-connid = '1'.
  ls_sflight-fldate = sy-datum.
  MODIFY sflight FROM ls_sflight.
  CLEAR:ls_sflight.

  COMMIT WORK.
  WAIT UP TO '0.01' SECONDS.

  "查询数据库数据是否成功"
  SELECT SINGLE *
    FROM sflight
   WHERE carrid = 'CN'
     AND connid = '1'
     AND fldate = @sy-datum
    INTO @DATA(ls_sql).
  IF sy-subrc = 0.
    lv_message = '成功更新'.
    EXIT.
  ELSE.
    lv_message = '更新失败'.
  ENDIF.

  "超过一秒,无论成功与否都会退出"
  GET TIME.
  DATA(t2) = sy-timlo.
  IF t2 - t1 > 1."判断是否超过1秒
    EXIT.
  ENDIF.
ENDWHILE.

"之后更新日志,或者返回接口消息
w
WRITE:lv_message.

示例代码,是以更新航班表为例子,在一秒钟之内重复更新这条数据,成功更新,则退出。失败则继续更新,直到时间超过一秒,强制退出WHILE 1 = 1的死循环。

总结
提交更新丢数据百分之90%是代码逻辑问题,你需要仔细debug找代码的问题。如果实在找不到,才需要使用这个解决方案,不过它只能降低你丢数据的概率,不能彻底解决你丢数据的问题。

请添加图片描述
分享使我快乐,我是寒武青锋,大家记得点赞再走咯~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值