Vorgehensweise: Arbeiten mit Offlinelösungen mithilfe des InfoPath 2003-Objektmodells

Das InfoPath 2003-kompatible Objektmodell stellt die MachineOnlineState-Eigenschaft des Application-Objekts bereit, mit dessen Hilfe durch den Formularcode überprüft werden kann, ob der Computer des Benutzers mit dem Netzwerk verbunden ist. Je nach dem Status der Verbindung können vom Formularcode verschiedene Aktionen ausgeführt werden.

Verwenden der MachineOnlineState-Eigenschaft

Im folgenden Beispiel wird gezeigt, wie Sie dem Formularcode Logik hinzufügen können. Mit dieser wird anhand des Online- oder Offlinestatus des Benutzercomputers bestimmt, wie ein Formular gesendet werden soll.

Bei dem Beispiel wird davon ausgegangen, dass Sie ein Formular zum Senden eines Umsatzberichts erstellt haben, das ein Feld mit der Bezeichnung "period" (Zeitraum) zur Angabe des im Bericht behandelten Monats und Jahres enthält. Außerdem wird vorausgesetzt, dass Sie bereits eine Datenverbindung und die Logik zum Senden des Berichts, wenn der Benutzer online ist, definiert haben.

Hinzufügen einer Datenverbindung, die das Formular als Anlage einer E-Mail-Nachricht sendet

  1. Erstellen oder öffnen Sie eine InfoPath-Formularvorlage mit verwaltetem Code.

  2. Klicken Sie im InfoPath-Entwurfsmodus im Menü Extras auf Datenverbindungen.

  3. Klicken Sie im Dialogfeld Datenverbindungen auf Hinzufügen.

  4. Klicken Sie im Datenverbindungs-Assistenten auf Daten senden, und klicken Sie anschließend auf Weiter.

  5. Klicken Sie auf der nächsten Seite des Assistenten auf Als E-Mail-Nachricht, und klicken Sie dann auf Weiter.

  6. Geben Sie auf der nächsten Seite des Assistenten Ihre E-Mail-Adresse im Feld An ein.

  7. Führen Sie im Feld Betreff die folgenden Schritte aus, um den Umsatzzeitraum mit dem Text "Sales Report" (Umsatzbericht) zu kombinieren:

    1. Klicken Sie neben dem Feld Betreff auf die Schaltfläche Formel.

    2. Klicken Sie im Dialogfeld Formel einfügen auf Funktion einfügen.

    3. Klicken Sie im Dialogfeld Funktion einfügen in der Liste Kategorien auf Text, und doppelklicken Sie dann in der Liste Funktionen auf verketten.

    4. Ersetzen Sie die erste Instanz von Feld mit Doppelklick einfügen durch den folgenden Text (einschließlich der einfachen Anführungszeichen): 'Sales Report: '

    5. Doppelklicken Sie auf die zweite Instanz von Feld mit Doppelklick einfügen.

    6. Klicken Sie im Dialogfeld Feld oder Gruppe auswählen auf das Feld für den Zeitraum (period).

    7. Löschen Sie die letzte Instanz von Feld mit Doppelklick einfügen, und klicken Sie dann auf OK.

  8. Klicken Sie im Assistenten auf Weiter.

  9. Geben Sie auf der nächsten Seite des Assistenten 'E-mail Submit' im Feld Geben Sie einen Namen für die Datenverbindung an ein, und klicken Sie dann auf Fertig stellen.

Hinzufügen von Logik zum Senden des Formulars je nach dem Verbindungsstatus eines Benutzercomputers

  1. Klicken Sie im InfoPath-Entwurfsmodus im Menü Extras auf Formulare absenden.

  2. Klicken Sie im Dialogfeld Formulare absenden auf Befehle und Schaltflächen für das Absenden aktivieren, und wählen Sie dann im Feld Übermitteln an die Option Benutzerdefinierte Aktion mithilfe von Code ausführen aus.

  3. Aktivieren Sie das Kontrollkästchen Formularcode bearbeiten, und klicken Sie dann auf OK.

  4. Fügen Sie unter dem OnSubmitRequest-Ereignishandler die folgenden beiden Funktionen hinzu:

    public void OnlineSubmit(DocReturnEvent e)
    {
       // Logic for submitting online goes here.
    }
    
    public void OfflineSubmitX(DocReturnEvent e)
    {
       // Access and submit to the e-mail adapter.
       DataAdaptersCollection myDataAdapters = 
          thisXDocument.DataAdapters;
       EmailAdapterObject submitAdapter = 
          (EmailAdapterObject) myDataAdapters["E-mail Submit"];
       submitAdapter.Submit();
    
       // Notify the user that the form was submitted offline.
       System.Text.StringBuilder message = 
       new System.Text.StringBuilder();
       message.Append("You submitted your Sales Report offline. ");
       message.Append("Your Sales Report is in your outbox ");
       message.Append("and will be submitted when you connect to ");
       message.Append("the network.");
        thisXDocument.UI.Alert(message.ToString());
    
       // The submission was successful.
       e.ReturnStatus = true;
    }
    
  5. Fügen Sie der OnSubmitRequest-Ereignishandlerfunktion die folgende if-Anweisung hinzu.

    // Check the computer's connection state.
    if (thisApplication.MachineOnlineState==XdMachineOnlineState.xdOnline)
    {
        OnlineSubmit(e);
    }
    else
    {
        OfflineSubmit(e);
    }
    

Testen des Codes

  1. Klicken Sie im****Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, zeigen Sie auf Vorschau, und klicken Sie dann auf Standard.

  2. Füllen Sie das Formular aus.

  3. Starten Sie Microsoft Internet Explorer.

  4. Klicken Sie in Internet Explorer im Menü Datei auf Offlinebetrieb.

  5. Klicken Sie in InfoPath auf Absenden. Eine Meldung sollte mitteilen, dass das Formular als E-Mail-Nachricht abgesendet wird.

  6. Klicken Sie auf Senden. Eine Meldung sollte mitteilen, dass das Formular offline abgesendet wurde.