Каждый разработчик знает, что заставить две противоречивые системы мирно сосущестовать - очень распространённая задача. Независимо от размера, многие IT-подразделения не принимают за стандарт одну платформу для разработки. Слияния и поглощения компаний часто привносят различные элементы, приводя к противоречивости систем, поскольку более старые приложения вынуждены сосуществовать с новыми платформами. Продукты, такие как IBM Lotus Domino предоставляют мощную платформу для разработки корпоративных приложений, но как многим корпоративным программным продуктам, им необходимо взаимодействовать с другими системами.
Эта статья исследует интеграцию Lotus Domino с платформой разработки Microsoft .NET; в частности обсуждаются Lotus Domino 7, Microsoft .NET Framework V1.1 и Microsoft Visual Studio .NET 2003. Данная статья предполагает, что вы являетесь опытным разработчиком приложений для Notes/Domino, знакомым с LotusScript и с элементами дизайна Web-сервисов Domino, а также, что у вас имеется представление о Microsoft .NET Framework.
ЗАМЕЧАНИЕ: Решение, описанное в этой статье, работает с Microsoft .NET Framework V2.0 и V1.1.
Программная модель: .NET и COM
Lotus Domino - это отличная платформа для того, чтобы работать с данными предприятия. Вы можете легко обращаться к источникам данных не-Domino через простой интерфейс взаимосвязи с открытыми базами данных (Open Database Connectivity - ODBC) или использовать мощные функциональные возможности, которые обеспечивают IBM Lotus Enterprise Integrator и Domino Enterprise Connection Services. Однако иногда вам может потребоваться обратиться к Lotus Domino из других приложений. К счастью, вы можете сделать видимой среду Domino для других приложений с помощью объектной модели программных компонентов (COM), которая позволяет внешним приложениям легко работать с Lotus Domino посредством различных объектов и классов, видимых через COM. Хорошим примером является интеграция функциональности Lotus Domino в приложение, построенное с помощью .NET Framework.
COM - это более старая технология, но .NET предоставляет вызываемые оболочки чтобы позволить .NET и COM взаимодействовать. С помощью вызываемой оболочки шага выполнения вы можете использовать компонент COM внутри .NET. Это звучит трудновато для понимания, но дело упрощается при помощи инструмента разработки, такого как Microsoft Visual Studio. И хотя вы должны создавать оболочки для COM-компонентов для их использования в приложении .NET через interop, Visual Studio .NET создаёт их автоматически, когда вы выполняете следующие шаги:
- В Visual Studio выбираете Проект (Project) - Добавить Ссылку (Add Reference).
- Выбираете закладку COM в диалоговом окне Добавить Ссылку (Add Reference), а затем дважды жмёте на подходящий файл с Библиотекой Типов.
- Нажимаете OK для добавления ссылки.
В этот момент Visual Studio .NET конвертирует объекты и члены файла с Библиотекой Типов COM в эквивалентные конструкции .NET. Когда конструкции .NET сгенерированы, вы можете использовать их классы для создания объектов и для вызова членов, как если бы СOM-объекты и члены были истинными классами и членами .NET. Также вы можете повернуть этот процесс в обратном направлении и использовать конструкций .NET в приложении, основанном на COM.
ЗАМЕЧАНИЕ: Если вы не используете Visual Studio .NET, пакет разработчика .NET Framework SDK предоставляет утилиту импорта Библиотеки Типов (Type Library Importer - tlbimp.exe) - запускаемый из командной строки инструмент, конвертирующий классы и интерфейсы, содержащиеся в Библиотеке Типов COM в метаданные. Эта утилита автоматически создаёт конструкцию interop и пространство имён для информации о типе.
Проиллюстрировать этот подход можно, сделав объекты Lotus Domino доступными в решении на Visual Studio. Рисунок 1 показывает диалоговое окно Добавления Ссылки (Add Reference) с выделенными Объектами Lotus Domino.
Рисунок 1. Диалог Добавления Ссылки
Начиная с Lotus Notes и Domino 5.02b, объекты Domino доступны через COM при помощи библиотеки Lotus Domino Objects, которая включена в состав инсталляции как сервера Domino так и одного из клиентов Notes (IBM Lotus Domino Designer, Lotus Domino Administrator или Lotus Notes). Ищите domobj.tlb в основном инсталляционном каталоге. Lotus Domino 6.x включает версию 1.1 объектов Lotus Domino; Lotus Domino 7 включает версию 1.2.
Хотя Lotus Domino должен быть установлен, необязательно, чтобы он был запущен. Ещё один важный момент заключается в том, что при получении доступа к Lotus Domino через COM доступны только внутренние классы, поэтому классы пользовательских интерфейсов(UI) недоступны.
Получение доступа к ресурсам Lotus Domino посредством COM похоже на использование языка программирования Java или LotusScript в пределах клиента Lotus Domino Designer; любое и каждое взаимодействие с Lotus Domino начинается с сеанса. Библиотека Lotus Domino Objects включает все необходимые классы для работы с Lotus Domino через COM, а объекты COM будут знакомы любому разработчику, не имевшему дело с объектной моделью Domino посредством языка LotusScript или Java.
В интегрированную среду разработки (IDE) Visual Studio включена функция IntelliSense, которая помогает вам работать с объектами COM, предоставляя контекстно-зависимую справку и автоматическое завершение слов кода когда вы набираете их, тем самым сокращая количество орфографических ошибок.
Первый пример строит .NET приложение Windows, которое отыскивает данные в Domino Directory и использует Lotus Domino, чтобы послать почтовые сообщения сообщений (см. рисунок 2). .NET приложение Windows использует следующие элементы .NET:
- Элемент управления ComboBox, чтобы выбрать адресата и заполнить поля значениями из представления Domino Directory
- Элемент управления TextBox, чтобы ввести тему сообщения почты
- Элемент управления RichTextBox, для тела сообщения почты
- Элемент управления Label, чтобы сообщить, отправлено ли сообщение или обнаружена ошибка
- Элемент управления Button, чтобы послать или попытаться послать фактическое сообщение почты
Рисунок 2. Отправка электронной почты из Lotus Domino с помощью .NET приложения Windows
Листинг 1 показывает большую часть прикладного кода (сгенерированный Visual Studio код приложения пропущен). Когда вы щёлкаете кнопку Send, вызывается метод btnSend_Click. Этот метод создаёт объекты NotesSession, NotesDatabase, NotesView и NotesDocument, которые, в свою очередь, используются, чтобы создать и отправить сообщение.
Когда приложение загружено, вызывается метод Form_Load. Он использует объекты NotesSession, NotesDatabase, NotesView и NotesDocument, чтобы заполнить ComboBox. Отдельные значения из документов в представлении добавляются к элементу управления ComboBox. Чтобы помочь в доставке сообщений к выбранным именам людей добавляется доменное имя.
Листинг 1. .NET приложение Windows
Private Sub btnSend_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs)Handles btnSend.Click
Try
Dim ns As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
If Not (ns Is Nothing) Then
ns.Initialize("password")
db = ns.GetDatabase("ServerName//Domain", "names.nsf", False)
If Not (db Is Nothing) Then
doc = db.CreateDocument()
doc.ReplaceItemValue("Form", "Memo")
doc.ReplaceItemValue("SendTo", cboNames.SelectedText + "//Domain")
doc.ReplaceItemValue("Subject", txtSubject.Text)
Dim rt As NotesRichTextItem
rt = doc.CreateRichTextItem("Body")
rt.AppendText(rtbBody.Text)
doc.Send(False)
rt = Nothing
doc = Nothing
lblMessage.Text = "Message Sent."
End If
db = Nothing
ns = Nothing
End If
Catch ex As Exception
lblMessage.Text = "Error: " + ex.Message.ToString()
End Try
End Sub |
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs)Handles MyBase.Load
Dim s As New NotesSession
s.Initialize()
Dim db As NotesDatabase
Dim vw As NotesView
Dim doc As NotesDocument
db = s.GetDatabase("ServerName//Domain", "names.nsf", False)
If Not (db Is Nothing) Then
vw = db.GetView("_People")
doc = vw.GetFirstDocument()
While Not (doc Is Nothing)
cboNames.Items.Add(doc.GetFirstItem("FirstName").Text + " " +
doc.GetFirstItem("LastName").Text)
doc = vw.GetNextDocument(doc)
End While
End If
End Sub |
Чтобы послать почтовое сообщение, приложение делает следующее:
- Создаёт экземпляр объекта NotesSession.
- Создаёт экземпляр объекта NotesDatabase с указанной базой данных сервера.
- Создаёт новый объект NotesDocument через объект NotesDatabase.
- Заполняет области в документе значениями из формы.
- Создаёт новый объект NotesRichTextItem через объект NotesDocument для тела почтового сообщения.
- Добавляет текст из формы к объекту NotesRichTextItem.
- Отправляет почтовое сообщение через метод NotesDocument Send.
- Настраивает правильное отображение элемента управления Label, если соожбщение отправлено. (В противном случае, если встречается исключение, отображается сообщение об ошибке. Операция в целом заключается в блок попытки.)
Использование COM не ограничивается приложениями Windows. Вы можете использовать её в Web, а также в других типах приложений.
Затем давайте остановимся на связи с Lotus Domino с использованием других средств, таких как Web-сервисы и XML.
Хотя библиотека Lotus Domino Objects обеспечивает отличный способ обращения к ресурсам Domino из приложений не Domino, этот подход не является единственным. Другой способ интеграции этих двух систем включает Web-стандарты и потребление Web-сервиса Domino в коде .NET.
В Lotus Domino 7 был добавлен модуль Web-сервиса. Web-ссервисы, на основе Domino потребляются как любые стандартные Web-сервисы. Вы используете Язык Описания Web-ссервисов (Web Services Description Language - WSDL), чтобы обнаружить доступные методы в Web-сервисе. WSDL для Web-сервисов на основе Domino доступен через URL Web-сервисов, добавляемый командой ?wsdl. Например, следующий URL отыскивает WSDL для Web-сервиса, названной testws:
http://localhost/dominodatabase.nsf/testws?wsdl
Интегрированная среда разработки Visual Studio .NET облегчает использование Web-сервиса в проекте. Для этого добавьте к проекту Web-ссылку, щёлкнув правой кнопкой на проекте, а затем выбрав Добавить Web-ссылку (Add Web Reference), как это показано на рисунке 3.
Рисунок 3. Добавление Web-ссылки к проекту
Другая функция Domino, которую вы можете использовать для интеграции, - это XML. К XML для общих элементов Domino легко обращаться. Хороший пример - это работа с представлением Domino. XML в представлении легко доступен с помощью URL и команды ?ReadViewEntries. Например, используя следующий URL, вы можете обратиться к XML для представления _People в Domino Directory 7:
http://domain/names.nsf/_People?ReadViewEntries
Листинг 2 показывает образец XML, сгенерированного с использованием команды ?ReadViewEntries для каталога сервере Lotus Domino 7.
Листинг 2. XML, сгенерированный после использования команды ?ReadViewEntries
<?xml version="1.0" encoding="UTF-8" ?>
<viewentries toplevelentries="3">
<viewentry position="1" unid="A819181402AC862F85257199007D02BC"
noteid="1342" siblings="3">
<entrydata columnnumber="0" name="$18">
<number>0</number>
</entrydata>
<entrydata columnnumber="1" name="$17">
<text>Patton , Tony</text>
</entrydata>
<entrydata columnnumber="2" name="$12">
<text />
</entrydata>
<entrydata columnnumber="3" name="CompanyName">
<text />
</entrydata>
<entrydata columnnumber="4" name="$16">
<text>Tony Patton/Patton@Test</text>
</entrydata>
<entrydata columnnumber="5" name="$21">
<text>TestServer/Test</text>
</entrydata>
</viewentry>
</viewentries> |
Вы можете объединить этот сгенерированный XML с поддержкой XML в .NET, чтобы обмениваться или использовать данные Domino. Например, вы можете привязать сгенерированный XML к элементу управления данными Microsoft ASP.NET. Страница ASP.NET, показанная в Листинге 3, использует XML из представления _People для заполнения элемента управления DropDownList.
Листинг 3. Страница ASP.NET, использующая XML из представления _People
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.XML" %>
<%@ Page Language="vb" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Populate DropDownList via XML</title>
<script language="vb" runat="server">
Private Sub Page_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs)
If Not (IsPostBack) Then
Try
GetData()
Catch ex As Exception
Response.Write(ex.ToString())
End Try
End If
End Sub
Public Sub GetData()
Dim strResult As String
Dim objResponse As WebResponse
Dim objRequest As WebRequest
objRequest = _
HttpWebRequest.Create("http://192.168.1.103/names.nsf/
_People?ReadViewEntries")
objResponse = objRequest.GetResponse()
Dim sr As StreamReader
sr = New StreamReader(objResponse.GetResponseStream())
strResult = sr.ReadToEnd()
Dim doc As New XmlDocument
sr.Close()
doc.LoadXml(strResult)
Dim nodes As XmlNodeList
nodes = _
doc.SelectNodes("viewentries/viewentry/entrydata
_[@columnnumber=""1""]")
ddlNames.DataSource = nodes
ddlNames.DataTextField = "innertext"
ddlNames.DataValueField = "innertext"
ddlNames.DataBind()
End Sub
</script>
</head>
<body>
<form id="frmPopulateControlViaXML" method="post" runat="server">
<asp:DropDownList id="ddlNames" runat="server" Width="336px" />
</form>
</body>
</html> |
Этот код - стандартная страница ASP.NET (без отделённого кода (codebehind)), которая использует Microsoft Visual Basic .NET. В сущности, код делает следующее:
- Загружает XML из URL представления Domino и из команды ?ReadViewEntries в объект .NET XmlDocument (из пространства имён System.XML).
- Создаёт экземпляр объекта XmlNodeList из XmlDocument и выражения XPath для отбора определённых элементов из XML. (Этот код интересуют только элементы входных данных в первой колонке, то есть атрибут columnnumber=1.)
- Использует XmlNodeList как источник данных для элемента управления DropDownList.
- Вызывает привязанный к данным метод элемента управления DropDownList, чтобы привязать данные к элементу управления.
Результаты видны на Web-странице, и вы можете выбрать имя из списка.
Первый шаг использует пространства имён .NET System.Net и System.IO для работы с сетевыми (Интернет) запросами и с возвращаемыми данными. Страница использует объект WebRequest для вызова соответствующего URL, в то время как объект WebResponse перехватывает ответ.
Вы объединяете свойство ResponseStream объекта WebResponse с объектом StreamReader для прочтения XML, возвращаемого на Web-запрос. В свою очередь, вы используете XML для наполнения и создания экземпляра нового объекта XMLDocument. Индивидуальные узлы выбираются из объекта XMLDocument и хранятся в объекте XMLNodeList. Используя выражение XPath, вы можете выбрать соответствующие узлы.
Вы используете коллекцию выбранных узлов, чтобы наполнить элемент управления данными индивидуальными колонками (внутренним текстом), назначенными как значение, отображаемое в элементе управления, а также возвращаемое значение, когда пользователь выбирает индивидуальный элемент списка. Все операции, относящиеся к извлечению XML и к наполнению элемента управления данными, находятся в методе GetData, который вызывается в событии Page_Load Web-формы ASP.NET. Вы хотите наполнять элемент управления, только когда старница изначально запрошена, поэтому вы используете свойство страницы IsPostBack, но не тогда, когда она обновилась или перезагрузилась. Наконец, страница использует блок повторных попыток, чтобы перехватить любые непредвиденные ошибки с отображением описания ошибки на странице. Рисунок 4 показывает страницу ASP.NET.
Рисунок 4. Элемент управления DropDownList ASP.NET, наполненный из XML представления Domino
Для демонстрационных целей пример почтового приложения Domino был объединён с Web-сервисом Domino для получения и отображения данных Domino через вызовы Web-сервиса. Однако перед тем как рассматривать использование Web-сервиса в приложении .NET, вы сначала должны изучить Web-сервис Domino.
Использование Web-сервиса Lotus Domino для получения данных Domino
Web-сервис устроен просто. Он принимает имя пользователя (за фамилией через запятую следует имя - формат, использованный в предыдущем примере) и извлекает ассоциированные значения для этого пользователя из каталога Domino Directory. Сервис написан на LotusScript.
Образец сервиса находится в классе GetUserInfo, который включает следующие публичные методы:
GetPhoneNumber: Возвращает телефон офиса для переданного ему пользователя
GetAddress: Возвращает адрес офиса для переданного ему пользователя
GetCity: Возвращает город, где находится офис переданного ему пользователя
GetState: Возвращает штат, где находится офис переданного ему пользователя
GetZip: Возвращает почтовый индекс офиса переданного ему пользователя
GetCountry: Возвращает название страны, где находится офис переданного ему пользователя
Все методы принимают один строковый параметр (имя пользователя) и возвращают строковое значение. Объекты NotesSession, NotesDatabase и NotesView определяются при их инициализации, происходящей в новом блоке класса. Листинг 4 показывает код Web-сервиса.
Листинг 4. Web-сервис Domino
%INCLUDE "lsxsd.lss"
Dim session As NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
Dim doc As NotesDocument
Public Class GetUserInfo
Sub New
Set s = New NotesSession
Set db = s.CurrentDatabase
Set vw = db.GetView("(PeopleLookup)")
End Sub
Public Function GetPhoneNumber(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetPhoneNumber = doc.GetItemValue("OfficePhoneNumber")(0)
Else
GetPhoneNumber = ""
End If
End Function
Public Function GetCity(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetCity = doc.GetItemValue("OfficeCity")(0)
Else
GetCity = ""
End If
End Function
Public Function GetState(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetState = doc.GetItemValue("OfficeState")(0)
Else
GetState = ""
End If
End Function
Public Function GetAddress(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetAddress = doc.GetItemValue("OfficeStreetAddress")(0)
Else
GetAddress = ""
End If
End Function
Public Function GetZip(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetZip = doc.GetItemValue("OfficeZip")(0)
Else
GetZip = ""
End If
End Function
Public Function GetCountry(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetCountry = doc.GetItemValue("OfficeCountry")(0)
Else
GetCountry = ""
End If
End Function
Public Function GetFullName(uName As String) As String
Set doc = vw.GetDocumentByKey(uName)
If Not (doc Is Nothing) Then
GetFullName = doc.GetItemValue("FirstName")(0) + " " + _
doc.GetItemValue("LastName")(0)
Else
GetFullName = ""
End If
End Function
End Class |
Вы можете легко просмотреть текст на языке описания Web-сервисов (WSDL) для данного Web-сервиса, набрав его URL в вашем обозревателе: http://dominoserver/names.nsf/GerUserInfo?wsdl.
Замечание: Новое представление было добавлено для использования в поисках внутри каждого метода. Это скрытое представление, называемое PeopleLookup, показывает только документы, созданные с помощью формы Person с одной колонкой, заполненной по следующей формуле:
@Trim(@Subset(LastName;1))+@If(Firstname !="";" ,
"+@Trim(@Subset(FirstName;1));"")+@If(MiddleInitial !="";"
"+@Trim(@Subset(MiddleInitial;1));"")
Вы можете использовать этот Web-сервис в приложении ASP.NET для заполнения полей Web-страницы значениями данных, взятыми из вызовов Web-сервисов. Сначала добавьте ссылку на Web-сервис в приложение .NET. Рисунок 5 показывает добавленную Web-ссылку, а также методы, перечисленные после того, как пользователь вводит адрес сервиса и щёлкает на Go.
Рисунок 5. Добавление ссылки на Web-сервис в приложение .NET
Вы вводите имя, используемое для доступа к Web-сервису из кода в поле имени Web-ссылки, в диалоговом окне Add Web Reference (Добавить Web-ссылку). После добавления Web-ссылки код предельно прост. Листинг 5 показывает код, в котором идущая в начале страница ASP.NET сопровождается своим файлом отделённого кода.
Листинг 5. Web-форма ASP.NET, использующая Web-сервис Domino
<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="DominoTest.aspx.vb" Inherits="DominoIntegration.Test2"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Domino Web Service Demo</title>
</head>
<body>
<form id="frmDominoIntegration" method="post" runat="server">
<asp:Label id="lblSelect" runat="server" Width="144px">
Select Name:</asp:Label>
<asp:DropDownList id="ddlNames" runat="server"
OnSelectedIndexChanged="ddlNames_SelectedIndexChanged"
AutoPostBack="True" Width="336px"></asp:DropDownList><br>
<asp:Label id="lblName" runat="server" Width="144px">
Address:</asp:Label>
<asp:TextBox id="txtFullName" runat="server" Width="360px" /><br>
<asp:Label id="lblAddress" runat="server" width="144px">
Address:</asp:Label>
<asp:TextBox id="txtAddress" runat="server" Width="360px" /><br>
<asp:Label id="lblCityState" runat="server" Width="144px">
City, State</asp:Label>
<asp:TextBox id="txtCity" runat="server" Width="264px" /><br>
<asp:Label id="lblComma" runat="server" Width="8px" Font-Bold="True">
,</asp:Label>
<asp:TextBox id="txtState" runat="server" Width="80px" /><br>
<asp:Label id="lblZip" runat="server" Width="144px">
Zip Code:</asp:Label>
<asp:TextBox id="txtZip" runat="server" Width="200px" /><br>
<asp:Label id="lblCountry" runat="server" Width="144px">
Country:</asp:Label>
<asp:TextBox id="txtCountry" runat="server" Width="200px" /><br>
<asp:Label id="lblPhone" runat="server" Width="144px">
Phone:</asp:Label>
<asp:TextBox id="txtPhoneNumber" runat="server" Width="200px" /><br>
</form>
</body>
</html> |
Листинг 6 показывает файл отделённого кода для Web-формы ASP.NET, написанный на Visual Basic.
Листинг 6. Код на Visual Basic .NET для Web-формы ASP.NET
Imports System.Net
Imports System.IO
Imports System.Xml
Public Class DominoIntegration
Inherits System.Web.UI.Page
Protected WithEvents ddlNames As DropDownList
Protected WithEvents lblSelect As Label
Protected WithEvents txtFullName As TextBox
Protected WithEvents lblName As Label
Protected WithEvents lblPhone As Label
Protected WithEvents lblCountry As Label
Protected WithEvents txtCountry As TextBox
Protected WithEvents lblZip As Label
Protected WithEvents lblCityState As Label
Protected WithEvents txtZip As TextBox
Protected WithEvents txtState As TextBox
Protected WithEvents txtCity As TextBox
Protected WithEvents txtPhoneNumber As TextBox
Protected WithEvents txtAddress As TextBox
Protected WithEvents lblAddress As Label
Protected WithEvents lblComma As Label
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Init
InitializeComponent()
End Sub
Public Sub Page_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs)Handles MyBase.Load
If Not (Me.IsPostBack) Then
Try
GetData()
Catch ex As Exception
Response.Write(ex.ToString())
End Try
End If
End Sub
Public Sub GetData()
Dim strResult As String
Dim objResponse As WebResponse
Dim objRequest As WebRequest
objRequest = System.Net.HttpWebRequest.Create(
"http://192.168.1.103/names.nsf/_People?ReadViewEntries")
objResponse = objRequest.GetResponse()
Dim sr As System.IO.StreamReader
sr = New StreamReader(objResponse.GetResponseStream())
strResult = sr.ReadToEnd()
Dim doc As New XmlDocument
sr.Close()
doc.LoadXml(strResult)
Dim nodes As XmlNodeList
nodes = doc.SelectNodes("viewentries/viewentry/entrydata
_[@columnnumber=""1""]")
ddlNames.DataSource = nodes
ddlNames.DataTextField = "innertext"
ddlNames.DataValueField = "innertext"
ddlNames.DataBind()
End Sub
Public Sub ddlNames_SelectedIndexChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs)
Dim ws As New WebReference.GetUserInfoService
txtFullName.Text = ws.GETFULLNAME(ddlNames.SelectedValue.ToString())
txtAddress.Text = ws.GETADDRESS(ddlNames.SelectedValue.ToString())
txtCity.Text = ws.GETCITY(ddlNames.SelectedValue.ToString())
txtState.Text = ws.GETSTATE(ddlNames.SelectedValue.ToString())
txtZip.Text = ws.GETZIP(ddlNames.SelectedValue.ToString())
txtCountry.Text = ws.GETCOUNTRY(ddlNames.SelectedValue.ToString())
txtPhoneNumber.Text =
ws.GETPHONENUMBER(ddlNames.SelectedValue.ToString())
End Sub
End Class |
Web-форма включает метод GetData, как описано в Листинге 3, но теперь у него есть текстовые поля для приёма данных, получаемых через вызовы Web-сервиса. Web-сервис вызывается, когда производится выбор в элементе управления DropDownList. Когда пользователь выбирает значение из списка, событие SelectedIndex элемента управления вызывается автоматически (Свойство AutoPostBack элемента управления устанавливается в True).
Выбранное из элемента управления значение передаётся Web-сервису, чтобы получить каждый фрагмент данных (таких как адрес и город) через отдельные вызовы. В коде используется объект WebReference, добавленный из диалогового окнаe Add Web Reference для доступа к Web-сервису.
Интеграция противоречивых систем - обычная задача для разработчиков на предприятиях. Одна из таких попыток - это смешивание Lotus Domino с платформой Microsoft .NET. Вы можете осуществить эту интеграцию любым из предложенных способов: используя технологию COM, а также XML и доступные Web-сервисы. Эти опции позволяют легко соединять IT ресурсы, для того чтобы удовлетворять нужды вашего бизнеса.
Научиться
- Оригинальная статья "Using IBM Lotus Domino in a Microsoft .NET application"
- Статья о Lotus на developerWorks "Общие основы: доступ COM к объектам Domino (Common ground: COM access to Domino objects)"
- Статья о Lotus на developerWorks "Web-сервисы Lotus Notes/Domino 7"
-
Разделы SOA и Web-сервисов на developerWorks Россия
-
Раздел XML на developerWorks Россия
-
Центр разработчиков Microsoft .NET Framework
-
Сайт Microsoft COM
Получить продукты и технологии
-
Загрузите пробную версию Lotus Notes с developerWorks.
-
Загрузите пробную версию Lotus Notes с developerWorks.
-
Загрузите Microsoft .NET Framework SDK.
-
Загрузите утилиту импорта Библиотеки Типов.
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Просмотрите блоги на developerWorks и присоединяйтесь к сообществу developerWorks.
Тони Пэттон (Tony Patton) - консультант из Луизвилля, штат Кентуки. Он работает с различными технологиями, включая Lotus Notes/Domino, Java-технологию и Microsoft .NET. Он является автором двух книг, посвященных разработке Lotus Notes/Domino Практика LotusScript (Practical LotusScript) и Разработка для Domino с помощью Java (Domino development with Java), а также автором еженедельных колонок на CNet.com, посвященных .NET и Web-разработкам. Вы можете связаться с Тони по адресу aspatton@bellsouth.net.