Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Использование IBM Lotus Domino в приложении Microsoft .NET

Тони Пэттон, консультант, Uniserve Communications Corporation
Тони Пэттон (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.

Описание:  Инструментарии IBM Lotus Domino и Microsoft основаны на стандартах, которые разрешают взаимодействие этих двух систем. Эта статья охватывает методы и подходы, которые вы можете использовать для интеграции Lotus Domino и Microsoft .NET, включая объектную модель программных компонентов (Component Object Model - COM)и объекты Lotus Domino, Web-сервисы и XML.

Дата:  30.11.2006
Уровень сложности:  сложный
Активность:  1681 просмотров
Комментарии:  


Каждый разработчик знает, что заставить две противоречивые системы мирно сосущестовать - очень распространённая задача. Независимо от размера, многие 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 создаёт их автоматически, когда вы выполняете следующие шаги:

  1. В Visual Studio выбираете Проект (Project) - Добавить Ссылку (Add Reference).
  2. Выбираете закладку COM в диалоговом окне Добавить Ссылку (Add Reference), а затем дважды жмёте на подходящий файл с Библиотекой Типов.
  3. Нажимаете 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 Domino

Начиная с 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) недоступны.

Почтовое приложение Domino

Получение доступа к ресурсам 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
Отправка электронной почты из Lotus Domino с помощью .NET

Листинг 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

Чтобы послать почтовое сообщение, приложение делает следующее:

  1. Создаёт экземпляр объекта NotesSession.
  2. Создаёт экземпляр объекта NotesDatabase с указанной базой данных сервера.
  3. Создаёт новый объект NotesDocument через объект NotesDatabase.
  4. Заполняет области в документе значениями из формы.
  5. Создаёт новый объект NotesRichTextItem через объект NotesDocument для тела почтового сообщения.
  6. Добавляет текст из формы к объекту NotesRichTextItem.
  7. Отправляет почтовое сообщение через метод NotesDocument Send.
  8. Настраивает правильное отображение элемента управления Label, если соожбщение отправлено. (В противном случае, если встречается исключение, отображается сообщение об ошибке. Операция в целом заключается в блок попытки.)

Использование COM не ограничивается приложениями Windows. Вы можете использовать её в Web, а также в других типах приложений.

Затем давайте остановимся на связи с Lotus Domino с использованием других средств, таких как Web-сервисы и XML.


Web-сервисы Domino

Хотя библиотека 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-ссылки к проекту
Добавление  Web-ссылки к проекту

Поддержка XML в Domino

Другая функция 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. В сущности, код делает следующее:

  1. Загружает XML из URL представления Domino и из команды ?ReadViewEntries в объект .NET XmlDocument (из пространства имён System.XML).
  2. Создаёт экземпляр объекта XmlNodeList из XmlDocument и выражения XPath для отбора определённых элементов из XML. (Этот код интересуют только элементы входных данных в первой колонке, то есть атрибут columnnumber=1.)
  3. Использует XmlNodeList как источник данных для элемента управления DropDownList.
  4. Вызывает привязанный к данным метод элемента управления 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
Элемент управления DropDownList ASP.NET, наполненный из XML представления Domino

Для демонстрационных целей пример почтового приложения Domino был объединён с Web-сервисом Domino для получения и отображения данных Domino через вызовы Web-сервиса. Однако перед тем как рассматривать использование Web-сервиса в приложении .NET, вы сначала должны изучить Web-сервис Domino.


Использование Web-сервиса Lotus Domino для получения данных Domino

Вы не знакомы с Web-сервисами Lotus Domino?

Если вы не знакомы с Web-сервисами Domino, обратитесь к статье о Lotus на developerWorks "Web-сервисы Lotus Notes/Domino 7." Она даёт хорошие базовые знания, которые включают следующие основы программирования Web-сервисов на LotusScript:
  • Определение класса для кода реализации. (Этот класс должен стать классом PortType, названным в закладке Basics окна свойств, и он должен быть общедоступным.)
  • Внутри класса определение процедуры (функции, подпрограммы или метода) для каждой операции в Web-сервисе. (Эти процедуры должны быть общедоступными.)
  • Использование lsxsd.lss.
  • Инициализация NotesSession, если происходит обращение к библиотеке Lotus Domino Objects. (Лучше всего это делается в новом блоке.)

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));"")



Приложение ASP.NET

Вы можете использовать этот Web-сервис в приложении ASP.NET для заполнения полей Web-страницы значениями данных, взятыми из вызовов Web-сервисов. Сначала добавьте ссылку на Web-сервис в приложение .NET. Рисунок 5 показывает добавленную Web-ссылку, а также методы, перечисленные после того, как пользователь вводит адрес сервиса и щёлкает на Go.


Рисунок 5. Добавление ссылки на Web-сервис в приложение .NET
Добавление ссылки на 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 ресурсы, для того чтобы удовлетворять нужды вашего бизнеса.


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Тони Пэттон (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.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus
ArticleID=180621
ArticleTitle=Использование IBM Lotus Domino в приложении Microsoft .NET
publish-date=11302006
author1-email=aspatton@bellsouth.net
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).