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

O IBM Rational Team Concert é uma solução agile para gerenciamento de ciclo de vida do aplicativo (ALM) que ajuda na colaboração das equipes de desenvolvimento de software, independentemente de onde estejam localizadas. Ele possui diversos recursos, como gerenciamento de tarefa, gerenciamento de defeitos, gerenciamento de configuração de código-fonte, gerenciamento de compilação, entre outros. Além disso, implementa um serviço aberto chamado Open Services for Lifecycle Collaboration (OSLC), que permite a integração com um sistema existente, como uma ferramenta de gerenciamento de projeto ou de gerenciamento de atividade. Este artigo explica como aproveitar o serviço OSLC do Rational Team Concert usando linguagem de script Visual Basic e como integrá-lo a um sistema existente.

Takehiko Amano, IT Specialist, IBM

author photoTakehiko Amano é arquiteto de solução no Laboratório de Desenvolvimento de Software da IBM em Tóquio, no Japão. Ele trabalha como membro da iniciativa Unleash the Labs. Um de seus interesses envolve ferramentas e processos globais de desenvolvimento de software colaborativo.



25/Set/2012

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

Renúncia de responsabilidade e pré-requisitos para o uso destes exemplos de scripts

O script é fornecido como uma amostra e deve ser considerado no estado em que se encontra. Se você testar o script e receber uma mensagem de erro semelhante a uma destas, provavelmente o servidor do Rational Team Concert estará configurado para usar a autocertificação:

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

Se o servidor for acessado com o Microsoft Internet Explorer, uma mensagem de erro de certificado será exibida. O motivo dessa mensagem é o fato de que o cliente não confia no servidor, pois a instalação ocorre com autocertificação. Para usar a amostra de script, é necessário resolver esse problema primeiro.

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.


Download

DescriçãoNomeTamanho
Sample scripts and READMESample_Scripts_and_README.zip10KB

Recursos

Aprender

Obter produtos e tecnologias

  • Faça o download do Rational Team Concert a partir do Jazz.net e teste-o gratuitamente em até 10 projetos pelo tempo que desejar (requer registro). Se preferir, é possível experimentá-lo no Sandbox, sem instalá-lo no sistema.
  • Avalie o software IBM da forma que melhor lhe convier: faça o download da versão de avaliação, experimente-a on-line, use-a em um ambiente de nuvem ou passe algumas horas no no Ambiente de Simulação da SOA aprendendo a implementar Arquitetura Orientada a Serviços de forma eficiente.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


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