progressokulu.com advanced business language slide 9
TRANSCRIPT
Bölüm 9 : Hata YönetimiBu dersi tamamladığımız zaman şunları yapabileceksiniz;
• Varsayılan hata yönetimini kullanmak• Varsayılan hata yönetimini değiştirmek• Uygulamanızı denetleyecek hata kontrolcüleri oluşturmak• Hata yönetimini tetiklemek
Bir Blok İçinde Varsayılan Hata Yönetimi
Prosedür bazlı hata
REPEAT bloğu için UNDO, RETRY
Prosedür
REPEAT: PROMPT-FOR Customer.CustNum FIND Customer USING CustNum. DISPLAY Customer.END.
Customer:
KAYIT YOK
Varsayılan Hata Kontrolü
Hata mesajı görüntüle
Kaydı bul
Yok mu?
Kaydı görüntüle
evet hayır
Geri al
Yeniden dene
Sozsuz Döngü Koruması
REPEAT:FIND Customer WHERE CustNum = 888.DISPLAY CustNum Name.END.
RETRY yokGirdi yok
Çık
Customer:
KAYIT YOK
AVAILABLE Kullanımı
AVAILABLE Customer = False
AVAILABLE Customer = True
Kayıt arabelleği Ekran arabelleğiVertiabanı
Customer
6 Jones Montgomery UK
Kayıt arabelleğiVeritabanı
Customer
6 Jones
(kayıt yok)
ON-ERROR Kullanımı
ERROR-STATUS handle: hata bilgisinin yerini gösteren bir pointer
ERROR = YES
ERROR-STATUS:ERROR
Hata Kontrolünü Uyarlama
/*** MyProc.p ***/..Bir hata mı var?Varsa, ne yapabilirim?..
HATA!!
DUR
Bir hata bayrağı fırlat
Süreci durdur
Çağıran prosedüre geri dön
Bir mesaj görüntüle
XMessage
XYZ doesn’t exist
OK
Hata Bayrağını Fırlatma
...Delete Customer....
/**** delCustomer.p ****/......
<Müşterinin siparişlerini bulan kod>
RETURN ERROR Customer.CustNum “numaralı
müşterinin açık siparişleri var. Silemezsiniz!".
Çağıran prosedür
Bir veritabanı
tetikleyici koduna
çağrı
Çağıran
prosedüre geri
döndüren
ERROR durum
u
Hata Durumunu Denetlemek
/* eCallingProc1.p */
RUN eCalledProc.p NO-ERROR.
IF ERROR-STATUS:ERROR THEN MESSAGE
“Kayıt bulunamadı" VIEW-AS ALERT-BOX ERROR.ELSE MESSAGE “Kayıt bulundu" VIEW-AS ALERT-BOX.
MessageVarsayılan hata kontrolünün iptali
Hatayı kontrol et ve sonrasında birşeyler yap
Dönen Stringi Almak
/* eCallingProc2.p */ RUN eCalledProc.p NO-ERROR.IF ERROR-STATUS:ERROR THEN MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX ERROR.ELSE MESSAGE RETURN-VALUE VIEW-AS ALERT-BOX.
/* eCalledProc.p */PROMPT-FOR Customer.CustNum.FIND Customer USING Customer.CustNum NO-ERROR.IF AVAILABLE Customer THEN RETURN “Müşteri numarası " + STRING(CustNum).ELSE RETURN ERROR “Müşteri bulunamadı" .
ON-ERROR Tümceciği
REPEAT ON ERROR UNDO, NEXT: PROMPT-FOR Customer.CustNum. FIND Customer USING CustNum.
Evet, hata durumunda ne
yapılacağını biliyorum!
DO Bloğuyla Hata işleme
. . . DO ON ERROR UNDO: PROMPT Customer.CustNum. FIND Customer WHERE CustNum = INPUT CustNum. DISPLAY CustNum NAME Balance. FOR EACH Order OF Customer: DISPLAY OrderNum ShipDate PromiseDate. END. /* FIND block */ END. /* DO block */. . .
Hata kontrolüyle DO bloğu
Hata İşleme Tümcecikleri
ON ERROR UNDO [label1] ,LEAVE [label2]
ON ENDKEY UNDO [label1]
ON STOP UNDO [label1]
ON QUIT [UNDO [label1]]
,NEXT [label2]
,RETRY [label1]
,RETURN {ERROR} [return-string]
Bu hata işleme deyimlerinin herhangi biriyle…
...bu işlemlerden birini yapabilirsiniz
ON QUIT’te isteğe bağlı UNDO