Hataları işleme örneği: CustomErrors uygulaması

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

CustomErrors uygulaması, bir uygulama oluşturulurken özel hatalarla çalışma tekniklerini gösterir. Bu teknikler şunlardır:

  • XML paketini doğrulama

  • Özel bir hata yazma

  • Özel hatalar atma

  • Bir hata atıldığında bunu kullanıcılara bildirme

Bu örneğin uygulama dosyalarını edinmek için bkz. www.adobe.com/go/learn_programmingAS3samples_flash_tr . CustomErrors uygulama dosyaları, Samples/CustomError klasöründe bulunabilir. Uygulama aşağıdaki dosyaları içerir:

File

Açıklama

CustomErrors.mxml

veya

CustomErrors.fla

Flash (FLA) veya Flex (MXML) içindeki ana uygulama dosyası

com/example/programmingas3/errors/ApplicationError.as

Hem FatalError hem de WarningError sınıfları için temel hata sınıfı görevi gören bir sınıf.

com/example/programmingas3/errors/FatalError.as

Uygulama tarafından verilen bir FatalError hatasını tanımlayan bir sınıf. Bu sınıf özel ApplicationError sınıfını genişletir.

com/example/programmingas3/errors/Validator.as

Kullanıcı tarafından sağlanan bir çalışan XML paketini doğrulayan tek bir yöntemi tanımlayan sınıf.

com/example/programmingas3/errors/WarningError.as

Uygulama tarafından verilen bir WarningError hatasını tanımlayan bir sınıf. Bu sınıf özel ApplicationError sınıfını genişletir.

CustomErrors uygulamasına genel bakış

Uygulama yüklendiğinde, Flex uygulamaları için initApp() yöntemi çağrılır veya Flash uygulamaları için zaman çizelgesi (işlev olmayan) kodu çalıştırılır. Bu kod, Doğrulayan sınıf tarafından doğrulanan örnek XML paketini tanımlar. Aşağıdaki kod çalıştırılır:

employeeXML =  
    <employee id="12345"> 
        <firstName>John</firstName> 
        <lastName>Doe</lastName> 
        <costCenter>12345</costCenter> 
        <costCenter>67890</costCenter> 
    </employee>; 
}

XML paketi daha sonra Sahne Alanı'nda bir TextArea bileşen örneğinde görüntülenir. Bu adım, XML paketini yeniden doğrulama girişiminde bulunmadan önce XML paketini değiştirmenizi sağlar.

Kullanıcı Doğrulama düğmesini tıklattığında, validateData() yöntemi çağrılır. Bu yöntem, Validator sınıfında validateEmployeeXML() yöntemini kullanarak çalışan XML paketini doğrular. Aşağıdaki kod, validateData() yöntemini gösterir:

function validateData():void 
{ 
    try 
    { 
        var tempXML:XML = XML(xmlText.text); 
        Validator.validateEmployeeXML(tempXML); 
        status.text = "The XML was successfully validated."; 
    } 
    catch (error:FatalError) 
    { 
        showFatalError(error); 
    } 
    catch (error:WarningError) 
    { 
        showWarningError(error); 
    } 
    catch (error:Error) 
    { 
        showGenericError(error); 
    } 
}

İlk olarak, xmlText TextArea bileşen örneğinin içerikleri kullanılarak geçici bir XML nesnesi oluşturulur. Daha sonra, özel Doğrulayan sınıfındaki(com.example.programmingas3/errors/Validator.as) validateEmployeeXML() yöntemi çağırılır ve parametre olarak geçici XML nesnesine gönderilir. XML paketi geçerliyse, status Label bileşen örneği bir başarı mesajını görüntüler ve uygulamadan çıkılır. validateEmployeeXML() yöntemi özel bir hata atarsa (başka bir deyişle, bir FatalError, WarningError veya genel Error oluşursa), uygun catch deyimi çalıştırılır ve showFatalError() , showWarningError() veya showGenericError() yöntemlerinden birini çağırır. Bu yöntemlerden her biri, kullanıcıya belirli bir hatanın oluştuğunu bildirmek için statusTex t adındaki bir metin alanında uygun bir mesajı görüntüler. Ayrıca her yöntem, status Label bileşen örneğini belirli bir mesajla günceller.

