Gestione personalizzata degli errori con Silverlight 1.0

di Alessio Leoncini, in Silverlight 1.0,

Le funzioni Helper Silverlight.createObject e Silverlight.createObjectEx disponibili con l'SDK si occupano di preparare il codice ad inserire oggetti Silverlight nelle pagine web.
Oltre al codice HTML tali metodi aggiungono anche alcune funzionalità per migliorare la programmazione e l'esperienza dell'utente, una di essi è la gestione centralizzata delle eccezioni che si possono verificare durante la consultazione di un progetto; l'implementazione di base prevede che al verificarsi di un errore siano recuperate le informazioni principali sulla tipologia di errore e sul codice che lo ha generato e successivamente sia chiamata la funzione Alert in modo che sia aperta una finestra contenente il codice dell'eccezione, nella quale l'utente sia obbligato ad eseguire un click sul pulsante OK per proseguire.

Questa funzionalità è molto comoda per il programmatore durante la fase di sviluppo e test del progetto, tuttavia in fase di produzione una finestra di Alert può essere molto invasiva e spiacevole per l'utente, per fortuna è possibile inserire una propria implementazione della gestione degli errori dichiarando una specifica funzione nel parametro onError delle funzioni helper:

function createSilverlight()
{
    Silverlight.createObjectEx({
        source: 'PackageDownloader.xaml',
        parentElement:parentElement,
        id:'myPlugin',
        properties:{
        width:'800',
        height:'600',
        inplaceInstallPrompt:false,
        background:'Black',
        isWindowless:'false',
        framerate:'24',
        version:'1.0'},
        events:{
        onError:OnErrorEventHandler,
        onLoad:ImageDownloader_onLoad
        },
    initParams:null,
    context:null});
}

In questo esempio ogni eccezione non gestita da altri eventi specifici degli oggetti sarà intercettata dalla funzione OnErrorEventHandler nella quale andremo a recuperare tutte le informazioni più utili ad individuare l'errore, da utilizzare eventualmente per eseguire un logging o una comunicazione ai programmatori, ma presenteremo a video un messaggio integrato nel layout del sito in modo da minimizzare l'impatto di un tale evento nei confronti dell'utente:

function OnErrorEventHandler(sender, errorArgs)
{
    // The error message to display.
    var errorMsg = "Silverlight Error: \n\n";
    
    // Error information common to all errors.
    errorMsg += "Error Type:    " + errorArgs.errorType + "\n";
    errorMsg += "Error Message: " + errorArgs.errorMessage + "\n";
    errorMsg += "Error Code:    " + errorArgs.errorCode + "\n";
    
    // Determine the type of error and add specific error information.
    switch(errorArgs.errorType)
    {
        case "RuntimeError":
            // Display properties specific to RuntimeErrorEventArgs.
            if (errorArgs.lineNumber != 0)
            {
                errorMsg += "Line: " + errorArgs.lineNumber + "\n";
                errorMsg += "Position: " +  errorArgs.charPosition + "\n";
            }
            errorMsg += "MethodName: " + errorArgs.methodName + "\n";
            break;
        case "ParserError":
            // Display properties specific to ParserErrorEventArgs.
            errorMsg += "Xaml File:      " + errorArgs.xamlFile      + "\n";
            errorMsg += "Xml Element:    " + errorArgs.xmlElement    + "\n";
            errorMsg += "Xml Attribute:  " + errorArgs.xmlAttribute  + "\n";
            errorMsg += "Line:           " + errorArgs.lineNumber    + "\n";
            errorMsg += "Position:       " + errorArgs.charPosition  + "\n";
            break;
        default:
            break;
    }
    // Display the error message.
    // alert(errorMsg);
    
    var MessageBlock = host.content.findName("MessageBlock");
    MessageBlock.Text = "Spiacenti, si è verificato un errore, riprovare";
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi