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

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

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

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

  • Закрыть [x]

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

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

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

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

  • Закрыть [x]

Расширение возможностей IBM Workplace Forms с помощью Web-сервисов

Лю Цзюнь, инженер-программист, IBM
Лю Цзюнь (Liu Jun) – инженер-программист в группе FormsCentral в китайской лаборатории IBM по разработке ПО. Он проектирует и разрабатывает связанные с IBM Workplace Forms ресурсы для приложений заказчиков. Более года работает с Workplace Forms.
Деанна Дшивиски, разработчик документации, IBM
Деанна Дшивиски (Deanna Drschiwiski) занимает должность разработчика документации в группе IBM Workplace Forms в Виктори (Канада). Она пишет статьи о продуктах пакета Workplace Forms начиная с 2000г.

Описание:  Набор программного обеспечения IBM Workplace Forms предоставляет широкие возможности интеграции и мощные инструменты расширения функциональных возможностей Workplace Forms. В данной статье рассказывается, как можно улучшить ваши приложения, используя новые мощные функции предоставляемые Web-сервисами.

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


Делая запросы к Web-сервисам из приложений IBM Workplace Forms, вы можете легко воспользоваться преимуществами Web-сервисов и добавить в ваши приложения Workplace Forms мощные возможности.

Web-сервисы позволяют разнородным приложениям из разных источников взаимодействовать друг с другом без дополнительного кодирования. Всё общение между Workplace Forms и Web-сервисами реализуется посредством XML, что обеспечивает их прозрачную интеграцию друг с другом.

Если сравнивать данный подход с расширением возможностей Workplace Forms с помощью технологии Function Call Interface (FCI) (см. статью "Расширение возможностей IBM Workplace Forms с помощью Function Call Interface" на сайте developerWorks), то можно отметить, что использование Web-сервисов позволяет не тратить дополнительное время на проектирование и разработку расширений FCI. Web-сервисы независимы от Workplace Forms, а значит могут использоваться и другими приложениями. Более того, Web-сервисы проще в обслуживании чем расширения FCI т.к. вы можете менять Web-сервисы не затрагивая приложения Workplace Forms.

В данной статье приведены инструкции по следующим вопросам:

  • Как скачать файл WSDL (Web Services Description Language)
  • Как встроить файл WSDL в форму XFDL
  • Как добавить в форму информацию о системных требованиях
  • Как получить информацию о Web-сервисе из файла WSDL
  • Как использовать функции XFDL для вызова Web-сервисов
  • Как использовать отправку форм XForms для вызова Web-сервисов

Предварительные требования

Читатель должен обладать хорошим пониманием спецификации XFDL, XForms и Web-сервисов.


Загрузка файла WSDL

Web Services Description Language (WSDL) это основанный на XML язык для описания и доступа к Web-сервисам. Для получения более подроб7ной информации ознакомьтесь со спецификацией Web Services Description Language (WSDL) 1.1.

В данной статье для примеров мы будем использовать Google SOAP Search API. Вы можете скачать соответствующий файл WSDL для этого сервиса. Для более подробного ознакомления с Google SOAP Search API воспользуйтесь справочным руководством Google SOAP Search API Reference.


Встраивание файла WSDL

После скачивания файла WSDL его нужно встроить в форму.

Для этого:

  1. Откройте тестовую форму в IBM Workplace Forms Designer V2.7.
  2. В виде Enclosures откройте узел WSDL и щёлкните правой кнопкой по узлу Web services.
  3. Из меню выберите WSDL File.
  4. В диалоге Choose File найдите GoogleSearch.wsdl и щёлкните OK. Файл GoogleSearch.wsdl будет встроен в форму, как показано на рисунке 1.

Рисунок 1. Вид Enclosures со встроенным файлом WSDL
Вид Enclosures со встроенным файлом WSDL

После встраивания файла WSDL в форму его содержимое станет доступным в Workplace Forms Designer. Если вы откроете форму в виде Source, то в разделе формы globalpage увидите код XML описывающий Web-сервис. См. листинг 1.


Листинг 1. Добавление Web-сервиса в форму
<webservices>
  <wsdl name="WebServicesName.wsdl">
<!-- WSDL definitions removed.-->    
  </wsdl>
</webservices>


Добавление требований Web-сервиса (необязательно)

Часто Web-сервисам для нормальной работы требуется наличие на компьютере пользователя конкретного ПО. Например, многие Web-сервисы требуют определённую версию Java Runtime Environment (JRE).

Для указания подобных требований необходимо добавить их описание в свойства формы. Вы можете использовать описание требований для проверки наличия определённых классов, созданных экземпляров классов, функций, локали или виртуальной машины Java. При невыполнении требований вы можете показать сообщение пользователю и выбрать продолжать или прервать работу Web-сервиса.

В нашем примере требования включают минимальную версию JRE и экземпляр определённого класса. Для получения более подробной информации по другим требованиям Web-сервисов обратитесь к спецификации XFDL.

Для создания требования проверки минимальной версии JRE на компьютере пользователя:

  1. В виде Outline откройте узел globalpage и выберите Form Global.
  2. В виде Properties откройте узел requirements, затем узел Requirements и затем узел requirement, как на рисунке 2.

Рисунок 2. Ветвь requirements в виде Properties
Ветвь requirements в виде Properties
  1. Откройте узел component.
  1. Поместите курсор в колонку Value около свойства Element и укажите тип требования, которое вы хотите создать. Для нашего примера выберите Java VM.
  1. Откройте ветку javavm, как показано на рисунке 3.

Рисунок 3. Ветка javavm в виде Properties
Ветка javavm в виде Properties
  1. В полях Value узлов minversion и maxversion укажите номера версии Java VM. Вы можете затребовать как минимальную, так и максимальную версию. Для нашего примера укажите минимальную версию 1.4.2.
  1. Теперь откройте ветку actions, как показано на рисунке 4.

Рисунок 4. Ветка actions в виде Properties
Ветка actions в виде Properties
  1. В поле узла Type укажите, какое действие вы хотите исполнить при несоответствии требованию. Для нашего примера укажите Message, чтобы проинформировать пользователя Web-сервиса о несоответствии требованию.
  2. В поле узла ID введите имя, например JavaReq, для идентификации требования. Указание ID обязательно, если вы используете требования в XForms.
  3. В поле узла Message введите сообщение, которое будет показано пользователю при непрохождении проверки. Например "Ваш компьютер не имеет установленной необходимой версии Java Virtual Machine. В связи с этим Web-сервис не может функционировать. Для исправления необходимо установить Sun Java VM версии 1.4.2 или выше."
  4. Теперь добавьте требование наличия экземпляра класса. Для этого выделите поле Value в строке Requirements и щёлкните по значку с плюсом, как показано на рисунке 5.

Рисунок 5. Добавление нового требования в виде Properties
Добавление нового требования в виде Properties
  1. Откройте ветки requirement и component.
  2. Установите курсор в поле Value напротив свойства Element и выберите тип требования. Для нашего примера выберите Class Instance.
  3. Откройте ветку classinstance и напечатайте имя экземпляра класса в поле Value. Для нашего примера напечатайте com.PureEdge.wsdl.factory.WSDLFactory.
  4. Добавьте требование minversion. Введите 1.0.0, как показано на рисунке 6.

Рисунок 6. Добавление компонента class instance в виде Properties
Добавление компонента class instance в виде Properties
  1. Откройте ветку actions.
  2. В поле Type выберите действие, которое должно запускаться если, требование не выполняется. Для нашего примера выберите Message, чтобы форма проинформировала пользователя, если требование не выполняется.
  3. В поле ID введите имя для идентификации требования, например ClassInstanceReq. Указание ID обязательно, если вы используете требования в XForms.
  4. В поле Message введите сообщение которое должно показываться пользователю, если требование не выполняется. Например "На вашем компьютере не установлен требуемый класс. В связи с этим Web-сервис не может правильно работать. Для устранения проблемы обратитесь к системному администратору." См. рисунок 7.

