Conteúdo


Integre o Rational Team Concert usando a linguagem de script Visual Basic

Use os recursos de OSLC do Rational Team Concert para integrá-lo a um sistema existente

Comments

Cenário

Suponha que você trabalhe com um sistema desenvolvido pela tecnologia mais recente no momento, para conformidade. É obrigatório inserir informações sobre o desenvolvimento. O sistema se tornou estável o suficiente, por isso, o gerente de TI decidiu não atualizá-lo, exceto com relação a questões de vulnerabilidade de segurança e defeitos associados às novas correções do sistema operacional. Suponha também que o IBM® Rational Team Concert™ foi apresentado à equipe de desenvolvimento para fornecer suporte à entrega global. Provavelmente, os desenvolvedores não querem perder um tempo precioso inserindo as mesmas informações em ambos os sistemas. O objetivo deste artigo é ilustrar técnicas para integrar esse tipo de sistema.

A Figura 1 exibe a imagem que retrata o objetivo deste artigo. O My System é usado para inserir informações de desenvolvimento e possui uma interface COM+ com o sistema, enquanto que o Rational Team Concert foi apresentado pela equipe para acelerar a entrega global. O Rational Team Concert possui uma interface aberta chamada OSLC (Open Services for Lifecycle Collaboration).

Figura 1. O objetivo é integrar um sistema existente, My System, com o Rational Team Concert

A OSLC é uma comunidade aberta de desenvolvedores de software e organizações para a padronização da integração de diversas ferramentas de ciclo de vida de desenvolvimento de software. Ela também define especificações das integrações de ferramenta. A principal especificação é usar RDF (Resource Description Framework) como uma representação de dados e para usar serviços da web RESTful para acessar os dados. Porém, o My System fornece sua própria interface. Nesse exemplo, é COM+ (Component Object Model plus), que pode ser acessada por diversas linguagens, incluindo Microsoft Visual Basic ou a linguagem de script Visual Basic.

Este artigo descreve como acessar ambos os sistemas usando a linguagem de script Visual Basic. As amostras de script são fornecidas com este artigo (consulte a seção Downloads ). Estas amostras de script usam a especificação OSLC Change Management e Rational Team Concert como uma ferramenta. O script manipula dados chamados de itens de trabalho. O script pode criar, atualizar ou consultar um item de trabalho do Rational Team Concert.

Visão geral do serviço OSLC e do script do Visual Basic

A Figura 2 mostra um fluxograma dos serviços de OSLC, começando pelo Documento de serviço raiz e passando pelo Catálogo e pelo Provedor de Serviços, até o Item de trabalho.

Figura 2. Visão geral do serviço OSLC

A primeira etapa é acessar o Documento de serviço raiz. Esse serviço fornece o catálogo de serviços. Por exemplo, ele fornece um catálogo de serviços de CM (change management) (exibido na Figura 2), um catálogo de serviços SCM (source code management), um catálogo de serviços de gerenciamento de Área do projeto, entre outros. No exemplo para este artigo:

  • O CM fornece o serviço de acesso aos itens de trabalho.
  • O catálogo fornece a URL do provedor de serviço para cada área do projeto.
  • O Provedor de serviço permite o acesso ao Item de trabalho.

O script usa um conjunto de serviços chamado Microsoft XML Core Services (MSXML). O MSXML pode manipular aplicativos baseados em XML de maneira rápida e eficiente. Ele possui diversas APIs para manipular o conteúdo de documentos XML. O OSLC usa RDF como representação de dados, e o MSXML também pode manipular documentos RDF.

A Tabela 1 exibe as funções básicas para acessar itens de trabalho fornecidos pelo script.

Tabela 1. Funções básicas para manipular um item de trabalho do Rational Team Concert
FunçãoDescrição
JazzLogin() Login no Jazz™ Team Server, que hospeda o aplicativo Rational Team Concert.
CreateWorkItem() Criar um item de trabalho
UpdateWorkItem() Atualizar um item de trabalho
QueryWorkItems() Consultar itens de trabalho com condições
CreateParentChild() Criar um relacionamento de pai e filho entre os itens de trabalho

Observação:
Há diversas funções adicionais no script. Este artigo explica como usar essas funções para automatizar a criação e atualização do item de trabalho. Em seguida, explica como integrá-las a um sistema existente. Durante este artigo, algumas das práticas de codificação são omitidas, como a verificação de erro abrangente.

Visão geral da amostra de script

Antes de analisarmos como executar as amostras de script, observe a Listagem 1, que mostra a parte principal do script. Isso o ajudará a entender quão fácil é acessar a interface de item de trabalho do Rational Team Concert usando o script.

Listagem 1. Parte principal de um script

'--------------
' Parameter definition
' CLM parameters
	url = "https://clm.example.com:9443/ccm"
	project = "TRADITIONAL"
	userid = "jazzadmin"
	passwd = "jazzadmin"
'-------------

	' Login to jazz application server
	Set http = JazzLogin(url, userid, passwd)

	' obtain service catalog from jazz root service.
	' obtain workitem factory (use default factory) and query service
	' update service is given original URL, not service 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 has format such that
	'<attribute>,<value>,<attribute>,<value>

	' Sample workitem create
	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


	' Sample workitem update
	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

	' run query
	set resultSet = QueryWorkItems(query_service, "dcterms:identifier="&workItemID,
"dcterms:title")

	' display result set
	call DisplayResultSet(resultSet)
	set resultSet = Nothing

	' Exit the script with return status 0 (zero)
	WScript.Quit 0

Usando o script

Nesta seção, você verá como usar o script para acessar itens de trabalho do Rational Team Concert.

Efetue login no Rational Team Concert

A primeira etapa é efetuar login no Rational Team Concert. O script fornece uma função JazzLogin() para isso.

Listagem 2. Login no Rational Team Concert

 ' Login to jazz application server
Set http = JazzLogin(url, userid, passwd)

A função JazzLogin() usa três argumentos.

  • Um parâmetro url é uma URL para o Rational Team Concert (por exemplo, https://rtc-server.example.com/ccm).
  • O segundo e terceiro argumentos são o ID e senha do usuário para login no Rational Team Concert.

Após o login bem-sucedido, ele retorna um objeto MSXML2.XMLHTTP, que é basicamente uma conexão HTTP com o servidor.

Obtenha serviços OSLC

O Rational Team Concert fornece diversos serviços. O script fornece três funções para obtê-los:

  • Serviço Get factory: função GetFactoryService()
  • Serviço de atualização do item de trabalho: função GetUpdateService()
  • Serviço de consulta do item de trabalho: função GetQueryService()

A Listagem 3 mostra um procedimento para obter serviços do item de trabalho.

Listagem 3. Amostra de código para obter os serviços de fábrica

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

A primeira etapa é obter a URL do serviço para um projeto especificado do Rational Team Concert. A Figura 1 exibe quatro etapas. No entanto, as Etapa 1 a 3 são executadas em uma única função, GetServicebyProjectName(). Depois de obter a URL do serviço, a função GetFactoryService() obtém um serviço de criação de item de trabalho.

Especifique atributos do item de trabalho

Antes de criar ou atualizar um item de trabalho, os atributos para o item de trabalho devem ser preparados. Esses atributos são criados como uma cadeia de caractere simples neste formato:

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

Por exemplo, quando você desejar criar um item de trabalho apenas com um título, o parâmetro deve possuir o seguinte formato:

 dcterms.title, This is a sample title

Quando você desejar criar um item de trabalho com um título e uma descrição, especifique o parâmetro da seguinte maneira:

dcterms.title,This is title,dcterms.description, This is lengthy description

Na amostra de script, o argumento é preparado como exibido na Listagem 4

Listagem 4. Amostra de código para preparar o argumento

attrString = "dcterms:type,task" 
attrString = attrString&","&"dcterms:title,This is sample title"

Ao especificar dcterms:type,task, o script cria um item de trabalho de um tipo denominado Task. Quando esse parâmetro é alterado para defect, ele cria um tipo Defect de item de trabalho. Para obter uma lista completa dos atributos de item de trabalho, consulte a página Work Items Service provider for OSLC 2.0 CM Specification na Jazz.net.

Crie e atualize funções de item de trabalho

A Tabela 2 exibe uma lista de funções de criação e atualização de item de trabalho. O script de amostra também possui uma função para definir um relacionamento de pai e filho entre os itens de trabalho.

Tabela 2. Três funções fornecidas para a criação e atualização de um item de trabalho
FunçãoDescrição
CreateWorkItem(http, factory_service, attrString) Essa função cria um item de trabalho. Ela usa três argumentos.

http é uma conexão HTTP com o servidor retornado pela função JazzLogin().

factory_service é uma URL de fábrica para a criação de um item de trabalho. Essa URL é obtida por meio da função GetFactoryService().

attrString é um atributo de item de trabalho.
UpdateWorkItem(http, update_service, workItemId, attrString) Essa função atualiza um item de trabalho. Ela usa quatro argumentos.

http é uma conexão HTTP com o servidor retornado pela função JazzLogin().

update_service é uma URL para atualizar um item de trabalho.

workItemId é o número do ID de um item de trabalho.

attrString é um atributo de item de trabalho.
CreateParentChild (http, update_service, parentID, childIDs) CreateParentChild() cria um relacionamento pai e filho entre um item de trabalho especificado por parentId e childIds. O childIDs é um array de itens de trabalho-filho.

update_service é uma URL para atualizar um item de trabalho. Essa função chama internamente a função UpdateWorkItem().

Na amostra de script, a criação e atualização do item de trabalho são usadas como exibidos na Listagem 5 e na Listagem 6

Listagem 5. Criar um item de trabalho

workItemId = CreateWorkItem(http, factory_service, attrString)

Listagem 6. Atualizar um item de trabalho

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

Consultar os itens de trabalho e exibir o resultado da consulta

QueryWorkitems() e DisplayResultSet() podem ser usados para consultar itens de trabalho e exibir os resultados da consulta.

O argumento da função QueryWorkitems() usa oslc.where e oslc.select no segundo e terceiro argumentos. Para ilustrar de que maneira esses valores podem ser desenvolvidos, imagine uma linguagem de consulta de banco de dados como na Listagem 7.

Listagem 7. Uma linguagem de consulta de banco de dados de amostra

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

Essa consulta irá retornar a parte do id e title do registro, em que id corresponde ao número 100. Uma função QueryWorkitems() se comporta de maneira parecida. Na amostra de script, ela é usada como o código na Listagem 8 (ligeiramente modificado para indicar que o script irá consultar o item de trabalho em que qual id=100).

Listagem 8. O item de trabalho de consulta do identificador é igual a 100

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

A consulta irá retornar diversos itens de trabalho, dependendo da cláusula where . Por isso, a função QueryWorkItems() retorna um objeto de coleção. A função DisplayResultSet() é preparada para que possa mostrar o objeto de coleção retornado em formato legível. Isso é semelhante à maioria das saídas de consulta de banco de dados.

Exemplos de uso da amostra de script

Alguns parâmetros precisam ser modificados para testar a amostra de script. A Listagem 9 mostra a parte do script na qual os parâmetros são especificados.

Listagem 9. Uma parte de definição do parâmetro de um script

' Parameter definition
' CLM parameters
    url = "https://clm.example.com:9443/ccm"
    project = "TRADITIONAL"
    userid = "jazzadmin"
    passwd = "jazzadmin"

Cada parâmetro é explicado na Tabela 3

Tabela 3. Explicação dos parâmetros
ParâmetroExplicação
url URL do servidor do Rational Team Concert
project Nome de um projeto no repositório do Rational Team Concert
userid ID do usuário para login no Jazz Team Server
passwd Senha para o ID do usuário

Se o script for executado, o resultado será semelhante à Listagem 10.

Listagem 10. Resultado após a execução do script

 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

A execução do script criou o item de trabalho 503 e atualizou o mesmo item de trabalho. A Figura 3 mostra o GUI do item de trabalho real no cliente Eclipse.

Figura 3. GUI do item de trabalho real criado pelo script

A Figura 3 mostra partes das guias Overview e History. O campo Summary da guia History mostra que esse item de trabalho possui uma atualização. Ele era "This is sample title", mas foi alterado no script para "This is sample title with update".

Formas de ampliar o uso do script

É possível ampliar o script para diversos usos. A Listagem 11 é uma parte do script que cria um item de trabalho (pai) e nove itens de trabalho-filho.

Listagem 11. Criar o pai e 9 itens de trabalho-filho

' Parent workitem create
attrString = "dcterms:type,task"
attrString = attrString>",">"dcterms:title,This is parent"
	parentId = CreateWorkItem(http, factory_service, attrString)
' Create 9 child workitems
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
	
' Then set child workitems to the parent
call CreateParentChild(http, update_service, parentId, childIds)

Um item de trabalho é criado antes do loop como um item de trabalho-pai. Em seguida, o script cria nove itens de trabalho filhos. O ID do item de trabalho é definido como array. Esses itens de trabalho pai e filho são passados para a função CreateParentChild(). A apresentação da GUI dessa execução de script é exibida na Figura 4.

Figura 4. Resultado da GUI de item de trabalho real do script

A Figura 4 mostra que a guia Links possui links para itens de trabalho-filho criados por esse script.

Integração com outro sistema

Até o momento, o script manipulou somente a criação do item de trabalho e algumas atualizações, como a atualização de informações sobre o item de trabalho ou a adição de itens de trabalho-filhos. O fundamental desse script é fornecer a maneira mais fácil de realizar uma integração com um sistema existente. Essa integração deve ser chamada de troca de dados (Figura 5).

Figura 5. Estratégia de integração entre o My System e o Rational Team Concert

Se o sistema existente tiver uma interface como COM+, ele poderá fornecer a maneira mais fácil de acessar linguagem de script Visual Basic. Uma interface típica deve ser semelhante ao código na Listagem 12.

Listagem 12. Código Visual Basic típico para acessar informações em My System

Set app = CreateObject(“System.Application”) ' Create application object
Call app.login(“<user>”, “<password>”) ' Login to the system

set recordList = app.GetRecordList() ' Obtain list of records

' Loop to obtain information
For Each record In recordList
	' do something
Next

Call app.Quit() ' Terminate application.

Listagem 13. Amostra de código para criar itens de trabalho no Rational Team Concert

Set app = CreateObject(“System.Application”)' Create application object
Call app.login(“<user>”, “<password>”) ' Login to the system

set recordList = app.GetRecordList() ' Obtain list of records

For Each record In recordList

	' convert record into attribute pairs
	attrString = ConvertRecord(record)

	Call CreateWorkItem(http, factory_service, attrString)

Next

Call app.Quit() ' Terminate application.

O loop foi ampliado para chamar a função fictícia ConvertRecord(), que deverá converter o registro de My System em pares de atributo. Em seguida, ela é passada para a função CreateWorkItem(). Neste exemplo, todas as informações de registro são integradas com o Rational Team Concert. Após essa criação, observe que o script de integração deve usar a função UpdateWorkItem() para trocar dados entre o My System e o Rational Team Concert.

Idealmente, o sistema deve ser integrado por meio de vínculos em vez de troca de dados. Para obter mais informações sobre o tipo de vínculo de integração, consulte a página do projeto Eclipse Lyo em Eclipse.org. Esse projeto fornece o SDK para implementar o tipo de link de integração.

Resumo da tecnologia usada no script

Como pode ser necessário modificar scripts de amostra deste artigo, esta seção explica duas partes da amostra de script. A Listagem 14 é o código na função UpdateWorkItem().

Listagem 14. Uma parte da função 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)

A tecnologia MSXML permite a conexão com um servidor da web de maneira simples. Por exemplo, a primeira linha na Listagem 14 serve para abrir uma solicitação HTTP PUT com a URL especificada. A conexão envia informações sobre o cabeçalho e, em seguida, envia o documento XML real criado pela função CreateWorkItemDocument(). É importante especificar OSLC-Core-Version no cabeçalho para informar ao servidor do Rational que interaja com a especificação OSLC V2.0.

Diversas funções de manipulação XML são usadas no script. A Listagem 15 mostra uma parte da manipulação do documento XML.

Listagem 15. Parte da manipulação do documento XML

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

http.ResponseXML obtém um objeto de documento XML retornado do servidor Rational Team Concert. doc.getElementsByTabName() é usado para encontrar uma tag no documento XML. Ao usar esse método, é fácil encontrar informações associadas à tag no documento XML. Um método alternativo é usar XPath, mas isso não foi usado nas amostras de script. Para obter mais informações sobre o MSXML (Microsoft XML Core Service), consulte a documentação sobre o MSXML, disponível no site MSDN.microsoft.com.

Agradecimento

O autor expressa sua sincera gratidão a Paul Weiss e Ken Kumagai pela orientação ao escrever este artigo.


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Rational
ArticleID=837081
ArticleTitle=Integre o Rational Team Concert usando a linguagem de script Visual Basic
publish-date=09252012