Практическое руководство. Работа с автономными решениями
Объектная модель InfoPath предоставляет свойство MachineOnlineState класса Application, которое позволяет коду формы проверять наличие подключения пользовательского компьютера к сети. Проверяя значение свойства MachineOnlineState, код формы может выполнять различные действия в зависимости от состояния подключения.
Использование свойства "MachineOnlineState"
В приведенном далее примере демонстрируется, как можно добавить в код формы логику, определяющую способ отправки формы на основе наличия или отсутствия подключения компьютера пользователя к сети.
В этом примере предполагается, что была создана форма для отправки отчета о продажах, содержащего поле период, указывающее год и месяц, по которому создан отчет. Также предполагается, что уже определено подключение к данным и создана логика для отправки отчета, когда пользователь подключен к сети.
Добавление подключения к данным, с помощью которого форма отправляется в качестве вложения сообщения электронной почты
Создайте шаблон формы InfoPath с управляемым кодом.
В режиме конструктора InfoPath выберите пункт Подключения данных в меню Сервис.
В диалоговом окне Подключения данных нажмите кнопку Добавить.
В мастере подключения данных щелкните Отправка данных и нажмите кнопку Далее.
На следующей странице мастера щелкните В виде сообщения электронной почты и нажмите кнопку Далее.
На следующей странице мастера введите адрес электронной почте в поле Кому.
Чтобы объединить период продаж с текстом "Отчет о продажах", в поле Тема выполните следующие действия.
Нажмите кнопку Формула рядом с полем Тема.
В диалоговом окне Вставка формулы нажмите кнопку Вставить функцию.
В диалоговом окне Вставка функции выберите вариант Текст в списке Категории, а затем дважды щелкните объединить в списке Функции.
Замените первую строку дважды щелкните, чтобы вставить поле на следующий текст (включая одинарные кавычки): 'Отчет о продажах: '
Дважды щелкните вторую строку дважды щелкните, чтобы вставить поле.
В диалоговом окне Выбор поля или группы выберите поле период.
Удалите последнюю строку дважды щелкните, чтобы вставить поле и нажмите кнопку ОК.
В мастере нажмите кнопку Далее.
На следующей странице мастера нажмите кнопку Формула рядом с полем Имя вложения, а затем повторите предыдущие действия для создания формулы concat("Отчет о продажах - ", период), а затем нажмите кнопку Далее.
На последней странице мастера введите Отправка электронной почты в поле Введите имя подключения данных и нажмите кнопку Готово.
Добавление логики для отправки формы в зависимости от наличия или отсутствия подключения пользовательского компьютера к сети
В режиме конструктора InfoPath выберите пункт Параметры отправки в меню Сервис.
В диалоговом окне Параметры отправки щелкните Разрешить пользователям отправлять эту форму, выберите Пользовательская отправка с помощью кода формы и щелкните Редактировать код.
Сразу после кода обработчика событий 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
Добавьте следующий оператор 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
Проверка кода
В меню Отладка выберите пункт Начать отладку.
Заполните форму.
Запустите обозреватель Microsoft Internet Explorer.
В обозревателе Internet Explorer выберите пункт Работать автономно в меню Файл.
В приложении InfoPath щелкните Отправка. Должно появиться сообщение, что форма будет отправлена в виде сообщения электронной почты.
Щелкните Отправить. Должно появиться сообщение о том, что форма отправляется в автономном режиме и будет отправлена при подключении к сети.