Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - Web Services »

Обсудить на форуме Обсудить на форуме

Настройка секции задач Research в Microsoft Office 2003
Прочитав эту статью, вы узнаете, как оптимизировать секцию задач Research в Office 2003.

Аннотация

Прочитав эту статью, вы узнаете, как оптимизировать секцию задач Research в Office 2003.

Содержание

Введение
Прежде чем начать
Анатомия Web-сервиса в секции задач Research
Функция Registration
Функция Query
Регистрация и тестирование Web-сервиса
Как узнать, что ищет пользователь
Вставка данных в документ пользователя
Резюме

Введение

Благодаря новинке Microsoft® Office 2003 - секции задач (task pane) Research, доступной в Microsoft Word 2003, Microsoft Excel 2003 и Microsoft PowerPoint 2003, - пользователи могут искать данные в локальных и удаленных источниках прямо из этих программ. Некоторые ресурсы включены по умолчанию. Так, пользователи Office 2003 могут запрашивать такие справочники, как Encarta World Dictionary, а также онлайновые ресурсы, например биржевые котировки.

Большинство ресурсов, доступных из Office 2003, в действительности являются Web-сервисами. Создав Web-сервис, совместимый с секцией задач Research (так называемый сервис Research), вы откроете пользователям доступ к корпоративным источникам данных прямо из приложений Office 2003, где эти данные скорее всего и понадобятся.

В этой статье я расскажу о создании сервиса Research. Это позволит вам разрабатывать собственные решения, поддерживающие более сложные способы поиска и представления данных и способные, например:

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

Прежде чем начать

Чтобы поэкспериментировать с этими новыми средствами, вы должны установить:

  • Microsoft Office 2003;
  • Microsoft .NET Framework 1.0;
  • Internet Information Services (IIS) 5.0;
  • Microsoft Visual Studio® .NET 2002 (VS .NET).

Анатомия Web-сервиса в секции задач Research

Как и все Web-сервисы, сервис Research является приложением, использующим открытые стандарты (вроде XML и SOAP) для взаимодействия с клиентами по базовым протоколам Интернета. У Web-сервиса нет собственного UI, он просто получает от клиента XML-документ (в данном случае - от секции задач Research в Office 2003) и отвечает на него передачей другого XML-документа. Клиент отвечает за передачу "понятного" сервису XML-документа и за разбор документа, возвращенного сервисом, для отображения его пользователю или передачи приложению. Если в роли клиента выступает секция Research, она автоматически отправляет соответствующий XML-документ, форматирует ответ Web-сервиса и выводит его пользователю.

Секция Research способна выполнить основную часть работы, поскольку вызываемые ею Web-сервисы специально рассчитаны на взаимодействие с ней. При создании сервиса Research необходимо следовать определенным правилам. Например, у такого Web-сервиса должно быть две функции - Registration и Query, которые должны взаимодействовать с помощью XML-пакетов, соответствующих предопределенным XML-схемам. Полные схемы см. в Research SDK, а большинство элементов и атрибутов ключевых схем будет описано ниже.

Функция Registration служит для регистрации сервиса Research в одноименной секции задач. После регистрации сервис будет доступен через раскрывающийся список Show Results From. Устанавливая сервис Research как ресурс секции Research, пользователь инициирует запрос к функции Registration этого сервиса. Полученный ответ используется для создания соответствующих записей в реестре Windows, его формат должен соответствовать схеме Microsoft.Search.Registration.Response.xsd.

Функция Query вызывается, когда пользователь запрашивает информацию у сервиса Research при поиске по ключевому слову либо через форму секции задач Research. Секция Research посылает сервису XML-пакет, соответствующий схеме Microsoft.Search.Query.xsd, а сервис должен прислать ответ, основанный на одной из схем семейства Microsoft.Search.Response.xsd.

Функция Registration