Рисунок 7. Добавления действия для требования с типом class instance в виде Properties
Добавления действия для требования с типом class instance в виде Properties

Код в листинге 2 показывает, как выглядят требования при просмотре в виде Source после добавления требований к версии Java VM и экземпляра класса:


Листинг 2. Добавление требований Web-сервисов в форму


<requirements>
  <requirement>
     <component>
        <javavm>
           <minversion>1.4.2</minversion>
        </javavm>
     </component>
     <actions>
        <message stringid="JavaReq">Ваш компьютер не имеет установленной необходимой 
	версии Java Virtual Machine. В связи с этим Web-сервис не может функционировать. 
	Для исправления реобходимо установить Sun Java VM версии 1.4.2 или выше.</message>
     </actions>
  </requirement>
  <requirement>
     <component>
        <classinstance>
           <name>com.PureEdge.wsdl.factory.WSDLFactory</name>
           <minversion>1.0.0</minversion>
        </classinstance>
     </component>
     <actions>
        <message stringid=" ClassInstanceReq">На вашем компьютере не установлен 
	требуемый класс. В связи с этим Web-сервис не может правильно работать. 
	Для устранения проблемы обратитесь к системному администратору. </message>
     </actions>
  </requirement>
</requirements>


Получение из файла WSDL информации о функциях

Прежде чем использовать описанные в файле WSDL функции, необходимо распознать его содержимое. Обычно в файле WSDL можно увидеть следующие элементы:

  • Имя сервиса. Имя Web-сервиса.
  • Имя порта. Имя порта Web-сервиса.
  • Имена операций. Функции, предоставляемые Web-сервисом.
  • Параметры сообщений. Параметры, используемые функциями Web-сервиса.

Сервисы и порты

После добавления файла WSDL функции, предоставляемые Web-сервисами помещаются в пакет. Этот пакет автоматически добавляется в форму приложения при этом имя пакета строится из имени сервиса, знака подчёркивания (_) и имени порта. Обратите внимание, что по правилам именования имена сервиса и порта в WSDL не должны содержать знак подчёркивания (_).

Код в листинге 3 показывает информацию о сервисе и порте в файле GoogleSearch.wsdl. В этом примере вы видите, что имя пакета для этого WSDL будет GoogleSearchService_GoogleSearchPort.


Листинг 3. Идентификация имён сервиса и порта Web-сервиса


<!-- Endpoint for Google Web APIs -->
<service name="GoogleSearchService">
  <port name="GoogleSearchPort" binding="typens:GoogleSearchBinding">
    <soap:address location="http://api.google.com/search/beta2"/>
  </port>
</service>

Операции

Операции - это функции предоставляемые Web-сервисом. Операции состоят из двух частей - запрос операции (input) и отклик операции (output).

Код в листинге 4 определяет три операции: doGetCachedPage, doSpellingSuggestion и doGoogleSearch.


Листинг 4. Определение операций doGetCachedPage, doSpellingSuggestion и doGoogleSearch


<!-- Port for Google Web APIs, "GoogleSearch" -->
<portType name="GoogleSearchPort">
  <operation name="doGetCachedPage">
    <input message="typens:doGetCachedPage"/>
    <output message="typens:doGetCachedPageResponse"/>
  </operation>
  <operation name="doSpellingSuggestion">
    <input message="typens:doSpellingSuggestion"/>
    <output message="typens:doSpellingSuggestionResponse"/>
  </operation>
  <operation name="doGoogleSearch">
    <input message="typens:doGoogleSearch"/>
    <output message="typens:doGoogleSearchResponse"/>
  </operation>
</portType>

Сообщения и параметры сообщений

Перед вызовом любой операции или функции из Web-сервиса встроенного в форму, необходимо знать, какие параметры эти функции принимают и какие типы данных возвращают. Раздел message файла WSDL описывает эту информацию как для запросов так и для откликов операций.

