Vorgehensweise: Arbeiten mit Offlinelösungen
Das InfoPath-Objektmodell stellt die MachineOnlineState-Eigenschaft der Application-Klasse bereit, mit deren Hilfe durch den Formularcode überprüft werden kann, ob der Computer des Benutzers mit dem Netzwerk verbunden ist. Durch das Überprüfen des Werts der MachineOnlineState-Eigenschaft kann der Formularcode verschiedene Aktionen ausführen, je nach Status der Verbindung.
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 zu einer E-Mail-Nachricht sendet
Erstellen Sie eine InfoPath-Formularvorlage mit verwaltetem Code.
Klicken Sie im InfoPath-Entwurfsmodus im Menü Extras auf Datenverbindungen.
Klicken Sie im Dialogfeld Datenverbindungen auf Hinzufügen.
Klicken Sie im Datenverbindungs-Assistenten auf Daten senden, und klicken Sie anschließend auf Weiter.
Klicken Sie auf der nächsten Seite des Assistenten auf Als E-Mail-Nachricht, und klicken Sie dann auf Weiter.
Geben Sie auf der nächsten Seite des Assistenten Ihre E-Mail-Adresse im Feld An ein.
Führen Sie im Feld Betreff die folgenden Schritte aus, um den Umsatzzeitraum mit dem Text "Sales Report" (Umsatzbericht) zu kombinieren:
Klicken Sie neben dem Feld Betreff auf die Schaltfläche Formel.
Klicken Sie im Dialogfeld Formel einfügen auf Funktion einfügen.
Klicken Sie im Dialogfeld Funktion einfügen in der Liste Kategorien auf Text, und doppelklicken Sie dann in der Liste Funktionen auf concat.
Ersetzen Sie die erste Instanz von Doppelklicken, um Feld einzufügen durch den folgenden Text (einschließlich der einfachen Anführungszeichen): 'Umsatzbericht: '
Doppelklicken Sie auf die zweite Instanz von Doppelklicken, um Feld einzufügen.
Klicken Sie im Dialogfeld Feld oder Gruppe auswählen auf das Feld period.
Löschen Sie die letzte Instanz von Doppelklicken, um Feld einzufügen, und klicken Sie dann auf OK.
Klicken Sie im Assistenten auf Weiter.
Klicken Sie auf der nächsten Seite des Assistenten neben dem Feld Name der Anlage auf die Schaltfläche Formel, und wiederholen Sie dann die oben genannten Schritte, um die Formel concat("Sales Report - ", period) zu erstellen. Klicken Sie dann auf Weiter.
Geben Sie auf der letzten Seite des Assistenten im Feld Geben Sie einen Namen für diese Datenverbindung ein den Text Senden von E-Mail-Nachrichten ein, und klicken Sie dann auf Fertig stellen.
Hinzufügen von Logik zum Senden des Formulars je nach dem Verbindungsstatus eines Benutzercomputers
Klicken Sie im InfoPath-Entwurfsmodus im Menü Extras auf Absendeoptionen.
Klicken Sie im Dialogfeld Absendeoptionen auf Übermitteln dieses Formulars durch Benutzer zulassen, wählen Sie Benutzerdefiniertes Versenden mittels Formularcode aus, und klicken Sie auf Code bearbeiten.
Fügen Sie die folgenden beiden Funktionen unter dem Submit-Ereignishandler hinzu:
public void OnlineSubmit(SubmitEventArgs e) { // Logic for submitting online goes here. } public void OfflineSubmit(SubmitEventArgs e) { // Access and submit to the e-mail connection. DataConnectionCollection myDataConnections = this.DataConnections; EmailSubmitConnection submitConnection = (EmailSubmitConnection)myDataConnections["E-mail Submit"]; submitConnection.Execute(); // Notify the user that the form was submitted offline. System.Text.StringBuilder myMessage = new System.Text.StringBuilder(); myMessage.Append("You submitted your Sales Report offline. "); myMessage.Append("Your Sales Report is in your outbox "); myMessage.Append("and will be submitted when you connect to "); myMessage.Append("the network."); MessageBox.Show(myMessage.ToString()); // The submission was successful. e.CancelableArgs.Cancel = false; }
Public Sub OnlineSubmit(ByVal e As SubmitEventArgs) ' Logic for submitting online goes here. End Sub Public Sub OfflineSubmit(ByVal e As SubmitEventArgs) ' Access and submit to the e-mail connection. Dim myDataConnections As DataConnectionCollection = _ Me.DataConnections Dim submitConnection As EmailSubmitConnection = _ DirectCast(myDataConnections("E-mail Submit"), _ EmailSubmitConnection) submitConnection.Execute ' Notify the user that the form was submitted offline. Dim myMessage As System.Text.StringBuilder = _ New System.Text.StringBuilder() myMessage.Append("You submitted your Sales Report offline. ") myMessage.Append("Your Sales Report is in your outbox ") myMessage.Append("and will be submitted when you connect to ") myMessage.Append("the network.") MessageBox.Show(myMessage.ToString()) ' The submission was successful. e.CancelableArgs.Cancel = False End Sub
Fügen Sie der FormEvents_Submit-Ereignishandlerfunktion die folgende if-Anweisung hinzu.
// Check the computer's connection state. if (this.Application.MachineOnlineState == MachineState.Online) { OnlineSubmit(e); } else { OfflineSubmit(e); }
' Check the computer's connection state. If (Me.Application.MachineOnlineState = MachineState.Online) Then OnlineSubmit(e) Else { OfflineSubmit(e) End If
Testen des Codes
Klicken Sie im Menü Debuggen auf Debuggen starten.
Füllen Sie das Formular aus.
Starten Sie Microsoft Internet Explorer.
Klicken Sie in Internet Explorer im Menü Datei auf Offline arbeiten.
Klicken Sie in InfoPath auf Absenden. Eine Meldung sollte mitteilen, dass das Formular als E-Mail-Nachricht abgesendet wird.
Klicken Sie auf Senden. Eine Meldung sollte mitteilen, dass das Formular offline gesendet wurde und gesendet wird, wenn Sie eine Verbindung mit dem Netzwerk herstellen.