Vorgehensweise: Behandlung von Fehlern
Beim Erstellen von benutzerdefinierten Anwendungen müssen Entwickler häufig Fehler behandeln, wobei auch Programmiercode geschrieben werden muss, um nach Fehlern zu suchen, die von der Anwendung ausgelöst wurden, oder um benutzerdefinierte Fehler zu erstellen und auszulösen. Das vom Microsoft.Office.InfoPath-Namespace bereitgestellte InfoPath-Objektmodell unterstützt die Fehlerbehandlung durch die Verwendung der FormError-Klasse in Verbindung mit der FormErrorCollection-Klasse.
Fehler in InfoPath können aus den folgenden Gründen auftreten:
Wenn Daten, die in ein Formular eingegeben werden, bei der XML-Schemavalidierung Fehler aufweisen.
Wenn eine benutzerdefinierte Validierungseinschränkung Fehler aufweist.
Wenn von der ReportError-Methode des XmlValidatingEventArgs-Ereignisobjekts ein Fehler generiert wird.
Wenn mithilfe der Add-Methode der FormErrorCollection-Klasse ein Fehler erstellt wird.
Übersicht über die FormErrorCollection-Klasse
Die FormErrorCollection-Klasse stellt die folgenden Methoden und Eigenschaften bereit, mit deren Hilfe Entwickler die in der Auflistung enthaltenen FormError-Objekte verwalten können.
Name | Beschreibung |
---|---|
Add-Methode (+3 Überladungen) |
Erstellt ein FormError-Objekt und fügt es der Auflistung hinzu. |
Delete-Methode (+1 Überladung) |
Löscht den angegebenen benutzerdefinierten Fehler aus der Auflistung. |
DeleteAll-Methode |
Löscht alle FormError-Objekte, die in der Auflistung enthalten sind. |
GetErrors (+1 Überladung) |
Gibt alle FormError-Objekte mit dem angegebenen Namen oder Typ aus der Auflistung zurück. |
Count-Eigenschaft |
Ruft die Anzahl der ErrorObject-Objekte ab, die in der Auflistung enthalten sind. |
Item-Eigenschaft |
Ruft einen Verweis auf ein ErrorObject-Objekt basierend auf der angegebenen Indexnummer ab. |
Übersicht über die FormError-Klasse
Die FormError-Klasse stellt die folgenden Eigenschaften bereit, über die Formularentwickler auf Informationen zu dem ausgelösten Fehler zugreifen können.
Name | Beschreibung |
---|---|
DetailedMessage-Eigenschaft |
Ruft die ausführliche Fehlermeldung des FormError-Objekts ab oder legt sie fest. |
ErrorCode-Eigenschaft |
Ruft den Fehlercode des FormError-Objekts ab oder legt ihn fest. |
Site-Eigenschaft |
Ruft ein XPathNavigator-Objekt ab, das am Knoten positioniert ist, der dem FormError-Objekt zugeordnet ist. |
Message-Eigenschaft |
Ruft die kurze Fehlermeldung des FormError-Objekts ab oder legt sie fest. |
FormErrorType-Eigenschaft |
Ruft den Typ des FormError-Objekts ab. |
Verwenden der Klassen "FormErrorCollection" und "FormError"
Der Zugriff auf das FormErrorCollection-Objekt, das einem Formular zugeordnet ist, erfolgt über die Errors-Eigenschaft des XmlForm-Objekts. Das FormErrorCollection-Objekt ist dem einem Formular zugrunde liegenden XML-Dokument zugeordnet, sodass beim Auftreten eines Fehlers der Zugriff auf diesen Fehler und mögliche zusätzliche Fehler sowie die Verwaltung innerhalb des aktuellen XML-Dokuments möglich ist. Im folgenden Beispiel wird veranschaulicht, wie mit einer Schleife die Fehler überprüft werden können, die in einem einem Formular zugrunde liegenden XML-Dokument auftreten können. Wenn Fehler vorhanden sind, führt die Funktion eine Schleife durch alle Fehler aus. Anschließend wird dem Benutzer mithilfe der Message-Eigenschaft des FormError-Objekts ein Meldungsfeld angezeigt.
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
Die vorangegangene Funktion kann von einem der Ereignishandler zur Datenüberprüfung des Formulars aufgerufen werden. Wenn der Funktionsaufruf beispielsweise im Ereignishandler für das Changed-Ereignis eines Felds im Formular verwendet wird, übergibt er das XML-Knotenargument mithilfe der Site-Eigenschaft des XmlEventArgs-Ereignisobjekts wie folgt.
CheckErrors(e.Site);
CheckErrors(e.Site)
Neben der Behandlung von Fehlern, die durch InfoPath generiert werden, können Formularentwickler mithilfe der ReportError-Methode des XmlValidatingEventArgs-Ereignisobjekts oder mithilfe der Add-Methode der FormErrorCollection-Klasse auch benutzerdefinierte Fehler generieren. Weitere Informationen zur Verwendung der Methoden ReportError und Add erhalten Sie, indem Sie am Anfang des Themas auf die Links zu den jeweiligen Methoden klicken.
Behandlung von Ausnahmen im verwalteten Code
Sie können die try-catch-Ausnahmebehandlung zum Behandeln von Ausnahmen verwenden, die in Formularvorlagen mit verwaltetem Code ausgelöst wurden. Dies wird im folgenden Codebeispiel gezeigt.
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
Wenn Sie im Formularcode keine try-catch-Ausnahmebehandlung verwenden, zeigt InfoPath beim Debuggen und Anzeigen der Vorschau Informationen zu unbehandelten Ausnahmen im Dialogfeld für InfoPath-Fehler an. Außerdem werden unbehandelte Ausnahmen im Dialogfeld für InfoPath-Fehler zur Laufzeit standardmäßig nicht angezeigt, wenn Sie die Formularvorlage mit verwaltetem Code bereitstellen. Verwenden Sie das folgende Verfahren, um Informationen zu unbehandelten Ausnahmen zur Laufzeit anzuzeigen.
Aktivieren von Benachrichtigungen zu unbehandelten Ausnahmen im verwalteten Code zur Laufzeit
Öffnen Sie InfoPath.
Klicken Sie im Menü Extras auf Optionen.
Aktivieren Sie auf der Registerkarte Erweitert das Kontrollkästchen Benachrichtigung für Fehler in Visual Basic- oder C#-Code anzeigen.