В коде из листинга 5 операция doGetCachedPage имеет два параметра: key и url. Оба они имеют тип string. Операция doGetCachedPage возвращает результат, имеющий тип base64Binary. Следующая функция, doSpellingSuggestion, имеет два параметра: key и phrase с типом string. Как вы видите, обе эти функции используют простые типы данных, которые позволяют вам применять эти операции таким же образом, как и функции XFDL.

С другой стороны, doGoogleSearch принимает несколько разных параметров с разными типами данных. Более того, возвращаемое значение имеет составной тип GoogleSearchResult. Операции, использующие составные типы данных, могут вызываться только с использованием передачи XForms.


Листинг 5. Определение сообщений операций и параметров сообщений


<message name="doGetCachedPage">
  <part name="key" type="xsd:string"/>
  <part name="url" type="xsd:string"/>
</message>
<message name="doGetCachedPageResponse">
  <part name="return" type="xsd:base64Binary"/>
</message>
<message name="doSpellingSuggestion">
  <part name="key" type="xsd:string"/>
  <part name="phrase" type="xsd:string"/>
</message>
<message name="doSpellingSuggestionResponse">
  <part name="return" type="xsd:string"/>
</message>
<message name="doGoogleSearch">
  <part name="key" type="xsd:string"/>
  <part name="q" type="xsd:string"/>
  <part name="start" type="xsd:int"/>
  <part name="maxResults" type="xsd:int"/>
  <part name="filter" type="xsd:boolean"/>
  <part name="restrict" type="xsd:string"/>
  <part name="safeSearch" type="xsd:boolean"/>
  <part name="lr" type="xsd:string"/>
  <part name="ie" type="xsd:string"/>
  <part name="oe" type="xsd:string"/>
</message>
<message name="doGoogleSearchResponse">
  <part name="return" type="typens:GoogleSearchResult"/>
</message>


Вызов Web-сервисов

Есть два типовых варианта вызова Web-сервисов из Workplace Forms:

  • Используя функции XFDL
  • Используя передачу XForms

Выбор метода вызова Web-сервиса зависит от сложности Web-сервиса, к которому предполагается доступ. Если Web-сервис очень простой (т.е. параметры запросов и возвращаемых значений имеют простые типы) - вы можете обращаться к Web-сервисам используя функции XFDL. Выглядеть это будет так же, как и вызов обычных функций XFDL. С другой стороны, если параметры и возвращаемые значения имеют составные типы данных, необходимо использовать передачи XForms. Это значит, что вам придётся добавить поддержку XForms в ваши формы, что усложнит приложение.

Использование функций XFDL

С помощью функций XFDL можно вызывать только операции, использующие простые типы данных. Это значит, что из трёх операций в примере файла WSDL могут быть вызваны только doGetCachedPage и doSpellingSuggestion т.к. они используют простые типы (string и base64Binary) в параметрах и возвращают значения с типом string. Операции, использующие составные типы данных (как doGoogleSearch) будут рассматриваться в следующем разделе.

Операции и функции Web-сервисов, использующие простые типы данных вы можете вызывать из элементов compute точно так же, как и любые функции XFDL. Синтаксис вызова: <packageName>.<operationName>(parameter1, parameter2).

Примечание: Операции, которые могут быть вызваны как функции XFDL, также могут вызываться как передачи XForms.

Код в листинге 6 использует функцию XFDL для обращения к Web-сервису.


Листинг 6. Использование функции XFDL для обращения к Web-сервису


<custom:invokeWebServices xfdl:compute="toggle(activated, 'off', 'on') == '1' 
   ? set('Result.value', GoogleSearchService_GoogleSearchPort.doSpelling
      Suggestion(PAGE1.Key.value, PAGE1.Expression.value)) 
   : ''"></custom:invokeWebServices>

Для использования этого кода:

  1. Создайте кнопку XFDL, которую пользователь может нажать для обращения к Web-сервису.
  2. Вставьте код из листинга 6 в кнопку.
  3. Создайте элемент label в котором будет содержаться информация, полученная от Web-сервиса и укажите его sid как "RESULT".

