Initialisierungs- und Bereinigungscode mit dem InfoPath 2003-Objektmodell

Standardmäßig enthält die Datei "FormCode.cs" oder "FormCode.vb", die für ein mit InfoPath 2003 kompatibles Formularvorlagenprojekt erstellt wird, den gesamten Quellcode für die Programmierlogik des Formulars. Die Vorlage für das Projekt generiert eine Klasse in der Datei "FormCode.cs" oder "FormCode.vb", vergleichbar mit den Klassen in den folgenden Beispielen, in denen Sie Initialisierungs- und Bereinigungscode sowie Handler für Formularereignisse definieren können. Die Dateien "FormCode.cs" und "FormCode.vb" wenden ein System.ComponentModel.DescriptionAttribute-Attribut auf Assemblyebene an, das die Klasse als einzige Klasse identifiziert, in der Ereignishandler implementiert werden. Das InfoPathNamespace-Attribut (implementiert durch den Typ InfoPathNamespaceAttribute) wird auf eine Klasse angewendet, um die innerhalb der Klasse verwendeten XML-DOM-Namespaces zu identifizieren. Die Namespaces, auf die in InfoPathNamespace verwiesen wird, werden vom InfoPath-Projektsystem verwaltet.

Die "FormCode"-Klasse selbst stellt die Methoden _Startup und _Shutdown bereit, die für Initialisierungs- und Bereinigungsroutinen für Komponenten verwendet werden, die zusätzlich zu InfoPath-Standardfunktionen erforderlich sind, während das Formular geöffnet ist.

Wichtig:

Member des InfoPath-Objektmodells sollten nicht aus den Methoden _Startup und _Shutdown heraus aufgerufen werden. Mit diesen Methoden sollten Sie nur Member externer Komponenten initialisieren und aufrufen.

using System;
using Microsoft.Office.Interop.InfoPath.SemiTrust;

// Office integration attribute. Identifies the startup class for the form. Do not
// modify.
[assembly: System.ComponentModel.DescriptionAttribute(
    "InfoPathStartupClass, Version=1.0, Class=Template1.FormCode")]

namespace Template1
{
    // The namespace prefixes defined in this attribute must remain synchronized with
    // those in the form definition file (.xsf).
    [InfoPathNamespace(
        "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2004-03-29T22-27-27'")]
    public partial class FormCode
    {
        private XDocument thisXDocument;
        private Application thisApplication;

        public void _Startup(Application app, XDocument doc)
        {
            thisXDocument = doc;
            thisApplication = app;

            // You can add additional initialization code here.
        }

        public void _Shutdown()
        {
        }
    }
}
Imports System
Imports Microsoft.Office.Interop.InfoPath.SemiTrust
Imports Microsoft.VisualBasic

' Office integration attribute. Identifies the startup class for the form. Do not
' modify.
<Assembly: System.ComponentModel.DescriptionAttribute( _
    "InfoPathStartupClass, Version=1.0, Class=Template1.FormCode")>

Namespace Template1
    ' The namespace prefixes defined in this attribute must remain synchronized with
    ' those in the form definition file (.xsf).
    <InfoPathNamespace( _
        "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2004-03-29T22-36-40'")> _
    Public Class FormCode

        Private thisXDocument As XDocument
        Private thisApplication As Application

        Public Sub _Startup(app As Application, doc As XDocument)
            thisXDocument = doc
            thisApplication = app

            ' You can add additional initialization code here.
        End Sub

        Public Sub _Shutdown()
        End Sub
    End Class
End Namespace

_Startup (Methode)

Zusätzlich zum Schreiben von Initialisierungscode für zusätzliche Komponenten, bietet die _Startup-Methode auch die Möglichkeit, die Variablen thisXDocument und thisApplication zu initialisieren, die im Formularcode für den Zugriff auf die Elemente der Klassen XDocument und Application im InfoPath-Objektmodell verwendet werden können. Der für die Initialisierung der beiden Variablen erforderliche Code wird automatisch von der Visual Studio-Projektvorlage generiert.

    private XDocument thisXDocument;
    private Application thisApplication;

    public void _Startup(Application app, XDocument doc)
    {
        thisXDocument = doc;
        thisApplication = app;

        // You can add additional initialization code here.
    }
    Private thisXDocument As XDocument
    Private thisApplication As Application

    Public Sub _Startup(app As Application, doc As XDocument)
        thisXDocument = doc
        thisApplication = app

        ' You can add additional initialization code here.
    End Sub

Die folgenden Beispiele stellen einen einfachen Ereignishandler für eine Schaltfläche dar, die mithilfe der thisXDocument-Variablen auf die Alert-Methode vom Typ UIObject zugreift.

