Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El modelo de objetos de InfoPath proporciona la propiedad MachineOnlineState 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.
Agregar una conexión de datos que envíe el formulario como datos adjuntos a un mensaje de correo electrónico
Cree una plantilla de formulario de InfoPath mediante la plantilla En blanco (InfoPath Editor).
En el modo de diseño de InfoPath, haga clic en Conexiones de datos en la ficha Datos.
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, haga clic 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 Email Enviar en el cuadro Escribir 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 Opciones de envío en la ficha Datos.
En el cuadro de diálogo Opciones de envío, haga clic en Permitir a los usuarios enviar este formulario, seleccione Realizar una acción personalizada utilizando código y 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 email connection. DataConnectionCollection myDataConnections = this.DataConnections; EmailSubmitConnection submitConnection = (EmailSubmitConnection)myDataConnections["Email 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 email connection. Dim myDataConnections As DataConnectionCollection = _ Me.DataConnections Dim submitConnection As EmailSubmitConnection = _ DirectCast(myDataConnections("Email 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 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. Debería ver un mensaje que indica que el formulario se enviará como un 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.