В качестве примера см. листинг 7.


Листинг 7. Размещение вызова Web-сервиса внутри кнопки

   <button sid="INVOKE">
      <itemlocation>
         <x>83</x>
         <y>318</y>
      </itemlocation>
      <value>Invoke</value>
      <custom:invokeWebServices xfdl:compute="toggle(activated, 'off', 'on') == 
         '1' 
         ? set('RESULT.value', GoogleSearchService_GoogleSearchPort.do
            SpellingSuggestion(PAGE1.Key.value, PAGE1.Expression.value)) 
         : ''"></custom:invokeWebServices>
   </button>
   

Использование передач XForms

Функции XFDL нельзя тспользовать, если операции Web-сервиса используют составные типы данных в параметрах запроса или возвращают в отклике значения составного типа. Однако вы можете вызывать операции, использующие составные типы данных с помощью передач XForms.

Для создания передачи XForms необходимо создать набор правил передачи. Эти правила помогут определить, какие данные отправляются, как они отправляются и откуда они отправляются. В дополнение к правилам отправки необходимо создать кнопку, связанную с этими правилами.

Для обращения к Web-сервисам ваша форма должна содержать по крайней мере одну модель.

Добавление модели данных XForms

Если вы используете Workplace Forms Designer для редактирования форм, то можете добавить простую модель данных в один шаг. В виде XForms щёлкните правой кнопкой по надписи No Model Exists и выберите Add XForms Support.

Примечание: Вы можете пропустить этот шаг, если в вашей форме уже есть модель данных.

Создание данных XForms из сообщений WSDL

Теперь создайте источник данных XForms, который будет содержать элементы запроса и отклика функций WSDL.

Для этого:

  1. В виде Instance нажмите кнопку WSDL.
  1. Потом выберите сообщение WSDL, которое вы хотите использовать. Для нашего примера выберите doGoogleSearch и doGoogleSearchResponse, как показано на рисунке 8 для создания элементов request и response функции doGoogleSearch.

Рисунок 8. Выбор сообщения WSDL
Выбор сообщения WSDL
  1. Нажмите ОК. Будут созданы новые экземпляры XForms. Первый экземпляр (INSTANCE) содержит элементы запроса к doGoogleSearch, а второй (INSTANCE1) - элементы отклика doGoogleSearch. См. рисунок 9.

Рисунок 9. Экземпляры, сгенерированные из выбранных сообщений WSDL
Экземпляры, сгенерированные из выбранных сообщений WSDL
  1. После создания экземпляров дайте им удобочитаемые имена. Для нашего примера переименуйте INSTANCE в doGoogleSearchRequest, а INSTANCE1 в doGoogleSearchResponse. Это деоается в виде Source редактора Workplace Forms Designer или в другом текстовом редакторе, как показано на рисунке 10.

Рисунок 10. Переименованные экземпляры
Переименованные экземпляры

Удаление обработанного файла WSDL (необязательно)

После создания экземпляров для функций Web-сервисов, файл WSDL можно удалить из формы. Удаление файла WSDL сделает форму меньше по размеру. Для удаления перейдите в вид Enclosures, щёлкните правой кнопкой по встроенному файлу WSDL и выберите Delete из контекстного меню.

Создание базовой передачи XForms

Передачи (submissions) XForms - это набор правил определяющих, какие данные передаются, как данные передаются, куда они направляются куда необходимо поместить данные отклика. При использовании передачи XForms для обращения к Web-сервисам в передаче XForms определяется, какая из функций будет вызвана и куда должны передаваться данные отклика.

Для создания правил передачи для Web-сервиса:

  1. В виде XForms редактора Workplace Forms Designer щёлкните правой кнопкой источник doGoogleSearchResponse и выберите Create Submission for Instance.

Будет создана передача XForms, как показано на рисунке 11.


Рисунок 11. Вид XForms со генерированной передачей
Вид XForms со генерированной передачей

Добавление правил передачи