Çalışan XML paketini doğrulama girişimi sırasında kritik bir hata oluşursa, aşağıdaki kodun gösterdiği gibi, hata mesajı statusText metin alanında görüntülenir ve xmlText TextArea bileşen örneği ile validateBtn Button bileşen örneği devre dışı bırakılır:

function showFatalError(error:FatalError):void 
{ 
    var message:String = error.message + "\n\n"; 
    var title:String = error.getTitle(); 
    statusText.text = message + " " + title + "\n\nThis application has ended."; 
    this.xmlText.enabled = false; 
    this.validateBtn.enabled = false; 
    hideButtons(); 
}

Kritik hata yerine bir uyarı hatası oluşursa, hata mesajı statusText TextArea örneğinde görüntülenir ancak xmlText TextField ve Button bileşen örnekleri devre dışı bırakılmaz. showWarningError() yöntemi, özel hata mesajını statusText metin alanında görüntüler. Ayrıca mesaj, kullanıcıdan XML doğrulama işlemine devam etmeyi mi yoksa komut dosyasını durdurmayı mı istediğine karar vermesini ister. Aşağıdaki alıntı showWarningError() yöntemini gösterir:

function showWarningError(error:WarningError):void 
{ 
    var message:String = error.message + "\n\n" + "Do you want to exit this application?"; 
    showButtons(); 
    var title:String = error.getTitle(); 
    statusText.text = message; 
}

Kullanıcı Evet veya Hayır düğmesini tıklattığında, closeHandler() yöntemi çağrılır. Aşağıdaki alıntı closeHandler() yöntemini gösterir:

function closeHandler(event:CloseEvent):void 
{ 
    switch (event.detail) 
    { 
        case yesButton: 
            showFatalError(new FatalError(9999)); 
            break; 
        case noButton: 
            statusText.text = ""; 
            hideButtons(); 
            break; 
    } 
}

Kullanıcı Evet'i tıklatarak komut dosyasını durdurmayı seçerse bir FatalError verilerek uygulamanın sonlandırılmasına neden olur.

Özel bir doğrulayıcı oluşturma

Özel Validator sınıfı tek bir yöntemi içerir: validateEmployeeXML() . validateEmployeeXML() yöntemi, doğrulamak istediğiniz XML paketi olan tek bir argüman olan ( employee ) alır. validateEmployeeXML() yöntemi şöyledir:

public static function validateEmployeeXML(employee:XML):void 
{ 
    // checks for the integrity of items in the XML 
    if (employee.costCenter.length() < 1) 
    { 
        throw new FatalError(9000); 
    } 
    if (employee.costCenter.length() > 1) 
    { 
        throw new WarningError(9001); 
    } 
    if (employee.ssn.length() != 1) 
    { 
        throw new FatalError(9002); 
    } 
}

Bir çalışanın doğrulanması için bir (ve tek) maliyet merkezine ait olması gerekir. Çalışan herhangi bir maliyet merkezine ait değilse, yöntem bir FatalError atar ve bu da ana uygulama dosyasında validateData() yöntemine köpürür. Çalışan birden çok maliyet merkezine aitse, bir WarningError atılır. XML doğrulayıcısındaki son denetim, kullanıcının tanımlanmış bir sosyal güvenlik numarasına sahip olmasıdır (XML paketinde ssn düğümü). Tam olarak bir ssn düğümü yoksa, bir FatalError hatası atılır.

ssn düğümünün geçerli bir sayı içerdiğinin veya çalışanın tanımlanmış en az bir telefon numarasının ve e-posta adresinin bulunduğundan ve her iki değerin de geçerli olduğundan emin olmak için validateEmployeeXML() yöntemine ek denetimler ekleyebilirsiniz. Ayrıca her çalışanın benzersiz olan ve yöneticilerinin kimliğini tanımlayan bir kimliği olacak şekilde XML'i değiştirebilirsiniz.

ApplicationError sınıfını tanımlama

ApplicationError sınıfı hem FatalError hem de WarningError sınıfları için temel hata sınıfı görevini görür. ApplicationError sınıfı, Error sınıfını genişletir ve hata kimliği, önem derecesi ve özel hata kodlarını ve mesajlarını içeren bir XML nesnesi de dahil olmak üzere kendi özel yöntemlerini ve özelliklerini tanımlar. Bu sınıf aynı zamanda her hata türünün önem derecesini tanımlamak için kullanılan iki statik sabiti de tanımlar.

ApplicationError sınıfının yapıcı yöntemi şöyledir:

