Procedura: Gestire gli errori
Durante la creazione di applicazioni personalizzate, gli sviluppatori devono spesso eseguire operazioni di gestione degli errori che comportano la scrittura di codice di programmazione per controllare gli errori generati dall'applicazione oppure per creare e generare errori personalizzati. Il modello a oggetti di InfoPath offerto dallo spazio dei nomi Microsoft.Office.InfoPath supporta la gestione degli errori tramite l'associazione della classe FormError con la classe FormErrorCollection.
In InfoPath possono verificarsi errori per i motivi seguenti:
Convalida dello schema XML non superata dai dati immessi in un modulo
Vincolo di convalida personalizzato non soddisfatto
Errore generato dal metodo ReportError dell'oggetto evento XmlValidatingEventArgs
Errore creato tramite il metodo Add della classe FormErrorCollection.
Informazioni generali sulla classe FormErrorCollection
La classe FormErrorCollection include i metodi e le proprietà seguenti, che possono essere utilizzati dagli sviluppatori di moduli per gestire gli oggetti FormError contenuti nell'insieme.
Nome | Descrizione |
---|---|
Metodo Add (+3 overload) |
Crea un oggetto FormError e lo aggiunge all'insieme. |
Metodo Delete (+1 overload) |
Elimina dall'insieme l'errore definito dall'utente specificato. |
Metodo DeleteAll |
Elimina tutti gli oggetti FormError contenuti nell'insieme. |
GetErrors (+1 overload) |
Restituisce tutti gli oggetti FormError con il nome o il tipo specificato contenuti nell'insieme. |
Proprietà Count |
Ottiene il numero di oggetti ErrorObject contenuti nell'insieme. |
Proprietà Item |
Ottiene un riferimento a un oggetto ErrorObject in base al numero di indice specificato. |
Informazioni generali sulla classe FormError
La classe FormError include le proprietà seguenti, che possono essere utilizzate dagli sviluppatori di moduli per accedere alle informazioni sull'errore generato.
Nome | Descrizione |
---|---|
Proprietà DetailedMessage |
Ottiene o imposta il messaggio di errore dettagliato dell'oggetto FormError. |
Proprietà ErrorCode |
Ottiene o imposta il codice di errore dell'oggetto FormError. |
Proprietà Site |
Ottiene un oggetto XPathNavigator posizionato nel nodo associato all'oggetto FormError. |
Proprietà Message |
Ottiene o imposta il messaggio di errore breve dell'oggetto FormError. |
Proprietà FormErrorType |
Ottiene il tipo dell'oggetto FormError. |
Utilizzo delle classi FormErrorCollection e FormError
L'oggetto FormErrorCollection associato a un modulo è accessibile tramite la proprietà Errors dell'oggetto XmlForm. L'oggetto FormErrorCollection viene associato a un documento XML sottostante del modulo in modo che, quando si verifica un errore, sia possibile accedervi e gestirlo nel documento XML corrente insieme a eventuali errori aggiuntivi. Nell'esempio seguente viene illustrato l'utilizzo di un ciclo per controllare la presenza di eventuali errori in un documento XML sottostante del modulo. Se vengono rilevati errori, la funzione esegue un ciclo tra ogni errore e visualizza una finestra di messaggio per l'utente tramite la proprietà Message dell'oggetto FormError.
public void CheckErrors(XPathNavigator xmlNode)
{
foreach(FormError err in this.Errors)
{
if(xmlNode.InnerXml == err.Site.InnerXml)
MessageBox.Show("The following error has occured: "
+ err.Message);
}
}
Public Sub CheckErrors(ByVal xmlNode As XPathNavigator)
Dim err As FormError
For Each err In Me.Errors
If xmlNode.InnerXml = err.Site.InnerXml Then
MessageBox.Show("The following error has occured: " _
& err.Message)
End If
End Sub
È possibile chiamare la funzione precedente da uno dei gestori eventi di convalida dei dati del modulo. Se ad esempio viene utilizzata nel gestore eventi Changed di un campo del modulo, la chiamata alla funzione passa l'argomento del nodo XML utilizzando la proprietà Site dell'oggetto evento XmlEventArgs come illustrato di seguito.
CheckErrors(e.Site);
CheckErrors(e.Site)
Oltre a gestire gli errori generati da InfoPath, gli sviluppatori di moduli possono generare errori personalizzati tramite il metodo ReportError dell'oggetto evento XmlValidatingEventArgs o il metodo Add della classe FormErrorCollection. Per informazioni sull'utilizzo del metodo ReportError o Add, fare clic sul collegamento corrispondente all'inizio di questo argomento.
Gestione delle eccezioni del codice gestito
È possibile utilizzare la gestione delle eccezioni try-catch per gestire le eccezioni generate in un modello di modulo con codice gestito, come illustrato nell'esempio seguente.
FileQueryConnection queryXMLFile =
(FileQueryConnection)this.DataConnections["form1"];
// Perform the query.
try
{
queryXMLFile.Execute();
}
catch (Exception ex)
{
MessageBox.Show("Failed to query." + System.Environment.NewLine
+ ex.Message);
}
Dim queryXMLFile As FileQueryConnection = _
DirectCast(Me.DataConnections("form1"), FileQueryConnection)
' Perform the query.
Try
queryXMLFile.Execute();
Catch ex As Exception
MessageBox.Show("Failed to query." & System.Environment.NewLine
& ex.Message)
End Try
Se non si utilizza la gestione delle eccezioni try-catch nel codice del modulo, verranno visualizzate automaticamente informazioni sulle eccezioni non gestite nella finestra di dialogo degli errori di InfoPath durante le operazioni di debug e anteprima. Per impostazione predefinita, inoltre, le eccezioni non gestite non vengono visualizzate nella finestra di dialogo degli errori di InfoPath in fase di esecuzione quando si distribuisce il modello di modulo con codice gestito. Per visualizzare informazioni sulle eccezioni non gestite in fase di esecuzione, utilizzare la procedura seguente.
Attivare le notifiche per le eccezioni non gestite del codice gestito in fase di esecuzione
Aprire InfoPath.
Scegliere Opzioni dal menu Strumenti.
Nella scheda Avanzate selezionare la casella di controllo Mostra notifica per errori del codice Visual Basic o C#.