После создания базовой передачи необходимо добавить правила регулирующие общение с Web-сервисом. Правила задаются как атрибуты передачи и описаны в таблице 1.


Таблица 1. Атрибуты передачи
АтрибутНазначение
actionОписывает URL Web-сервиса, например action=http://api.google.com/search/beta2.
idИмя передачи XForms. Имя связывает правило передачи с кнопкой, например id="doGoogleSearch".
instanceУказывает экземпляр, куда возвращается отклик, например instance="doGoogleSearchResponse".
mediatypeИмеет две части. Первая часть атрибута mediatype указывает тип заголовка запроса к Web-сервису. Заголовок всегда будет application/soap+xml. Вторая часть указывает действие Web-сервиса. Это имя функции, которую должен вызывать Web-сервис, например doGoogleSearch.

В следующим примере показан атрибут mediatype для функции doGoogleSearch:
mediatype="application/soap+xml; action=doGoogleSearch"
methodУказывает протокол, используемый при передаче сериализованных данных, например method="post".
refУказывает экземпляр, содержащий данные запроса к Web-серверу, например ref="instance('doGoogleSearchRequest')".
replaceУказывает, что будет замещено при получении пакета с откликом, например replace="instance".

Для настройки правил передачи необходимо выполнить следующие шаги:

  1. Переключитесь в вид Source редактора Workplace Forms Designer и найдите следующий код:

    <xforms:submission id="SUBMISSION" instance="doGoogleSearchResponse"
    method="post"></xforms:submission>

  1. Поменяйте ID передачи на имя вашей передачи. В нашем примере это doGoogleSearch.
  2. Добавьте атрибут action. Для нашего примера присвойте ему значение http://api.google.com/search/beta2.
  3. Добавьте mediatype в передачу. Атрибут всегда имеет значение application/soap+xml;. Для нашего примера присвойте элементу action значение doGoogleSearch .
  4. Добавьте ссылку на экземпляр, содержащий данные Web-сервиса. Для нашего примера присвойте ему значение instance('doGoogleSearchRequest')".

В листинге 8 показан код готовой передачи XForms.


Листинг 8. Готовая передача XForms для вызова Web-сервиса


<xforms:submission id="doGoogleSearch"
   action="http://api.google.com/search/beta2" 
   instance="doGoogleSearchResponse" mediatype="application/soap+xml;  
   action=doGoogleSearch" method="post" ref="instance('doGoogleSearchRequest')"  
   replace="instance"></xforms:submission>
 

Создание кнопки передачи

После завершения создания правил для передачи вам нужно создать кнопку и связать её с передачей XForms. Кнопка передачи может содержать либо действие submit, либо send. Для нашего примера используйте действие send.

Шаги для создания кнопки передачи:

  1. Создайте кнопку XFDL. См. код в листинге 9.

Листинг 9. Помещение передачи XForms в кнопку отправки

   <button sid="INVOKE_BUTTON">
      <value>Invoke</value>
      …other button options…
   </button>
   

  1. Добавьте элемент с триггером XForms. См. код в листинге 10.

Листинг 10. Добавление элемента с триггером

   <button sid="INVOKE_BUTTON">
      <value>Invoke</value>
      <xforms:trigger>
      </xforms:trigger>
   </button>

  1. Добавьте действие XForms с событием DOMActivate. См. код в листинге 11.

Листинг 11. Добавление элемента с действием

   <button sid="INVOKE_BUTTON">
      <value>Invoke</value>
      <xforms:trigger>
         <xforms:label></xforms:label>
         <xforms:action ev:event="DOMActivate">
         </xforms:action>
      </xforms:trigger>
   </button>
 

  1. Добавьте элемент send. См. код в листинге 12.

Листинг 12. Добавление элемента send

  <button sid="INVOKE_BUTTON">
      <value>Invoke</value>
      <xforms:trigger>
         <xforms:label></xforms:label>
         <xforms:action ev:event="DOMActivate">
            <xforms:send submission="doGoogleSearch"></xforms:send>
         </xforms:action>
      </xforms:trigger>
   </button>


Базовая форма с вызовом Web-сервиса

В следующих разделах описывается пример двух форм вызывающих Web-сервис. Первая форма использует для обращения к Web-сервису XFDL, вторая - XForms.

Использование функций XFDL для доступа к Web-сервисам

Этот пример формы показывает, как использовать функции XFDL для вызова сервиса Google SOAP Search API. Когда пользователь щёлкает по кнопке Invoke, форма выполняет запрос к Web-сервису. Сервис обращается к Google SOAP Search API и в отклике возвращаются данные с вариантами исправления правописания.

После нажатия кнопки отображается вариант написания, как показано на рисунке 12.


Рисунок 12. Пример формы, предлагающей вариант исправления правописания
Пример формы, предлагающей вариант исправления правописания

Использование передачи XForms для обращения к Web-сервису

В листинге 13 показан пример экземпляра, который изменяется посредством передачи XForms, вызывающей Web-сервис Google SOAP Search API. Когда пользователь щёлкает по кнопке Invoke, форма направляет Web-сервису запрос. Запрос вызывает функции Google SOAP Search API и возвращает набор результатов, которые замещают экземпляр doGoogleSearchResponse.

В листинге 13 показан начальный экземпляр данных XForms.


Распечатка 13. Начальный источник данных XForms


<xforms:instance xmlns:designer1="http://www.ibm.com/xmlns/prod/
   workplace/forms/designer/2.7" id="doGoogleSearchResponse"  
   designer1:type="wsdl" xmlns="">
      <soap:Envelope>
         <soap:Body xmlns:defaultns="urn:GoogleSearch"
            soap:encodingStyle="http://schemas.xmlsoap.org/soap/
            encoding/">
         <defaultns:doGoogleSearchResponse>
            <return>                         
               <defaultns:documentFiltering></defaultns:document
                  Filtering>
               <defaultns:searchComments></defaultns:searchComments>
               <defaultns:estimatedTotalResultsCount></defaultns:
                  estimatedTotalResultsCount>
               <defaultns:estimateIsExact></defaultns:estimateIsExact>
               <defaultns:resultElements></defaultns:resultElements>
               <defaultns:searchQuery></defaultns:searchQuery>
               <defaultns:startIndex></defaultns:startIndex>
               <defaultns:endIndex></defaultns:endIndex>
               <defaultns:searchTips></defaultns:searchTips>
               <defaultns:directoryCategories></defaultns:directory
                  Categories>
               <defaultns:searchTime></defaultns:searchTime>
            </return>
          </defaultns:doGoogleSearchResponse>
          </soap:Body>
       </soap:Envelope>
   </xforms:instance>

В листинге 14 показан код замещённого экземпляра данных XForms.


Листинг 14. Замещённый экземпляр данных XForms


