Поделиться через


Практическое руководство. Работа с автономными решениями

Объектная модель InfoPath предоставляет свойство MachineOnlineState класса Application, которое позволяет коду формы проверять наличие подключения пользовательского компьютера к сети. Проверяя значение свойства MachineOnlineState, код формы может выполнять различные действия в зависимости от состояния подключения.

Использование свойства "MachineOnlineState"

В приведенном далее примере демонстрируется, как можно добавить в код формы логику, определяющую способ отправки формы на основе наличия или отсутствия подключения компьютера пользователя к сети.

В этом примере предполагается, что была создана форма для отправки отчета о продажах, содержащего поле период, указывающее год и месяц, по которому создан отчет. Также предполагается, что уже определено подключение к данным и создана логика для отправки отчета, когда пользователь подключен к сети.

Добавление подключения к данным, с помощью которого форма отправляется в качестве вложения сообщения электронной почты

  1. Создайте шаблон формы InfoPath с управляемым кодом.

  2. В режиме конструктора InfoPath выберите пункт Подключения данных в меню Сервис.

  3. В диалоговом окне Подключения данных нажмите кнопку Добавить.

  4. В мастере подключения данных щелкните Отправка данных и нажмите кнопку Далее.

  5. На следующей странице мастера щелкните В виде сообщения электронной почты и нажмите кнопку Далее.

  6. На следующей странице мастера введите адрес электронной почте в поле Кому.

  7. Чтобы объединить период продаж с текстом "Отчет о продажах", в поле Тема выполните следующие действия.

    1. Нажмите кнопку Формула рядом с полем Тема.

    2. В диалоговом окне Вставка формулы нажмите кнопку Вставить функцию.

    3. В диалоговом окне Вставка функции выберите вариант Текст в списке Категории, а затем дважды щелкните объединить в списке Функции.

    4. Замените первую строку дважды щелкните, чтобы вставить поле на следующий текст (включая одинарные кавычки): 'Отчет о продажах: '

    5. Дважды щелкните вторую строку дважды щелкните, чтобы вставить поле.

    6. В диалоговом окне Выбор поля или группы выберите поле период.

    7. Удалите последнюю строку дважды щелкните, чтобы вставить поле и нажмите кнопку ОК.

  8. В мастере нажмите кнопку Далее.

  9. На следующей странице мастера нажмите кнопку Формула рядом с полем Имя вложения, а затем повторите предыдущие действия для создания формулы concat("Отчет о продажах - ", период), а затем нажмите кнопку Далее.

  10. На последней странице мастера введите Отправка электронной почты в поле Введите имя подключения данных и нажмите кнопку Готово.

Добавление логики для отправки формы в зависимости от наличия или отсутствия подключения пользовательского компьютера к сети

  1. В режиме конструктора InfoPath выберите пункт Параметры отправки в меню Сервис.

  2. В диалоговом окне Параметры отправки щелкните Разрешить пользователям отправлять эту форму, выберите Пользовательская отправка с помощью кода формы и щелкните Редактировать код.

  3. Сразу после кода обработчика событий 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
    
  4. Добавьте следующий оператор if в функцию обработчика событий 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
    

Проверка кода

  1. В меню Отладка выберите пункт Начать отладку.

  2. Заполните форму.

  3. Запустите обозреватель Microsoft Internet Explorer.

  4. В обозревателе Internet Explorer выберите пункт Работать автономно в меню Файл.

  5. В приложении InfoPath щелкните Отправка. Должно появиться сообщение, что форма будет отправлена в виде сообщения электронной почты.

  6. Щелкните Отправить. Должно появиться сообщение о том, что форма отправляется в автономном режиме и будет отправлена при подключении к сети.