【转载】增强中调用BAPI并COMMIT使用

目前有这样一个需求,在销售交货单交货过账后,同时产生一个会计凭证。以前试过在增强程序“MV50AFZ1 ”的“USEREXIT_SAVE_DOCUMENT”方法中直接写代码,调用BAPI并Commit,结果就是报错。

CSDN上面看到一篇博文类似需求:SAP增强程序里,调用BAPI并COMMIT的设计方案(MIGO增强)

上面这位朋友的做法是在增强代码中调用普通函数,在普通函数中调用远程函数,最后在远程函数中调用BAPI并Commit。

  call function 'ZMM_GOODSMVT_MAIN2'
    starting new task 'T1'
    destination 'NONE'
    exporting
      goodsmvt_header = goodsmvt_header
      goodsmvt_code   = goodsmvt_code
      testrun         = testrun
      is_log3         = is_log3
    tables
      goodsmvt_item   = goodsmvt_item[]
      log             = log[].

异步调用的实质:程序进行多线程执行。

异步调用: 

CALL FUNCTION 'FUN' 

STARTING NEWTASK <taskname> "任务名称

DESTINATION IN GROUP <RFC Serve Group>

                        PERFORMING <subroutine>ON END OF TASK。"子程序

等待多个异步调用的返回结果:WAIT UNTIL log_exp[UP TO sec SECONDS].

异步调用时不能有IMPORTING参数;函数一定要是RFC函数才能采用异步调用;只要有STARTING NEW TASK选项,即为异步调用;如果是异步调用同一目标端的RFC函数,则可以省略DESTINATION

DESTINATION 取值

l  目标NONE:当前程序所在应用服务器作为目标系统,但调用过程还是RFC远程方式来调用,这与SPACE是同的

l  目标SPACE: DESTINATION选项将会被忽略,被调功能函数将作为普通函数在本机调用

l  目标BACK:用于被远程调用的RFM程序内部的CALL FUNCTION语句中的目标指定,通过已建立的RFC连接反过来调用该函数的主调者系统中的其他功能模块(即主调程序—>远程系统中的RFM—>又回调主调程序所在系统中的其他函数)

 

收藏备用。

猜你喜欢

转载自blog.csdn.net/zhongguomao/article/details/108086551