İncelediğim bir ABAP programında şöyle bir kod gözüme çarptı:
parameters:
(…)
p_matnr like mara-matnr obligatory.
(…)
clear mara.
select single * from mara where matnr = p_matnr.
perform process_data using mara-matnr
mara-meins
p_olcu
p_miktar
changing p_miktar.
Bu koddaki problem şu: Seçim ekranında hiç olmayan bir malzeme girildiğinde program yine de çalışmaya devam ediyor.
Bunun iki çözümü olabilir. İlk çözüm, seçim ekranındaki tanımı değiştirmek:
parameters:
(…)
p_matnr like mara-matnr obligatory value check.
Bunu dediğinde; kullanıcı istese de MARA’da olmayan bir malzeme giremez.
İkinci yol ise sorgudan sonra kontrol etmek:
clear mara.
select single * from mara where matnr = p_matnr.
if sy-subrc ne 0.
Message ….
Leave list-processing.
endif.
perform process_data using mara-matnr
mara-meins
p_olcu
p_miktar
changing p_miktar.
İstersen benim yazdığım birkaç programı incele. Programın hiçbir yerinde “Bu veri nasılsa vardır” veya “Bunu kullanıcı nasılsa doğru girer” gibi varsayımlar kullanmamalıyız. Aradığın verinin orada olmayabileceği, kullanıcının yanlış veri girebileceği, ne bileyim, girilmiş bir metinden belli bir bilgiyi çıkartıyorsan metinin yanlış girilmiş olabileceği gibi beklenmedik durumları da dikkate alacak bir şekilde yazmalısın programı. Bu da; kodun her adımına kontrol koyup hatalı / beklenmedik durumlarda kullanıcıyı bilgilendirmek ve gerekiyorsa programın akışını durdurmak ile mümkün olur.
Leave a Reply