Bapi ardından tablo güncelleme

Bapi çalıştırıldıktan sonra kayıdın veri tabanı tablosuna aktarılması biraz zaman alabilir.

Bapinin ardından standart tabloda güncelleme yapmak istiyorsanız kayıdın tabloya aktarılmasını beklemelisiniz. Ne kadar süreceği elbette belli olmaz, aşağıdaki kod bapinin ardından arka planda çalışacak şekilde çağırılır ve yaklaşık 20 sn içinde tabloyu günceller.

 

Tablo tipi : ZMM_T_PONUMBER   ( ZMM_S_PONUMBER )

Structure : ZMM_S_PONUMBER

Eleman :    EXPPURCHASEORDER    Types    EBELN

  call function `ZMM_EKPO_UMSOK_UPDATE`
   IN BACKGROUND TASK
    AS SEPARATE UNIT
     DESTINATION `NONE`
   EXPORTING
     IT_PONUMBERS = lt_po[].

 COMMIT WORK."Background task commit görmeden çalışmaz

 

 

 

function zmm_ekpo_umsok_update.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IT_PONUMBERS) TYPE  ZMM_T_PONUMBER OPTIONAL
*"----------------------------------------------------------------------
  datalt_po type zmm_t_ponumber.
  datals_po type zmm_s_ponumber.
  datalv_count type int4.
  datalv_next_po type c.

  datals_ekko type ekko.
  datals_ekpo type ekpo.
  datalt_ekpo type STANDARD TABLE OF ekpo.

  check it_ponumbers[] is not initial.

  lt_po[] it_ponumbers[].
  delete adjacent duplicates from lt_po comparing all fields.

  loop at lt_po into ls_po.
    lv_count 0.
    do.
      if lv_count ne 0.
        wait up to seconds.
      endif.

      if lv_count >= 10.
          exit.
      endif.
      lv_count lv_count + 1.


      clear ls_ekko.
      select single into ls_ekko from ekko where ebeln ls_po-exppurchaseorder.
      CHECK sy-subrc eq 0.

      if ls_ekko-bsart ne `ZMDT`.
         exit.
      endif.

      refresh lt_ekpo.
      SELECT  into TABLE lt_ekpo  from ekpo where   ebeln ls_po-exppurchaseorder
                                                 and  sobkz `E`
                                                 and  KNTTP `C` )
                                                 and  umsok space.
      if lt_ekpo[] is INITIAL.
        exit.
      endif.
      CLEAR lv_next_po.
      loop at lt_ekpo into ls_ekpo.
          update ekpo
            set umsok ls_ekpo-sobkz
            where   ebeln ls_ekpo-ebeln
                and ebelp ls_ekpo-ebelp.
            if sy-subrc ne 0.
              Exit.
            else.
                commit WORK and wait.
                lv_next_po `X`.
            endif.

      ENDLOOP.

      if lv_next_po `X`.
        exit.
      endif.


    enddo.


  endloop.




endfunction.