Vorgehensweise: Behandeln von Fehlern mit dem InfoPath 2003-Objektmodell

Beim Erstellen benutzerdefinierter Anwendungen müssen Entwickler häufig Fehlerbehandlungen ausführen. Dies umfasst das Schreiben von Programmcode, um nach Fehlern zu suchen, die durch die Anwendung ausgelöst wurden, oder um benutzerdefinierte Fehler zu erstellen und auszulösen. Das InfoPath 2003-kompatible Objektmodell unterstützt die Fehlerbehandlung mithilfe des ErrorObject-Objekts in Verbindung mit der ErrorsCollection-Auflistung.

In InfoPath können Fehler in den folgenden Situationen auftreten: Wenn die XML-Schemavalidierung bei der Dateneingabe in ein Formular einen Fehler erzeugt; wenn eine benutzerdefinierte Gültigkeitseinschränkung einen Fehler erzeugt; wenn ein Fehler durch die ReportError-Methode des DataDOMEventObject-Objekts generiert wird oder wenn ein Fehler mithilfe der Add-Methode der ErrorsCollection-Auflistung erstellt wird.

Übersicht über die ErrorsCollection-Auflistung

Die ErrorsCollection-Auflistung stellt die folgenden Methoden und Eigenschaften bereit, mit deren Hilfe Entwickler die in der Auflistung enthaltenen ErrorObject-Objekte verwalten können.

Name Beschreibung

Add-Methode

Erstellt ein ErrorObject-Objekt und fügt es der Auflistung hinzu.

Delete-Methode

Löscht alle ErrorObject-Objekte, die dem angegebenen XML-Knoten und Bedingungsnamen zugeordnet sind, mit Ausnahme von benutzerdefinierten Fehlern, die mithilfe der ReportError-Methode hinzugefügt wurden.

DeleteAll-Methode

Löscht alle ErrorObject-Objekte, die in der Auflistung enthalten sind.

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 das ErrorObject-Objekt

Das ErrorObject-Objekt stellt die folgenden Eigenschaften bereit, über die Formularentwickler auf Informationen zu dem ausgelösten Fehler zugreifen können.

Name Beschreibung

ConditionName-Eigenschaft

Ruft in Abhängigkeit vom Typ des ErrorObject-Objekts den Namen der Fehlerbedingung ab oder gibt null zurück.

DetailedErrorMessage-Eigenschaft

Ruft die ausführliche Fehlermeldung des ErrorObject-Objekts ab oder legt sie fest.

ErrorCode-Eigenschaft

Ruft den Fehlercode des ErrorObject-Objekts ab oder legt ihn fest.

Node-Eigenschaft

Ruft einen Verweis auf den XML-Knoten ab, der dem ErrorObject-Objekt zugeordnet ist.

ShortErrorMessage-Eigenschaft

Ruft die kurze Fehlermeldung des ErrorObject-Objekts ab oder legt sie fest.

ErrorType-Eigenschaft

Ruft den Typ des ErrorObject-Objekts ab.

Verwenden der ErrorsCollection-Auflistung und des ErrorObject-Objekts

Der Zugriff auf die ErrorsCollection-Auflistung erfolgt über die Errors-Eigenschaft des XDocument-Objekts. Die ErrorsCollection-Auflistung ist dem einem Formular zugrunde liegenden XML-Dokument zugeordnet; falls ein Fehler auftritt, tritt er daher innerhalb des XML-Dokuments auf. Das folgende Beispiel zeigt, wie eine in Visual C# geschriebene foreach-Schleife verwendet werden kann, um die Fehler zu überprüfen, die in dem einem Formular zugrunde liegenden XML-Dokument vorhanden sein könnten. Falls Fehler gefunden werden, durchläuft die Funktion jeden dieser Fehler und zeigt mithilfe der ShortErrorMessage-Eigenschaft des ErrorObject-Objekts ein Meldungsfeld für den Benutzer an.

public void CheckErrors(IXMLDOMNode xmlNode)
{
   foreach(ErrorObject err in thisXDocument.Errors)
   {
      if(xmlNode==err.Node)
         thisXDocument.UI.Alert("The following error has occured: "
             + err.ShortErrorMessage + ".");
   }
}

Die vorangegangene Funktion kann von einem der Datenüberprüfungs-Ereignishandler des Formulars aufgerufen werden. Wenn der Funktionsaufruf beispielsweise im OnAfterChange-Ereignishandler für ein Feld im Formular verwendet wird, übergibt er das XML-Knotenargument mithilfe der Site-Eigenschaft des DataDOMEventObject-Objekts folgendermaßen.

CheckErrors(e.Site);

Neben der Behandlung von Fehlern, die durch InfoPath generiert werden, können Formularentwickler mithilfe der ReportError-Methode des DataDOMEventObject-Objekts oder mithilfe der Add-Methode der ErrorsCollection-Auflistung auch benutzerdefinierte Fehler generieren. Informationen zur Verwendung der Methoden ReportError und Add erhalten Sie, indem Sie am Anfang des Themas auf die entsprechende Methode 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.

DataAdapters dataAdapters;
dataAdapters = thisXDocument.DataAdapters; 
XMLFileAdapterObject queryXMLFile = 
   (XMLFileAdapterObject)dataAdapters["form1"];
// Perform the query.
try
{
   queryXMLFile.Query();
}

catch (Exception ex)
{
   thisXDocument.UI.Alert("Failed to query.\n\n" + ex.Message);
}

// Perform the submit.
try
{
   queryXMLFile.Submit();
}

catch (Exception ex)
{
   thisXDocument.UI.Alert("Failed to submit.\n\n" + ex.Message);
}

Wenn Sie im Formularcode keine try-catch-Ausnahmebehandlung verwenden, zeigt InfoPath während des Debuggens und Anzeigens der Vorschau in Visual Studio .NET 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 zum****Anzeigen von Benachrichtigungen bei Fehlern im verwalteten Code.