多个bapi连续调用,怎么保证前面是是否已经成功?

文摘   2024-12-04 06:39   上海  


多个bapi连续调用,

简单的就是直接 wait up 10 seconds?


优化下,循环查询多次累计。这样某个循环满足了就可以直接退出不用每次就是最大时间。


下面是是一个简单的事例,仅供参考。


DATA: l_kalnr TYPE keko-kalnr,        sel_counter TYPE i.  DATA: lt_keph TYPE STANDARD TABLE OF keph,        lw_keph TYPE keph.退出条件判断 l_kalnr 是否取到数据
* 取数据返回* WHILE l_kalnr IS INITIAL.* IF sel_counter IS INITIAL.* WAIT UP TO 4 SECONDS.* ELSE.* WAIT UP TO 1 SECONDS.* ENDIF. SELECT SINGLE kalnr feh_sta cpudt cputime INTO (l_kalnr,feh_sta,cpudt,cputime) FROM keko WHERE vbeln = vbeln AND posnr = posnr AND matnr = matnr.* ADD 1 TO sel_counter.* IF sel_counter > 5.* EXIT.* ENDIF.* ENDWHILE.




DATA: l_kalnr TYPE keko-kalnr,      sel_counter TYPE i.DATA: lt_keph TYPE STANDARD TABLE OF keph,      lw_keph TYPE keph.* 最大尝试次数,可根据实际情况调整CONSTANTS: max_attempts TYPE i VALUE 5.* 初始等待时间(单位:秒),可根据预估首次获取数据的合理时长等情况调整CONSTANTS: initial_wait_time TYPE i VALUE 4,* 后续每次等待时间(单位:秒),同样可按需调整            subsequent_wait_time TYPE i VALUE 1.sel_counter = 0.DO max_attempts TIMES.  SELECT SINGLE kalnr feh_sta cpudt cputime    INTO (l_kalnr,feh_sta,cpudt,cputime)    FROM keko   WHERE vbeln = vbeln     AND posnr = posnr     AND matnr = matnr.  IF l_kalnr IS NOT INITIAL.    EXIT. "如果已经取到数据,直接退出循环  ENDIF.  IF sel_counter = 0.    WAIT UP TO initial_wait_time SECONDS.  ELSE.    WAIT UP TO subsequent_wait_time SECONDS.  ENDIF.  ADD 1 TO sel_counter.ENDDO.
  1. 首先定义了两个常量max_attempts用于指定最大尝试获取数据的次数,initial_wait_time表示首次查询数据后等待的时间,subsequent_wait_time表示后续每次查询数据后等待的时间,这些常量都可以根据实际业务场景中期望的等待情况以及数据获取的预估时间等因素进行合理调整。
  2. 使用DO...ENDDO循环结构来替代原来的WHILE循环,循环次数设定为最大尝试次数max_attempts。在每次循环中执行SELECT SINGLE语句去尝试从keko表中获取数据。
  3. 如果通过SELECT SINGLE语句成功获取到了l_kalnr的数据(即l_kalnr IS NOT INITIAL),就直接通过EXIT语句退出循环,不再继续等待和查询,这样就避免了无意义的等待,只要满足条件就可以提前结束获取数据的过程。
  4. 根据当前已经循环的次数sel_counter来决定本次循环后等待的时间,如果是第一次循环(sel_counter = 0)就按照initial_wait_time设定的时间等待,后续循环(sel_counter > 0)则按照subsequent_wait_time设定的时间等待,每次循环结束后会将sel_counter自增 1。

通过这样的优化方式,相比原来的代码逻辑更加清晰和灵活,并且可以根据实际数据获取情况更合理地控制等待时间以及及时结束循环操作,减少不必要的等待开销。





是老周,如果你喜欢我的文字,请记得点击⬇️关注我。


码字不易,文章下拉,右边点个【赞】和【在看】吧!!

猜您还喜欢合集:


解决方案

SAP优化

ABAP新语法

SAP Note

SAP

ABAP

懒人鱼


猜您还喜欢文章:

聊聊ABAP动态编程

SAP这样优化:乙方开心,甲方放心!

浅谈SAP/SSO介绍及应用

浅谈SAP/ 文档管理解决方案

浅谈SAP/某化学纤维行业客户-优化案例


曰天曰地
我要到哪里去↔️ 灵台方寸山,斜月三星洞。假如有一天全人类不存在,怎么证明人类存在过。AI怎么考古?会怎么考古⚠️
 最新文章