Чтобы создать сервис Research, откройте Visual Studio .NET и откройте новый проект ASP.NET Web Service. Сохранить проект можно в папке Web-сайта IIS по умолчанию (http://localhost).

Перед использованием сервис Research необходимо зарегистрировать. Пользователи Office 2003 регистрируют сервис Research вызовом его функции Registration. Такая функция использует пространство имен urn:Microsoft.Search. Ее код создает и возвращает XML-пакет, формат которого определяется схемой Microsoft.Search.Registration.Response. Office 2003 использует данные этого пакета для добавления ссылки на Web-сервис в реестр Windows.

Часть данных XML-пакета (табл. 1) применяется для описания самого провайдера.

Табл. 1. Элементы, описывающие провайдер

 

Элемент Описание
Message Сообщение, отображаемое при добавлении сервиса Research к секции задач Research
Id GUID, идентифицирующий ваш сервис Research в реестре Windows
Name Имя провайдера, отображаемое в диалоговом окне свойств сервиса и в реестре
QueryPath Путь для функции Query сервиса Research, которую секция Research вызывает, когда пользователь делает запрос к сервису
RegistrationPath Путь для функции Registration сервиса Research. После установки сервиса Office 2003 периодически вызывает эту функцию для проверки на наличие обновлений для этого сервиса
Type Коммуникационный интерфейс, требуемый провайдером

Данные узла Service XML-пакета (табл. 2) описывают сервис Research.

Табл. 2. Элементы узла Service

 

Элемент Описание
Id GUID, используемый при вызове функции Query. Позволяет отличить ответ вашего сервиса Research от ответов аналогичных сервисов
Name Имя, отображаемое в списке Show Results From секции задач Research
Description Описание, показываемое в диалоговом окне свойств сервиса
Copyright Сведения об авторских правах, отображаемые в диалоговом окне свойств сервиса
Display Имеет значение On или Off; указывает, должен ли сервис показываться в списке Show Results From
Category Категория сервиса в списке Show Results From и диалоговом окне свойств Research. Список возможных значений этого элемента см. в схеме Microsoft.Search.Registration.Response

Код на Visual Basic .NET, необходимый для создания XML-пакета ответа функции Registration, выглядит примерно так:

Imports System.Web.Services ´ добавляется автоматически
 Imports System.Xml         ´ необходимо для чтения и
                            ´ формирования XML-пакетов
 Imports System.IO          ´ требуется для создания XML-пакетов в памяти
 <WebService(Namespace:="urn:Microsoft.Search")> _
Public Class MyResearchPane
    Inherits System.Web.Services.WebService

<WebMethod()> Public Function Registration(ByVal regXML As String) As
  String
    Dim ioMemStream As New MemoryStream()
    Dim myXMLwriter As New XmlTextWriter(ioMemStream, Nothing)

    With myXMLwriter
        .Indentation = 4
        .IndentChar = " "
        .WriteStartDocument()
        .WriteStartElement("ProviderUpdate", _
         ns:="urn:Microsoft.Search.Registration.Response")
        .WriteElementString("Status", "SUCCESS")
        .WriteStartElement("Providers")
        .WriteStartElement("Provider")

        .WriteElementString("Message", _
         "Congratulations! You´ve registered Research Pane Examples!")
        .WriteElementString("Id", _
         "{E545CFA2-E5AC-408a-92D9-E8C8487E6D69}")
        .WriteElementString("Name", "Research Pane Examples")
        .WriteElementString("QueryPath", _
         "http://localhost/StepByStep/Query.asmx")
        .WriteElementString("RegistrationPath", _
         "http://localhost/StepByStep/Registration.asmx")
        .WriteElementString("Type", "SOAP")
        .WriteStartElement("Services")
        .WriteStartElement("Service")
        .WriteElementString("Id", _
         "{942F685E-0935-42c8-80C5-95DB0D129910}")
        .WriteElementString("Name", "Research Pane Examples")
        .WriteElementString("Description", _
         "Research Pane Examples provides a simple example of " & _
         "customizing the Office Research Pane.")
        .WriteElementString("Copyright", _
         "All content Copyright (c) 2003.")
        .WriteElementString("Display", "On")
        .WriteElementString("Category", "INTRANET_GENERAL")

        .WriteEndElement()  ´ Service
        .WriteEndElement()  ´ Services
        .WriteEndElement()  ´ Provider
        .WriteEndElement()  ´ Providers
        .WriteEndElement()  ´ ProviderUpdate
        .WriteEndDocument()
    End With

    myXMLwriter.Flush()

    ioMemStream.Flush()
    ioMemStream.Position = 0
    Dim iostReader As New IO.StreamReader(ioMemStream)
    Return iostReader.ReadToEnd.ToString
End Function

Написав функцию Registration, можно ее проверить. Для этого выберите в меню команду Build and Browse - вы увидите стандартную тестовую страницу Web-сервиса. Щелкните ссылку Registration, ведущую на тестовую страницу регистрации, затем кнопку Invoke. В окне браузера появится XML-пакет ответа.

Итак, функция Registration готова, теперь ваш сервис Research может регистрироваться в секции задач Research, но пока не способен возвращать результаты. Для этого понадобится функция Query.

Функция Query

Типичный Web-метод Query обращается к источнику данных, например к базе данных SQL Server или к сайту Windows SharePoint Services, за сведениями, которые будут отображаться в секции задач Research.

Функция Query получает XML-пакет, соответствующий схеме Microsoft.Search.Query, и должна вернуть XML-пакет, основанный на схеме Microsoft.Search.Response.

Пакет ответа должен содержать хотя бы элементы, перечисленные в табл. 3.

Табл. 3. Обязательные элементы XML-пакета отклика

 

 

Элемент Описание
ResponsePacket Корневой элемент, должен включать атрибут xmlns со значением "urn:Microsoft.Search.Response"
Response Включающий (outer) элемент с ответом на конкретный запрос. Должен включать атрибут domain с тем же GUID, что и в элементе Id узла Service XML-пакета, являющегося ответом функции Registration
QueryID GUID, уникально идентифицирующий запрос, ответом на который является данный пакет
Range Элемент, заключающий (outermost) результаты, возвращаемые функцией Query. Как правило, функция Query, возвращает только один узел результатов. Элемент Range предусмотрен на случай, если один вызов вернет несколько узлов с результатами
Results Узел с данными, предназначенными для отображения пользователю через секцию задач Research; включает разметку, определяющую вид данных при выводе
Status Состояние запроса. Как правило, имеет значение "SUCCESS"

Значение атрибута domain элемента Response должно соответствовать GUID в Service ID, заданному в XML-пакете ответа функции Registration. Этот GUID позволяет секции задач Research узнать ответ вашего сервиса Research. Если этого атрибута нет, предполагается, что Web-сервис не вернул результатов. QueryID GUID должен быть другим уникальным значением.

Получив ответ, секция Research анализирует данные узла Results и определяет, что следует отобразить. При визуализации показанного здесь пакета ответа получается один абзац с заголовком Research Pane Examples (рис. 1).

Рис. 1. Любой запрос (даже пустой) заставляет наш Web-сервис выдавать один и тот же ответ

Узел Results обычно содержит узел Content. Тот в свою очередь содержит элементы, описанные схемой Microsoft.Search.Response.Content. Значения переданных в нем элементов визуализируются секцией Research как форматированный текст. Список наиболее часто используемых элементов узла Content приведен в табл. 4.

Табл. 4. Наиболее часто используемые элементы узла Content

 

Элемент Описание
P Текстовый абзац
Char Строка форматированного текста. Всегда находится внутри другого элемента Content. Задает полужирное, курсивное или подчеркнутое начертание
Tabular Таблица пар "имя-значение". Должна содержать один или несколько элементов Record, каждый с собственными элементами Name и Value
Image Путь к изображению, показываемому в секции задач Research как часть результатов запроса
Heading Абзац, раскрыв который, можно получить дополнительную информацию
NewQuery Гиперссылка, щелчок которой снова вызывает функцию Query сервиса Research. Запрашиваемое при этом ключевое слово задается через атрибут элемента NewQuery

Вот пример простой функции Query на Visual Basic .NET:

<WebMethod()> Public Function Query(ByVal queryXml As String) As String

        Dim queryTerm As String
        Dim ioMemStream As New MemoryStream()
        Dim myXMLwriter As New XmlTextWriter(ioMemStream, Nothing)

        With myXMLwriter
            .Indentation = 4
            .IndentChar = " "
            .WriteStartDocument()

            .WriteStartElement("ResponsePacket", _
             ns:="urn:Microsoft.Search.Response")
            .WriteAttributeString("revision", value:=1)

            .WriteStartElement("Response")

            ´ Этот GUID должен совпадать с Service ID,
            ´ указанным для функции Registration

            .WriteAttributeString("domain", _
             value:="{942F685E-0935-42c8-80C5-95DB0D129910}")
            .WriteElementString("QueryID", _
             "{690EF6D8-575D-4897-8F30-293E175C1B99}")
            .WriteStartElement("Range")
            .WriteStartElement("Results")
            .WriteStartElement("Content", _
             ns:="urn:Microsoft.Search.Response.Content")
            .WriteElementString("P", "I heard you!")
            .WriteEndElement() ´ закрыть тэг Content
            .WriteEndElement() ´ закрыть тэг Results
            .WriteEndElement() ´ закрыть тэг Range

            .WriteElementString("Status", "SUCCESS")

            .WriteEndElement() ´ закрыть тэг Response
            .WriteEndElement() ´ закрыть тэг ResponsePacket
            .WriteEndDocument()
        End With

        myXMLwriter.Flush()
        ioMemStream.Flush()
        ioMemStream.Position = 0
        Dim iostReader As New IO.StreamReader(ioMemStream)
        Return iostReader.ReadToEnd.ToString
    End Function

После добавления этого кода функцию Query можно скомпилировать и протестировать (с помощью команды Build and Browse) - вы увидите XML-пакет в окне браузера.

Регистрация и тестирование Web-сервиса

Зарегистрировать и проверить сервис Research в Office 2003 нетрудно. Для этого откройте Word, Excel или PowerPoint, вызовите секцию задач Research командой Tools | Research из основного меню. Далее щелкните внизу гиперссылку Research options, а затем кнопку Add Services.

В поле Address диалогового окна Add Services введите путь к странице Registration, как показано на рис. 2, и щелкните Add. Откроется диалоговое окно установки, в нем щелкните кнопку Install. После закрытия диалогового окна Research Options ваш сервис Research готов к обработке запросов.

Рис. 2. Добавьте сервис, введя путь к странице Registration

Убедиться в успешной регистрации сервиса Research можно так. Раскройте список Show results from в секции Research, найдите в ней только что созданный сервис и выберите его.

Убедившись, что сервис зарегистрирован, можно добавить в функцию Query остальной код и протестировать ее. Для этого скомпилируйте сервис и откройте одну из программ Office 2003; регистрировать сервис после каждой модификации функции Query не обязательно.

Как узнать, что ищет пользователь

Чтобы определить конкретный запрос и соответствующим образом отреагировать на него, ваша функция должна выполнить разбор XML-пакета, полученного от секции Research.

Структура пакета запроса соответствует схеме Microsoft.Search.Query. Элемент QueryText содержит точную копию слова (или слов), введенных пользователем в секции Research. Кроме того, пакет запроса содержит узел Keywords с отдельными словами и их словоформами (например, разговорными формами).

Если, разобрав XML-пакет, удается выяснить предмет запроса пользователя, дальше можно использовать любой алгоритм для предоставления соответствующего ответа. Вот типичный код для извлечения элемента QueryText из пакета запроса:

        Dim queryTerm As String
        Dim requestXML As New XmlDocument()
        requestXml.LoadXml(queryXml)

        Dim nsmRequest As New XmlNamespaceManager(requestXML.NameTable)
        nsmRequest.AddNamespace("ns", "urn:Microsoft.Search.Query")

        queryTerm = requestXML.SelectSingleNode( _
         "//ns:QueryText", nsmRequest).InnerText

Вставка данных в документ пользователя

Помимо текста, заголовков и гиперссылок, секция Research поддерживает некоторые операции для передачи данных в документ пользователя. Так, можно без труда указывать в ответе операции Insert и Copy, а также добавлять поддержку собственных смарт-тэгов, установленных на пользовательской машине. Для добавления кнопки Action (рис. 3) к визуальному представлению ответа служит элемент Actions.

Рис. 3. Раскрывающийся список с операциями Copy и Insert

Операция Copy chores копирует информацию об элементе в буфер обмена, а Paste chores - вставляет ее в текущий документ там, где находится курсор ввода.

Чтобы задать операции, доступные через кнопку Action, добавьте к узлу Actions соответствующие элементы Copy и Insert.

Элемент Text контролирует названия элементов меню, выводимых при нажатии кнопки Action, а элемент Data определяет данные, копируемые и вставляемые в документ при выборе пользователем соответствующих операций.

Помимо элементов Copy и Insert, можно задействовать элемент Custom для добавления к списку собственных смарт-тэгов.

Резюме

Создать Web-сервис для использования с секцией задач Research в Word, Excel и PowerPoint из Office 2003, довольно просто. Для этого достаточно написать функции для регистрации и запроса, после чего можно подключить новый сервис к секции Research. Масса возможностей открывается через пакет ответа, чье содержимое секция задач Research отображает пользователям. Эта функциональность Office 2003 проста в применении и удобна во многих проектах.


Может пригодится:


Автор: Йен Фрэнсен
Прочитано: 4533
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру