Интеграция Rational Team Concert с использованием языка сценариев Visual Basic

Источник: IBM

IBM Rational Team Concert - это динамичная система управления жизненным циклом приложений (application lifecycle management - ALM), предназначенная для коллективной разработки программного обеспечения независимо от местоположения членов группы. Она обладает разнообразными возможностями, включая управление задачами, управление дефектами, управление конфигурациями исходного кода, управление компоновками и т.д. Она реализует открытый сервис под названием Open Services for Lifecycle Collaboration (OSLC), который позволяет интегрировать ее с существующей системой, такой, например, как средства управления проектами или работой. В данной статье рассказывается, как воспользоваться преимуществами сервиса Rational Team Concert OSLC при помощи языка сценариев Visual Basic, и как интегрировать его с существующей системой.

Сценарий

Предположим, что для обеспечения совместимости вы работаете с системой, построенной на новейшей технологии. Ввод информации о разработке является обязательным. Система стала достаточно стабильной, поэтому ИТ-менеджер решил осуществлять поддержку только проблем уязвимости защиты и дефектов, связанных с новыми пакетами исправлений операционной системы. Также предположим, что группе разработчиков для поддержки глобальной поставки была предложена система IBM Rational Team Concert. Вероятно, разработчики не хотят тратить драгоценное время на ввод одной и той же информации в обе системы. Цель данной статьи - продемонстрировать методики интеграции системы такого рода.

Цель данной статьи схематически показана на рисунке 1. Система My System используется для ввода определенного вида информации о разработке при помощи интерфейса COM+, а для ускорения глобальной поставки предлагается система Rational Team Concert. Rational Team Concert имеет открытый интерфейс OSLC (Open Services for Lifecycle Collaboration).

Рисунок 1. Цель - интегрировать существующую систему My System с Rational Team Concert
Рисунок 1. Цель - интегрировать существующую систему My System с Rational Team Concert 

Отказ от ответственности и предварительные требования для использования примеров сценариев

Представленный здесь сценарий следует рассматривать только как пример. Если при выполнении сценария отображается одно из следующих сообщений об ошибке, вероятно, сервер Rational Team Concert настроен на использование самосертификации:

msxml3.dll: System Error: -2146697191
msxml3.dll: The system cannot locate the resource specified.

При доступе к серверу из Microsoft Internet Explorer отобразится сообщение об ошибке сертификата. Причина заключается в том, что клиент не доверяет серверу, поскольку сервер настроен на самосертификацию. Для использования примера сценария необходимо прежде всего решить эту проблему.

OSLC - это открытое сообщество организаций и разработчиков ПО, занимающееся стандартизацией интеграции различных инструментов управления жизненным циклом разработки ПО. Оно также определяет спецификации интеграции инструментальных средств. Базовая спецификация определяет использование RDF (Resource Description Framework) для представления данных и RESTful Web-сервисов для доступа к данным. Но My System предоставляет свой собственный интерфейс. В нашем примере это COM+ (Component Object Model+), к которому можно обращаться на разных языках, включая Microsoft Visual Basic или язык сценариев Visual Basic.

В данной статье рассматривается обращение к обеим системам при помощи языка сценариев Visual Basic. Примеры сценариев поставляются вместе со статьей (см. раздел Загрузки). В примерах сценариев используется спецификация OSLC Change Management и Rational Team Concert в качестве инструментального средства. Сценарий управляет данными, которые называются workitem (задача). Сценарий может создавать, обновлять или запрашивать задачи Rational Team Concert.

Обзор OSLC-сервиса и сценария на Visual Basic

На рисунке 2 представлена схема потока OSLC-сервисов из Root Service Document (корневой документ сервиса) через Catalog (каталог) и Service Provider (поставщик сервиса) в Work Item (работа).

Рисунок 2. Обзор OSLC-сервиса
flow diagram

