Compartir a través de


Cómo: Trabajar con soluciones sin conexión usando el modelo de objetos de InfoPath 2003

El modelo de objetos compatible con InfoPath 2003 proporciona la propiedad MachineOnlineState del objeto Application, que permite al código del formulario comprobar si el equipo del usuario está conectado a la red. El código del formulario puede realizar acciones distintas según el estado de la conexión.

Uso de la propiedad MachineOnlineState

En el ejemplo siguiente, se muestra cómo se puede agregar 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 archivo de datos adjuntos de un mensaje de correo electrónico

  1. Cree o abra una plantilla de formulario con código administrado de InfoPath.

  2. En el modo de diseño de InfoPath, en el menú Herramientas haga clic en Conexiones de datos.

  3. En el cuadro de diálogo Conexiones de datos, haga clic en Agregar.

  4. En el Asistente para la conexión de datos, haga clic en Enviar datos y, a continuación, en Siguiente.

  5. En la página siguiente del asistente, haga clic en Como mensaje de correo electrónico y, a continuación, en Siguiente.

  6. En la página siguiente del asistente, escriba su dirección de correo electrónico en el cuadro Para.

  7. 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:

    1. Haga clic en el botón Fórmula junto al cuadro Asunto.

    2. En el cuadro de diálogo Insertar una fórmula, haga clic en Insertar una función.

    3. 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, en la opción concat de la lista Funciones.

    4. Reemplace la primera instancia de haga doble clic para insertar el campo con el texto siguiente (incluyendo las comillas): 'Informe de ventas: '

    5. Haga doble clic en la segunda instancia de haga doble clic para insertar el campo.

    6. En el cuadro de diálogo Seleccionar una campo o grupo, seleccione el campo período.

    7. Elimine la última instancia de haga doble clic para insertar el campo y, a continuación, haga clic en Aceptar.

  8. En el asistente, haga clic en Siguiente.

  9. En la página siguiente del asistente, escriba 'Envío de correo electrónico' en el cuadro Introduzca un nombre para esta conexión de datos y, a continuación, haga clic en Finalizar.

Añadir la lógica para enviar el formulario según el estado de la conexión del equipo del usuario

  1. En el modo de diseño de InfoPath, en el menú Herramientas haga clic en Enviar formularios.

  2. En el cuadro de diálogo Enviar formularios, haga clic en Activar comandos y botones de envío y, a continuación, en el cuadro Enviar a, seleccione Envío personalizado usando código de formulario.

  3. Active la casilla Editar código del formulario y, a continuación, haga clic en Aceptar.

  4. Añada las dos funciones siguientes bajo el controlador de eventos OnSubmitRequest.

    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. Añada la siguiente instrucción if a la función de controlador de eventos OnSubmitRequest.

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

Probar el código

  1. En el Explorador de soluciones, haga clic en el proyecto con el botón secundario, seleccione Vista previa y, a continuación, haga clic en Predeterminada.

  2. Rellene el formulario.

  3. Inicie Microsoft Internet Explorer.

  4. En Internet Explorer, haga clic en Trabajar sin conexión en el menú Archivo.

  5. En InfoPath, haga clic en Enviar. Verá un mensaje que le notificará que el formulario se enviará como mensaje de correo electrónico.

  6. Haga clic en Enviar. Verá un mensaje que le notificará que el formulario se ha enviado sin conexión.