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

  1. Öffnen Sie InfoPath.

  2. Klicken Sie im Menü Extras auf Optionen.

  3. Aktivieren Sie auf der Registerkarte Erweitert das Kontrollkästchen Benachrichtigung für Fehler in Visual Basic- oder C#-Code anzeigen.