Первый шаг - обращение к Root Service Document. Этот сервис предоставляет каталог сервиса. Например, он предоставляет каталог сервиса CM (Change Management - управление изменениями), показанного на рисунке 2, каталог сервиса SCM (source code management - управление исходными кодами), каталог сервиса Project Area Management (управление областью проекта) и т.д. В данном примере:

  • CM предоставляет сервис доступа к задачам.
  • Catalog предоставляет URL поставщика сервиса для каждой области проекта.
  • Service Provider предоставляет доступ к Work Item.

Наш сценарий использует набор сервисов, называемых Microsoft XML Core Services (MSXML). MSXML может быстро и эффективно обрабатывать XML-приложения. Он также имеет различные API для обработки содержимого XML-документов. OSLC использует RDF для представления данных, а MSXML может обрабатывать RDF-документы.

В таблице 1 приведены основные функции доступа к задачам, предоставляемые сценарием.

Таблица 1. Основные функции для управления задачами Rational Team Concert

Функция

Описание

JazzLogin() Войти на сервер Jazz Team Server, на котором размещено приложение Rational Team Concert.
CreateWorkItem() Создание новой задачи
UpdateWorkItem() Обновление задачи
QueryWorkItems() Запрос задачи с условиями
CreateParentChild() Создание отношения родитель-потомок между задачами

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

Обзор примера сценария

Перед выполнением примера сценария взгляните на листинг 1, в котором приведена главная часть сценария. Это поможет понять, насколько просто обращаться к интерфейсу задач Rational Team Concert при помощи сценария.

Листинг 1. Главная часть сценария

'--------------
' Определение параметров
' CLM-параметры
	url = "https://clm.example.com:9443/ccm"
	project = "TRADITIONAL"
	userid = "jazzadmin"
	passwd = "jazzadmin"
'-------------

	' Войти на сервер jazz-приложений
	Set http = JazzLogin(url, userid, passwd)

	' получить каталог сервисов от корневого jazz-сервиса.
	' получить фабрику workitem (используется фабрика по умолчанию) и сервис запросов
	' сервису update передается первоначальный URL, не url сервиса
	service_url = GetServicebyProjectName(http, url, project)
	factory_service = GetFactoryService(http, service_url)
	update_service = GetUpdateService(http, url)
	query_service = GetQueryService (http, service_url)


	'attrString имеет следующий формат
	'<attribute>,<value>,<attribute>,<value>

	' Создание примера задачи 
	attrString = "dcterms:type,task"
	attrString = attrString&","&"dcterms:title,This is sample title"

	workItemId = CreateWorkItem(http, factory_service, attrString)
	If (workItemId = -1) then
			WScript.ECHO "Workitem creation failed"
	End If


	' Обновление примера задачи
	attrString = "dcterms:title"&","&"This is sample title with update"

	workItemId = UpdateWorkItem(http, update_service, workItemId, attrString)
	If (workItemId = -1) then
		WScript.ECHO "Workitem update failed"
	End If

	' выполнение запроса 
	set resultSet = QueryWorkItems(query_service, "dcterms:identifier="&workItemID,
"dcterms:title")

	' отображение результатов
	call DisplayResultSet(resultSet)
	set resultSet = Nothing

	' Выход из сценария с кодом возврата 0 (ноль)
	WScript.Quit 0

Использование сценария

В данном разделе мы рассмотрим использование сценария для доступа к задачам Rational Team Concert.

Вход в Rational Team Concert

Сначала следует войти в Rational Team Concert. Для этого сценарий предоставляет функцию JazzLogin().

Листинг 2. Вход в Rational Team Concert

 ' Войти на сервер jazz-приложений
Set http = JazzLogin(url, userid, passwd) 

Функция JazzLogin() принимает три аргумента.

  • Параметр url - это URL для Rational Team Concert (например, https://rtc-server.example.com/ccm).
  • Второй и третий аргументы - это идентификатор пользователя и пароль для входа в Rational Team Concert.

В случае успешного входа возвращается объект MSXML2.XMLHTTP, являющийся, по существу, HTTP-подключением к серверу.

Получение OSLC-сервисов

Rational Team Concert предоставляет различные сервисы. Сценарий предоставляет три функции для получения сервисов:

  • Сервис получения фабрики: функция GetFactoryService().
  • Сервис обновления задач: функция GetUpdateService().
  • Сервис запроса задач: функция GetQueryService().

В листинге 3 приведена процедура получения сервисов задач.

Листинг 3. Пример кода сервисов получения фабрики

 service_url = GetServicebyProjectName(http, url, project)
factory_service = GetFactoryService(http, service_url)
update_service = GetUpdateService(http, url)
query_service = GetQueryService (http, service_url) 

Первый шаг - получение URL сервиса для указанного проекта Rational Team Concert. На рисунке 1 показаны четыре шага. Однако шаги 1, 2 и 3 выполняются в одной функции GetServicebyProjectName(). После получения URL сервиса функция GetFactoryService() получает сервис создания задач.

Указание атрибутов задач

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

 <attribute1 >,<value1>,<attribute2>,<value2>,…. 
 

Например, если вы хотите создать задачу только с заголовком, параметр должен иметь следующий вид:

 dcterms.title, Это пример заголовка 
 

Если вы хотите создать задачу с заголовком и описанием, укажите параметр следующим образом:

 dcterms.title,Это заголовок,dcterms.description, Это длинное описание 
 

В примере сценария аргумент подготавливается так, как показано в листинге 4.

Листинг 4. Пример кода подготовки аргумента

attrString = "dcterms:type,task" 
attrString = attrString&","&"dcterms:title,Это пример заголовка" 

При указании dcterms:type,task сценарий создаст задачу типа Task. Если этот параметр поменять на defect, он создаст задачу типа Defect. Полный список атрибутов задач приведен на странице Work Items Service provider for OSLC 2.0 CM Specification сайта Jazz.net.

Функции создания и обновления задач

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

Таблица 2. Три функции, предоставляемые для создания и обновления задач

Функция

Описание

CreateWorkItem(http, factory_service, attrString) Эта функция создает задачу. Она принимает три аргумента.

http - HTTP-соединение с сервером, возвращаемое функцией JazzLogin().

factory_service - URL фабрики создания задач. Этот URL получается посредством функции GetFactoryService().

attrString - атрибут задачи.

UpdateWorkItem(http, update_service, workItemId, attrString) Эта функция обновляет задачу. Она принимает четыре аргумента.

http - HTTP-соединение с сервером, возвращаемое функцией JazzLogin().

update_service - URL для обновления задачи.

workItemId - идентификационный номер задачи.

attrString - атрибуты задачи.

CreateParentChild (http, update_service, parentID, childIDs) CreateParentChild() создает отношение родитель-потомок между задачами, указанными параметрами parentId и childIds. childIDs - это массив задач-потомков.

update_service - это URL для обновления задачи. Эта функция вызывает функцию UpdateWorkItem().


Использование функций создания и обновления задач показано в листинге 5 и листинге 6.

Листинг 5. Создание новой задачи

workItemId = CreateWorkItem(http, factory_service, attrString) 
 

Листинг 6. Обновление задачи

workItemId = UpdateWorkItem(http, update_service, workItemId, attrString) 
 

Запрос задач и отображение результатов запроса

Для запроса задач и отображения результатов запроса используются функции QueryWorkitems() и DisplayResultSet().

Аргумент функции QueryWorkitems() принимает во втором и третьем аргументах oslc.where и oslc.select. Чтобы продемонстрировать формирование этих значений, рассмотрим запрос к базе данных (см. листинг 7).

Листинг 7. Пример запроса к базе данных

db> select id, title where id=100 from database 
 

Этот запрос будет возвращать id и title (идентификатгор и заголовок) записи, id которой равен числу 100. Функция QueryWorkitems() ведет себя аналогично. В примере сценария она используется аналогично коду из листинга 8 (немного модифицирован, чтобы показать запрос задачи с id=100).

Листинг 8. Запрос задачи с идентификатором, равным 100

set resultSet = QueryWorkItems(query_service, "dcterms:identifier=100", "dcterms:title") 
 

Запрос возвратит несколько задач в зависимости от оператора where . По этой причине функция QueryWorkItems() возвращает объект collection. Функция DisplayResultSet() подготавливается так, что может выводить возвращаемый объект collection в читабельном виде. Это похоже на большинство результатов запросов к базам данных.

Примеры использования сценария

Для выполнения примера сценария некоторые параметры нужно изменить. В листинге 9 показан фрагмент сценария, в котором указываются параметры.

Листинг 9. Часть сценария с определением параметров

' Определение параметра
' CLM parameters 
    url = "https://clm.example.com:9443/ccm" 
    project = "TRADITIONAL" 
    userid = "jazzadmin" 
    passwd = "jazzadmin" 

В таблице 3 описан каждый параметр

Таблица 3. Описание параметров

Параметр

Описание

url URL-адрес сервера Rational Team Concert
project Имя проекта в репозитории Rational Team Concert
userid Идентификатор пользователя для входа на сервер Jazz Team Server
passwd Пароль пользователя

Результаты выполнения сценария будут выглядеть примерно так, как показано в листинге 10.

Листинг 10. Результаты выполнения сценария

 dos>cscript OSLC-utility.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

503 This is sample title with update,503 

При выполнении сценария создается и обновляется задача 503. На рисунке 3 показан графический интерфейс задачи в Eclipse-клиенте.

Рисунок 3. Графический интерфейс задачи, созданной сценарием
Рисунок 3. Графический интерфейс задачи, созданной сценарием Рисунок 3. Графический интерфейс задачи, созданной сценарием

На рисунке 3 показаны фрагменты вкладок Overview и History. Поле Summary вкладки History показывает, что эта задача была обновлена. Заголовок This is sample title изменился на This is sample title with update.

Расширенное использование сценария

Рассмотренный сценарий можно расширить для различных применений. В листинге 11 приведен фрагмент сценария, создающего родительскую задачу и девять задач-потомков.

Листинг 11. Создание родительской задачи и 9 задач-потомков

' Создание родительской задачи 
attrString = "dcterms:type,task"
attrString = attrString>",">"dcterms:title,This is parent"
	parentId = CreateWorkItem(http, factory_service, attrString)
' Создание 9 задач-потомков
For counter = 1 to 9
	attrString = "dcterms:type,task"
	attrString = attrString>",">"dcterms:title,This is ">counter>" Child"
	childIds(counter-1) = CreateWorkItem(http, factory_service, attrString)
		
Next
	
' Затем настройте задачи-потомки на родителя
call CreateParentChild(http, update_service, parentId, childIds)

Перед циклом создается родительская задача. Затем сценарий создает девять задач-потомков. Идентификатор задачи имеет тип array . Эта родительская задача и задачи-потомки передаются в функцию CreateParentChild(). Графическое представление выполнения данного сценария показано на рисунке 4.

Рисунок 4. Результат работы сценария в графическом интерфейсе задачи
Рисунок 4. Результат работы сценария в графическом интерфейсе задачи

На рисунке 4 показано, что вкладка Links содержит ссылки на задачи-потомки, созданные этим сценарием.

Интеграция с другой системой

До сих пор наш сценарий занимался только созданием задач и некоторыми обновлениями, например обновлением информации задачи или добавлением задач-потомков. Основным назначением данного сценария является предоставление самого простого способа интеграции с существующей системой. Такой тип интеграции следовало бы назвать интеграцией с обменом данными (рисунок 5).

Рисунок 5. Стратегия интеграции между My System и Rational Team Concert
Рисунок 5. Стратегия интеграции между My System и Rational Team Concert

Если существующая система имеет такой интерфейс как COM+, она может обеспечить более простой способ доступа к языку сценариев Visual Basic. Типичный интерфейс может быть похож на код, приведенный в листинге 12.

Листинг 12. Типичный код на Visual Basic для доступа к информации в My System

Set app = CreateObject("System.Application") ' Создать объект application
Call app.login("<user>", "<password>") ' Войти в систему

set recordList = app.GetRecordList() ' Получить список записе

' Цикл для получения информации
For Each record In recordList
	' какие-либо действия
Next

Call app.Quit() ' Завершить приложение.

В этом псевдопримере объект application предоставляет интерфейс для получения всех записей и доступа к каждой из них в цикле. Пример можно расширить для создания задач Rational Team Concert (см. листинг 13).

Листинг 13. Пример кода для создания задач в Rational Team Concert

Set app = CreateObject("System.Application")' Создать объект application
Call app.login("<user>", "<password>") ' Войти в систему

set recordList = app.GetRecordList() ' Получить список записей

For Each record In recordList

	' преобразовать запись в пары атрибутов
	attrString = ConvertRecord(record)

	Call CreateWorkItem(http, factory_service, attrString)

Next

Call app.Quit() ' Завершить приложение.

В цикл добавлен вызов псевдофункции ConvertRecord(), которая должна преобразовывать запись My System в пары атрибутов. Затем они передаются в функцию CreateWorkItem(). В данном примере вся информация записей интегрируется с Rational Team Concert. Следует отметить, что сценарий интеграции должен использовать функцию UpdateWorkItem() для обмена данными между My System и Rational Team Concert.

В идеале система должна интегрироваться посредством ссылок, а не обмена данными. Дополнительная информация о ссылочном типе интеграции приведена на странице проекта Eclipse Lyo сайта Eclipse.org. Этот проект предоставляет SDK для реализации ссылочного типа интеграции.

Технология, используемая в сценарии

Поскольку вы можете захотеть модифицировать примеры сценариев, приведенные в данной статье, рассмотрим два фрагмента примера. В листинге 14 приведен код функции UpdateWorkItem().

Листинг 14. Фрагмент функции UpdateWorkItem()

Set workItemDoc = CreateWorkItemDocument(attrString)

http.Open "PUT", update_url, False
http.setRequestHeader "Content-Type", "application/xml"
http.setRequestHeader "Accept", "application/xml"
http.setRequestHeader "OSLC-Core-Version", "2.0"
http.send(workItemDoc)

Технология MSXML позволяет простым способом подключаться к Web-серверу. Например, первая строка листинга 14 должна открыть HTTP PUT-запрос с указанным URL. Затем отправляется информация о заголовке и реальный XML-документ, созданный функцией CreateWorkItemDocument(). Важно не забыть указать в заголовке OSLC-Core-Version, чтобы сервер Rational использовал спецификацию OSLC V2.0.

В сценарии используются различные функции работы с XML. В листинге 15 приведен фрагмент работы с XML-документом.

Листинг 15. Фрагмент работы с XML-документом

 set doc = Http.ResponseXML
set elements = doc.getElementsByTagName("oslc_cm:ChangeRequest") 

http.ResponseXML получает объект XML-документа, возвращенный с сервера Rational Team Concert. Для поиска тега в XML-документе используется doc.getElementsByTabName(). При помощи этого метода можно легко найти информацию, связанную с тегом в XML-документе. Альтернативный способ - использовать XPath, но в данном примере сценария он не использовался. Дополнительная информация о MSXML (Microsoft XML Core Service) находится на MSDN.microsoft.com.

Загрузка

Описание

Имя

Размер

Метод загрузки

Примеры сценариев и README-файл Sample_Scripts_and_README.zip 10КБ HTTP 


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=32072