public function ApplicationError() 
{ 
    messages =  
        <errors> 
            <error code="9000"> 
                <![CDATA[Employee must be assigned to a cost center.]]> 
            </error> 
            <error code="9001"> 
                <![CDATA[Employee must be assigned to only one cost center.]]> 
            </error> 
            <error code="9002"> 
                <![CDATA[Employee must have one and only one SSN.]]> 
            </error> 
            <error code="9999"> 
                <![CDATA[The application has been stopped.]]> 
            </error> 
        </errors>; 
}

XML nesnesindeki her hata düğümü benzersiz bir sayısal kod ve hata mesajı içerir. Aşağıdaki getMessageText() yönteminde de görüldüğü gibi, hata mesajları E4X kullanılarak hata koduna göre kolayca aranabilir:

public function getMessageText(id:int):String 
{ 
    var message:XMLList = messages.error.(@code == id); 
    return message[0].text(); 
}

getMessageText() yöntemi tek bir tam sayı argümanını ( id ) alır ve bir dize döndürür. id argümanı, aranacak hatanın hata kodudur. Örneğin, id olarak 9001 değerinin iletilmesi, çalışanların yalnızca bir maliyet merkezine atanması gerektiğini belirten hatayı alır. Birden çok hata aynı hata koduna sahipse, ActionScript, yalnızca bulunan birinci sonucun hata mesajını (döndürülen XMLList nesnesinde message[0] ) döndürür.

Bu sınıfta bulunan sonraki yöntem ( getTitle() ) herhangi bir parametre almaz ve bu belirli hatanın hata kimliğini içeren bir dize değerini döndürür. XML paketinin doğrulaması sırasında gerçekleşen tam hatayı kolayca tanımlamanıza yardımcı olmak için bu değer kullanılır. Aşağıdaki alıntı, getTitle() yöntemini gösterir:

public function getTitle():String 
{ 
    return "Error #" + id; 
}

ApplicationError sınıfındaki son yöntem şudur: toString(). Bu yöntem, Error sınıfında tanımlanan işlevi geçersiz kılar, böylece hata mesajının sunumunu özelleştirebilirsiniz. Söz konusu yöntem, oluşan belirli hata sayısını ve mesajını tanımlayan bir dize döndürür.

public override function toString():String 
{ 
    return "[APPLICATION ERROR #" + id + "] " + message; 
}

FatalError sınıfını tanımlama

FatalError sınıfı, özel ApplicationError sınıfını genişletir ve üç yöntemi tanımlar: FatalError yapıcısı, getTitle() ve toString() . Birinci yöntem olan FatalError yapıcısı, tek bir tam sayı argümanını ( errorID ) alır ve ApplicationError sınıfında tanımlanan statik sabit değerlerini kullanarak hatanın önem derecesini ayarlar, ardından ApplicationError sınıfında getMessageText() yöntemini çağırarak belirli hatanın hata mesajını alır. FatalError yapıcısı şöyledir:

public function FatalError(errorID:int) 
{ 
    id = errorID; 
    severity = ApplicationError.FATAL; 
    message = getMessageText(errorID); 
}

FatalError sınıfındaki sonraki yöntem olan getTitle() , ApplicationError sınıfında önceden tanımlanan getTitle() yöntemini geçersiz kılar ve kullanıcıya kritik bir hata oluştuğunu bildirmek için başlığın sonuna “-- FATAL” metnini ekler. getTitle() yöntemi şöyledir:

public override function getTitle():String 
{ 
    return "Error #" + id + " -- FATAL"; 
}

Bu sınıftaki son yöntem olan toString() , ApplicationError sınıfında tanımlanan toString() yöntemini geçersiz kılar. toString() yöntemi

public override function toString():String 
{ 
    return "[FATAL ERROR #" + id + "] " + message; 
}

WarningError sınıfını tanımlama

WarningError sınıfı, ApplicationError sınıfını genişletir ve FatalError sınıfıyla neredeyse aynıdır. Tek farkı, aşağıdaki kodda görüldüğü gibi, birkaç küçük dize değişikliğinin yanı sıra hata önem derecesini ApplicationError.FATAL olarak değil, ApplicationError.WARNING olarak ayarlamasıdır:

public function WarningError(errorID:int) 
{ 
    id = errorID; 
    severity = ApplicationError.WARNING; 
    message = super.getMessageText(errorID); 
}