22

progressokulu.com Advanced Business Language Slide 9

Embed Size (px)

Citation preview

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)

Uygulama 1 : Varsayılan Hata Kontrolü

ON-ERROR Kullanımı

ERROR-STATUS handle: hata bilgisinin yerini gösteren bir pointer

ERROR = YES

ERROR-STATUS:ERROR

Uygulama 2 : Kendi Hata Yönetim Kodunuzu Yazın

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ı" .

Uygulama 2 : Hata Kontrolü

Hata Koşullarına Yanıt Üretmek

•RETRY•RETURN [ERROR]•LEAVE•NEXT

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

Uygulama 2 : Varsayılan Davranış ile ON-ERROR Karşılaştırması

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

Uygulama 3 : ON-ERROR Kullanımı