Program Lock
Program adı ve tablodaki elemanlar için kilit oluşturma örneğidir.
Özellikle asenkron çalışmalarda programın/fonksiyonun bir kaç yüz milisaniye içinde bir kaç kez çalışarak çakışmasının önüne geçmek içindir. Program Adı & Sipariş numarası ile kilit kaydı oluşturularak bunun önüne geçilebilir.
Tablo Lock`ı da kullanılabilir fakat benim örneğimde SUBMIT komutu ile çağırılan program içinde de Tabloya UPDATE yapılıyordu.
JOB kullanımlarında da iş görür, fonksiyon tetiklendikten sonra aynı fonksiyonu JOB da kullanıyorsa çakışma olasılığı düşük olsa bile yeterince vardır.
perform enqueue_program using IT_SIPR_H
changing lv_locked_func
lt_db_sipr_e.
if lv_locked_func = `X`.
"Kilitleme işlemi başarılı
else.
"Kilitleme işlemi başarısız
endif.
perform dequeue_program USING IT_SIPR_H changing lt_db_sipr_e.
form enqueue_program using prt_sipr_h type ztr_t_toplu_spr_h
changing chn_lock type c
cht_errlog_db type tty_db_sipr_e.
data: lv_program like trdir-name.
data: ls_spr_h type ztr_s_toplu_spr_h.
loop at prt_sipr_h into ls_spr_h.
concatenate sy-repid `_` ls_spr_h-bstnk into lv_program.
call function `ENQUEUE_E_DSVAS_TRDIR`
exporting
mode_trdir = `X`
name = lv_program
x_name = ` `
_scope = `2`
_wait = ` `
_collect = ` `
exceptions
foreign_lock = 1
system_failure = 2
others = 3.
if sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
perform f_add_error_e1 using ls_spr_h-bstnk `000000`
`006` "& Sipariş kilitli, değiştirilemez
ls_spr_h-bstnk
changing cht_errlog_db .
chn_lock = space.
else.
chn_lock = `X`.
endif.
endloop.
endform. " ENQUEUE_PROGRAM
form dequeue_program using prt_sipr_h type ztr_t_toplu_spr_h
cht_errlog_db type tty_db_sipr_e.
data: lv_program like trdir-name.
data: ls_spr_h type ztr_s_toplu_spr_h.
loop at prt_sipr_h into ls_spr_h.
concatenate sy-repid `_` ls_spr_h-bstnk into lv_program.
call function `DEQUEUE_E_DSVAS_TRDIR`
exporting
mode_trdir = `X`
name = lv_program
x_name = ` `
_scope = `3`
_synchron = ` `
_collect = ` `.
endloop.
endform. " DEQUEUE_PROGRAM