<xforms:instance xmlns="" xmlns:designer1="http://www.ibm.com/
   xmlns/prod/workplace/forms/designer/2.7" id="doGoogleSearchResponse" 
   designer1:type="wsdl">
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/
      soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" 
      xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
      <SOAP-ENV:Body>
      <ns1:doGoogleSearchResponse xmlns:ns1="urn:
         GoogleSearch" SOAP-ENV:encodingStyle="http://schemas.
         xmlsoap.org/soap/encoding/">
         <return xsi:type="ns1:GoogleSearchResult">
            <directoryCategories xmlns:ns2="http://schemas.xmlsoap.
              org/soap/encoding/" ns2:arrayType="ns1:Directory
              Category[0]" xsi:type="ns2:Array"></directoryCategories>
              <documentFiltering xsi:type="xsd:
                 boolean">true</documentFiltering>
              <endIndex xsi:type="xsd:int">10</endIndex>
              <estimateIsExact xsi:type="xsd:
                 boolean">false</estimateIsExact>
              <estimatedTotalResultsCount xsi:type="
                 xsd:int">73200</estimatedTotalResultsCount>
              <resultElements xmlns:ns3="http://schemas.xmlsoap.
                 org/soap/encoding/" ns3:arrayType="ns1:Result
                 Element[10]" xsi:type="ns3:Array">
                    <item xsi:type="ns1:ResultElement">
                       <URL xsi:type="xsd:string">http://www.paizhe.com/
                           space/?592/spacelist-blog.html</URL>
                       <cachedSize xsi:type="xsd:string"
                          >31k</cachedSize>
                        <directoryCategory xsi:type="ns1:
                           DirectoryCategory">
                           <fullViewableName xsi:type="xsd:
                              string"></fullViewableName>
                           <specialEncoding xsi:type="xsd:string"
                           ></specialEncoding>
                        </directoryCategory>
                        <directoryTitle xsi:type="xsd:string"
                           ></directoryTitle>
                        <hostName xsi:type="xsd:string"></hostName>
                       <relatedInformationPresent xsi:type="xsd:
                          boolean">false</relatedInformationPresent>
                          <snippet xsi:type="xsd:string">一场突如其来的大
                             火. 2007-02-06 17:03:58. 正在下载中,请稍等... 
                             查看(23) 评论(2) <br>  收藏 分享 圈子 管
                             理. 281/212&gt;. <b>rookie<
                            /b>. <b>rookie</b>. 用户菜单.
                            给我留言 &middot; 加入好友 &middot; 
                            <br>  发短消息 &middot; 我的介绍 
                            &middot; 论坛资料 &middot; 空间管理. 我
                            的栏目. 那就来跳水吧. 标题搜索 lt;b>...
                            </b></snippet>
     ...additional elements removed for brevity...
                         <summary xsi:type="xsd:string"></summary>
                         <title xsi:type="xsd:string">菜鸟霹雳胆The 
                            <b>Rookie</b> 剧情简介-剧情介绍及演
                            员表及影评imdb中文网</title>
                      </item>
                   </resultElements>
                  <searchComments xsi:type="xsd:string"></search
                     Comments>
                  <searchQuery xsi:type="xsd:string">rookie</search
                     Query>
                  <searchTime xsi:type="xsd:double">0.116003</search
                     Time>
                  <searchTips xsi:type="xsd:string"></searchTips>
                  <startIndex xsi:type="xsd:int">1</startIndex>
               </return>
            </ns1:doGoogleSearchResponse>
         </SOAP-ENV:Body>
      </SOAP-ENV:Envelope>
   </xforms:instance>
 


Заключение

Пакет продуктов Workplace Forms позволяет вам создавать динамичные и удобные в использовании формы. Благодаря использованию XML формы могут быть легко интегрированы с Web-сервисами. Следуя пошаговым инструкциям из данной статьи, дизайнер форм средней квалификации может встраивать Web-сервисы в свои формы и добавлять дополнительную функциональность, предоставляемую этими сервисами.



Загрузка

ИмяРазмерМетод загрузки
CallWSinWPForms_XFDLFunction.xfdl14 КБHTTP
CallWSinWPForms_XFormsSubmssion.xfdl6 КБHTTP
GoogleSearch.wsdl7 КБHTTP

Информация о методах загрузки


Ресурсы

Научиться

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

Обсудить

Об авторах

Лю Цзюнь (Liu Jun) – инженер-программист в группе FormsCentral в китайской лаборатории IBM по разработке ПО. Он проектирует и разрабатывает связанные с IBM Workplace Forms ресурсы для приложений заказчиков. Более года работает с Workplace Forms.

Деанна Дшивиски (Deanna Drschiwiski) занимает должность разработчика документации в группе IBM Workplace Forms в Виктори (Канада). Она пишет статьи о продуктах пакета Workplace Forms начиная с 2000г.

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

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

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


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

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

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


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, SOA и Web-сервисы
ArticleID=361428
ArticleTitle=Расширение возможностей IBM Workplace Forms с помощью Web-сервисов
publish-date=12292008
author1-email=liujunsh@cn.ibm.com
author1-email-cc=
author2-email=deanna@ca.ibm.com
author2-email-cc=

Теги

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

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

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

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