[InfoPathEventHandler(MatchPath="CTRL1_5", EventType=InfoPathEventType.OnClick)]
public void CTRL1_5_OnClick(DocActionEvent e)
{
    // Write your code here.
    thisXDocument.UI.Alert("Hello!");
}
<InfoPathEventHandler(MatchPath:="CTRL1_5", EventType:=InfoPathEventType.OnClick)> _
Public Sub CTRL1_5_OnClick(ByVal e As DocActionEvent)
    ' Write your code here.
    thisXDocument.UI.Alert("Hello!")
End Sub

Informationen zum Erstellen eines Ereignishandlers finden Sie unter Vorgehensweise: Hinzufügen eines Ereignishandlers mit dem InfoPath 2003-Objektmodell.

_ShutDown (Methode)

Die _Shutdown-Methode wird beim Schließen eines Formulars zuletzt aufgerufen. In dieser Methode können Sie beliebigen Code schreiben, der zum Bereinigen oder Fertigstellen von im Formular verwendeten Komponenten benötigt wird.

    public void _Shutdown()
    {
    }
    Public Sub _Shutdown()
    End    Sub

Beispiel für Initialisierungs- und Bereinigungscode

Im folgenden Beispiel wird veranschaulicht, wie eine Verbindung mit einer Microsoft SQL Server™-Datenbank in der _Startup-Methode initialisiert und die Verbindung in der _Shutdown-Methode geschlossen wird. Für die einwandfreie Funktion dieses Beispiels müssen Sie zuerst einen Verweis auf die System.Data-Assembly von .NET Framework festlegen, indem Sie im Menü Projekt auf Verweis hinzufügen klicken und dann die Komponente "System.Data.dll" auf der Registerkarte .NET auswählen. Darüber hinaus wurde die Direktive using System.Data.SqlClient (oder Imports System.Data.SqlClient) am Anfang der Formularcodedatei hinzugefügt, um die Anzahl der Tastatureingaben zu reduzieren.

Hinweis:

Benutzer eines InfoPath-Formulars mit Formularcode, der eine Verbindung mit einer SQL Server-Datenbank herstellt, benötigen möglicherweise Sicherheitsberechtigungen, abhängig von der Art der Bereitstellung des Formulars und der Definition der Sicherheitsrichtlinien. Weitere Informationen zur Sicherheit finden Sie unter Informationen zum Sicherheitsmodell für Formularvorlagen mit verwaltetem Code und Vorgehensweise: Konfigurieren von Sicherheitseinstellungen für Formularvorlagen mit verwaltetem Code.

using System;
using System.Data.SqlClient;
using Microsoft.Office.Interop.InfoPath.SemiTrust;

// Office integration attribute. Identifies the startup class for the form. Do not
// modify.
[assembly: System.ComponentModel.DescriptionAttribute(
    "InfoPathStartupClass, Version=1.0, Class=Template1.FormCode")]

namespace Template1
{
    // The namespace prefixes defined in this attribute must remain synchronized with
    // those in the form definition file (.xsf).
    [InfoPathNamespace(
        "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2004-03-05T20-56-13'")]
    public partial class Template1
    {
        private XDocument    thisXDocument;
        private Application    thisApplication;
        private SqlConnection sqlConnect;

        public void _Startup(Application app, XDocument doc)
        {
            thisXDocument = doc;
            thisApplication = app;

            // Initialize variable for SQL Server connection.
            sqlConnect= new SqlConnection("server=localhost;Trusted_Connection=yes;database=Northwind");
        }

        public void _Shutdown()
        {
            // Close SQL Server connection at shut down.
            sqlConnect.Close();
        }
    }
}
Imports System
Imports System.Data.SqlClient
Imports Microsoft.Office.Interop.InfoPath.SemiTrust
Imports Microsoft.VisualBasic

' Office integration attribute. Identifies the startup class for the form. Do not
' modify.
<Assembly: System.ComponentModel.DescriptionAttribute( _
    "InfoPathStartupClass, Version=1.0, Class=Template1.FormCode")>

Namespace Template1
        ' The namespace prefixes defined in this attribute must remain synchronized with
        ' those in the form definition file (.xsf).
        <InfoPathNamespace( _
            "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2004-03-08T18-47-33'")>        _
        Public Class Template1

            Private thisXDocument As XDocument
            Private thisApplication As Application
            Private sqlConnect As SqlConnection

            Public Sub _Startup(app As Application, doc As XDocument)
                thisXDocument = doc
                thisApplication = app

                ' Initialize variable for SQL Server connection.
                sqlConnect = New SqlConnection _("server=localhost;Trusted_Connection=yes;database=Northwind")
            End Sub

        Public Sub _Shutdown()
            ' Close SQL Server connection.
            sqlConnect.Close()
        End Sub
    End Class
End Namespace

Siehe auch

Aufgaben

Vorgehensweise: Hinzufügen eines Ereignishandlers mit dem InfoPath 2003-Objektmodell