程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Rational >> 使用 Visual Basic 腳本語言集成 Rational Team Concert

使用 Visual Basic 腳本語言集成 Rational Team Concert

編輯:Rational

場景

假設您為實現合規性,正在使用利用目前最新的技術構建的一個系統。必須輸入開發信息。該 系統已非常穩定,所以 IT 經理決定,除非出現與新操作系統補丁有關聯的安全漏洞問題和缺陷,否則不維護 系統。另外假設向開發團隊引入了 IBM Rational Team Concert 來支持全球交付。開發人員可能不希望浪 費寶貴的時間向兩個系統輸入相同的信息。本文的目的是演示集成這類系統的技術。

圖 1 給出了本文 的一個目標圖像。My System 用於輸入某種類型的開發信息,它擁有系統的一個 COM+ 接口,而團隊引入了 Rational Team Concert 來加速全球交付。Rational Team Concert 有一個名為 OSLC(開放式生命周期協作 服務)的開放接口。

圖 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(資源描述框架)作為一種數據表示,使用 RESTful Web 服務訪問數據。但 My System 提供了自己的接口。在本例中,該接口是 COM+ (Component Object Model plus),可通過各種語言進 行訪問,包括 Microsoft Visual Basic 或 Visual Basic 腳本語言。

本文將介紹如何使用 Visual Basic 腳本語言訪問兩個系統。文中提供了樣例腳本(請參見 下載 部分)。這些樣例腳本使用了 OSLC Change Management 規范和 Rational Team Concert 作為工具。該腳本處理名為工作項 的數據。該腳本創建 、更新或查詢一個 Rational Team Concert 工作項。

OSLC 服務和這段 Visual Basic 腳本概述

圖 2 顯示了 OSLC 服務的流程圖,它從 Root Service Document 流經 Catalog 和 Service Provider,最後到達 Work Item。

圖 2. OSLC 服務概述

第一步是訪問 Root Service Document。此服務提供了服務目錄。例如,它提供了一個 CM(變更管理)服務目錄(如圖 2 所示)、一個 SCM(源代碼管理)服務目錄、一個項目區域管理服務目錄,等等。在本文的示例中:

CM 提供了對工作項的訪問服務。

目錄提供了每個項目區域的服務提供者 URL。

服務提供者支持訪問工作項。

該腳本使用一組名為 Microsoft XML 核心服務 (MSXML) 的服務。MSXML 可以一種快速且高效的方式處理 基於 XML 的應用程序。它還擁有各種 API 來處理 XML 文檔的內容。OSLC 使用 RDF 作為數據表示,MSXML 也可處理 RDF 文檔。

表 1 給出了訪問該腳本所提供的工作項的基本函數。

備注:

腳本中還 有其他一些函數。本文介紹如何使用這些函數自動化工作項的創建和更新。然後介紹如何將它們與一個現有系 統基礎呢個。本文全篇省略了一些編碼實踐,比如全面的錯誤檢查。

樣例腳本概述

開始運行樣 例腳本之前,請看看清單 1,其中給出了腳本的主要部分。這將幫助您認識到使用該腳本訪問 Rational Team Concert 工作項接口有多容易。

清單 1. 腳本的主要部分

'--------------
' 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

使用腳本

在本節中,將了解如何使用該腳本訪問 Rational Team Concert 工作項。

登錄到 Rational Team Concert

第一步是登錄到 Rational Team Concert。 該腳本提供了一個 JazzLogin() 函數來完成此任務。

清單 2. 登錄到 Rational Team Concert

' Login to jazz application server

Set http = JazzLogin(url, userid, passwd)

JazzLogin() 函數接受 3 個參數。

url 參數是 Rational Team Concert 的 URL(例 如 https://rtc-server.example.com/ccm )。

第二參數和第三個參數是用於登錄 Rational Team Concert 的用戶 ID 和密碼。

成功登錄後,它返回一個 MSXML2.XMLHTTP 對象,該對象基本上是服務 器的一個 HTTP 連接。

獲取 OSLC 服務

Rational Team Concert 提供了各種服務。該腳本 提供了 3 個函數來獲取它們:

獲取工廠服務: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)

第一步 是獲取一個指定的 Rational Team Concert 項目的服務 URL。圖 1 顯示了 4 個步驟。但是,第 1 到 3 步 在一個函數 GetServicebyProjectName() 內完成。獲取服務 URL 後,GetFactoryService() 函數獲取一個工 作項創建服務。

指定工作項屬性

創建或更新工作項之前,必須准備好該工作項的屬性。這些屬 性使用以下格式創建為一個簡單的字符串:

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

例如,當您希望創建僅有一個標題 的工作項時,參數應為以下格式:

dcterms.title, This is a sample title

當希望創建包 含一個標題和一段描述的工作項時,可以采用以下方式指定參數:

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

在樣例腳本中,參數按清單 4 中所示 的方式來准備。

清單 4. 准備參數的樣例代碼

attrString = "dcterms:type,task"

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

通過指定 dcterms:type,task,該腳本創建了一個 Task 類型的工作項。在將此參數更改為 defect 時,它將創建一個 Defect 類型的工作項。

創建和更新工作項的函數

表 2 給出了創建和更新 工作項的函數列表。樣例腳本還提供了一個用於在工作項之間設置父子關系的函數。

在樣例 腳本中,可以按清單 5 和清單 6 中所示方式使用工作項的創建和更新。

清單 5. 創建一個工作項

workItemId = CreateWorkItem(http, factory_service, attrString)

清單 6. 更新一個工 作項

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

查詢 工作項和顯示查詢結果

QueryWorkitems() 和 DisplayResultSet() 可用於查詢工作項和顯示查詢的結 果。

QueryWorkitems() 函數參數在第 2 個參數和第 3 個參數中接受 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() 函數返回一個集合對象。提供了 DisplayResultSet() 函數,以便它能夠以人類可讀的格式輸出返回的集合對象。該輸出類似於大多數數據庫查詢輸出。

使 用樣例腳本的示例

必須修改一些參數,才能試用樣例腳本。清單 9 顯示了指定參數的腳本部分。

清單 9. 腳本的一個參數定義部分

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

每個參數將在表 3 中解釋。

如果運行該腳本,結果將類似於清 單 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 客戶端中的實際工作項 GUI。

圖 3. 該腳本創建的實際工作項 GUI

圖 3 顯示了 Overview 和 History 選項卡部分。History 選項卡的 Summary 字段表明此工作項有一個更新。該字 段之前顯示為 “This is sample title”,但它在腳本中已更改為 “This is sample title with update” 。

擴展腳本用途的方式

您可針對各種用途而擴展該腳本。清單 11 是創建一個工作項(父)和 9 個子工作項的腳本部分。

清單 11. 創建父工作項和 9 個子工作項

' 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)

工作項在進入循環之前被 創建為父工作項。然後該腳本創建了 9 個子工作項。該工作項 ID 被設置為 array。這些父工作項和子工作 項被傳遞到 CreateParentChild() 函數。該腳本執行過程的 GUI 表示如圖 4 所示。

圖 4. 從腳本返 回的實際工作項 GUI 結果

圖 4 表明 Links 選項卡擁有此腳 本創建的子工作項的鏈接。

與另一個系統集成

目前為止,該腳本僅處理工作項的創建和一些更 新,比如更新工作項信息或添加子工作項。該腳本的核心是提供與某個現有系統集成的最輕松的方式。這種集 成應稱為數據交換類型的集成(圖 5)。

圖 5. My System 和 Rational Team Concert 之間的集成戰 略

如果現有的系統有一個接口,比如 COM+,那麼它可以提供一種訪問 Visual Basic 腳本語言的更輕松的 方法。一個典型的接口應類似於清單 12 中的代碼。

清單 12. 訪問 My System 中的信息的典型 Visual Basic 代碼

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.

在這個偽示例中,應用程序提供了一個接口來獲取完 整的記錄,然後在某個循環中訪問每條記錄。可以對這個示例進行擴展,以創建 Rational Team Concert 工 作項,如清單 13 所示。

清單 13. 擴展後可在 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.

該循環已擴展,可調用 ConvertRecord() 偽函數,該 函數應將 My System 記錄轉換為屬性對。然後將屬性對傳遞給 CreateWorkItem() 函數。在本示例中,所有 記錄信息都與 Rational Team Concert 相集成。完成此創建過程後,您應會注意到,集成腳本應使用 UpdateWorkItem() 函數在 My System 和 Rational Team Concert 之間交換數據。

理想情況下,系統 應通過鏈接而不是數據交換來集成。有關鏈接類型的集成的更多信息,請參閱 Eclipse.org 上的 Eclipse Lyo 項目頁面。此項目提供了 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 中的第 1 行是使用指定的 URL 打開一個 HTTP PUT 請求。該連接首先發送頭部信息,然後發送 CreateWorkItemDocument() 函數創建的實際的 XML 文檔。一定要在頭部中指定 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 獲取 Rational Team Concert 服務器返回的 XML 文檔對象。doc.getElementsByTabName() 用於在 XML 文檔 中查找某個標記。通過使用此方法,很容易在 XML 文檔中找到與該標記有關的信息。一種替代方法是使用 XPath,但樣例腳本中沒有使用該方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved