Cómo: Trabajar con soluciones sin conexión
El modelo de objetos de InfoPath proporciona la propiedadMachineOnlineState de la clase Application, que permite al código del formulario comprobar si el equipo del usuario está conectado a la red. Comprobando el valor de la propiedad MachineOnlineState, el código puede llevar a cabo diferentes acciones en función del estado de la conexión.
Uso de la propiedad MachineOnlineState
En el ejemplo siguiente, se muestra cómo se puede añadir al código una lógica que determine cómo enviar un formulario basándose en si el equipo del usuario está en línea o sin conexión.
En este ejemplo, se supone que se ha creado un formulario para enviar un informe de ventas que contiene un campo denominado período que especifica el mes y el año al que se refiere el informe. También asume que ya se ha definido una conexión de datos y la lógica para enviar el informe cuando el usuario está en línea.
Adicción de una conexión de datos que envíe el formulario como archivo de datos adjuntos de un mensaje de correo electrónico
Cree una plantilla de formulario con código administrado de InfoPath.
En el modo de diseño de InfoPath, haga clic en Conexiones de datos en el menú Herramientas.
En el cuadro de diálogo Conexiones de datos, haga clic en Agregar.
En el Asistente para la conexión de datos, haga clic en Enviar datos y, a continuación, en Siguiente.
En la página siguiente del asistente, haga clic en Como mensaje de correo electrónico y, a continuación, en Siguiente.
En la página siguiente del asistente, escriba su dirección de correo electrónico en el cuadro Para.
En el cuadro Asunto, lleve a cabo la siguiente operación para combinar el período de ventas con el texto del informe de ventas:
Haga clic en el botón Fórmula junto al cuadro Asunto.
En el cuadro de diálogo Insertar una fórmula, haga clic en Insertar una función.
En el cuadro de diálogo Insertar una función, haga clic en la opción Texto de la lista Categorías y, a continuación, haga doble clic en la opción concat de la lista Funciones.
Reemplace la primera instancia de haga doble clic para insertar el campo con el texto siguiente (incluyendo las comillas): 'Informe de ventas:'
Haga doble clic en la segunda instancia de haga doble clic para insertar el campo.
En el cuadro de diálogo Seleccionar una campo o grupo, seleccione el campo período.
Elimine la última instancia de haga doble clic para insertar el campo y, a continuación, haga clic en Aceptar.
En el asistente, haga clic en Siguiente.
En la página siguiente del asistente, haga clic en el botón Fórmula situado junto al cuadro Nombre de datos adjuntos, a continuación, repita los pasos anteriores para crear la fórmula concat("Informe de ventas - ", periodo) y, finalmente, haga clic en Siguiente.
En la última página del asistente, escriba Envío de correo electrónico en el cuadro Especifique un nombre para esta conexión de datos y, a continuación, haga clic en Finalizar
Agregar la lógica para enviar el formulario según el estado de la conexión del equipo del usuario
En el modo de diseño de InfoPath, haga clic en Enviar opciones en el menú Herramientas.
En el cuadro de diálogo Enviar opciones, haga clic en Permitir a los usuarios enviar este formulario, seleccione Envío personalizado usando código de formulario, haga clic en Modificar código.
Añada las dos funciones siguientes bajo el controlador de eventos Submit:
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
Añada la siguiente instrucción if a la función de controlador de eventos FormEvents_Submit.
// 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
Comprobación del código
En el menú Depurar, haga clic en Iniciar depuración.
Rellene el formulario.
Inicie Microsoft Internet Explorer.
En Internet Explorer, haga clic en Trabajar sin conexión en el menú Archivo.
En InfoPath, haga clic en Enviar. Verá un mensaje que le notificará que el formulario se enviará como mensaje de correo electrónico.
Haga clic en Enviar. Verá un mensaje que le notifica que el formulario se ha enviado sin conexión y que se enviará cuando se conecte a la red.