Rational ClearQuest 簡(jiǎn)介
Rational ClearQuest 是重要的變更管理工具,Rational ClearQuest 更能讓客戶根據(jù)自己的具體需求,靈活的設(shè)計(jì)變更管理流程。除此之外,Rational ClearQuest 還提供了一套編程接口,即 Rational ClearQuest API,讓用戶和開發(fā)人員可以根據(jù)需要通過編程來實(shí)現(xiàn) Rational ClearQuest 的相關(guān)功能,同時(shí)還可以通過編程來實(shí)現(xiàn)模式中 Hook 腳本的開發(fā)和定制,從而使整個(gè) Rational ClearQuest 產(chǎn)品的功能更加靈活和強(qiáng)大。本文就全面介紹了基于 Rational ClearQuest API 的腳本開發(fā)技巧,以便讀者了解如何通過編程來實(shí)現(xiàn) Rational ClearQuest 相關(guān)功能,以及如何實(shí)現(xiàn)模式中 Hook 腳本的開發(fā)和定制的過程和注意事項(xiàng)。
Rational ClearQuest API 簡(jiǎn)介
在 Rational ClearQuest 中有兩個(gè)非常重要的概念,一個(gè)是模式庫,一個(gè)是用戶數(shù)據(jù)庫,其中用戶數(shù)據(jù)庫需要與某個(gè)模式的某個(gè)版本相關(guān)聯(lián),如圖1所示。模式存放在模式庫中,用戶的數(shù)據(jù)存放在用戶數(shù)據(jù)庫中。用戶可以通過 Rational ClearQuest 客戶端訪問模式庫和用戶數(shù)據(jù)庫。Rational ClearQuest API 為用戶和開發(fā)人員提供了一套可編程接口,從代碼層面上實(shí)現(xiàn) Rational ClearQuest 的相關(guān)功能,訪問和操作模式庫及用戶數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù)。
圖1 模式庫與用戶數(shù)據(jù)庫的關(guān)系示意圖
一般來說,用戶使用 Rational ClearQuest 訪問和操作數(shù)據(jù)庫的過程,如圖2所示,用戶可以通過 ClearQuest 客戶端,調(diào)用 ClearQuest Core 中的代碼,而后 ClearQuest Core 通過 ODBC 建立與數(shù)據(jù)庫之間的連接。而 Rational ClearQuest API 可以在用戶和 ClearQuest Core 之間建立起橋梁,用戶通過 API 調(diào)用 ClearQuest Core 中的相應(yīng)模塊,進(jìn)而通過 ODBC 訪問數(shù)據(jù)庫。
圖2 用 ClearQuest 訪問數(shù)據(jù)庫示意圖
Rational ClearQuest API 提供了基于 VBScript 和 Perl 腳本的兩種接口,Rational ClearQuest API 的文檔中也分別提供了關(guān)于兩種接口的說明。對(duì)于 Linux 和 Unix 平臺(tái),我們可以調(diào)用基于 Perl 的 API,對(duì)于 Windows 平臺(tái),我們可以調(diào)用基于 VBScript 或 Perl 的 API。
Rational ClearQuest API 有兩種調(diào)用方式,分別是:
- 在 ClearQuest hook 或腳本中調(diào)用
- 在外部應(yīng)用程序中調(diào)用
通過對(duì) Rational ClearQuest API 的調(diào)用,用戶和開發(fā)人員將可以從代碼層面上實(shí)現(xiàn)以下功能:
- 登陸用戶數(shù)據(jù)庫或者模式庫
- 瀏覽,編輯或創(chuàng)建新的數(shù)據(jù)記錄
- 創(chuàng)建查詢,運(yùn)行已有的查詢并且得到查詢的結(jié)果
- 生成圖和報(bào)表
- 瀏覽和更新用戶、組、數(shù)據(jù)庫信息
Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范
在 Rational ClearQuest API 中定義了很多對(duì)象和常量,為了便于區(qū)分,針對(duì)不同的編程語言,它們的定義遵循一定的命名規(guī)范。
基于 VBScript 的 Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范如表 1 所示:
|
前綴 |
描述 |
舉例 |
|---|---|---|
| OAd | 對(duì)象的前綴 | OAdEntity OAdSession |
| AD |
常量的前綴 | AD_BUTTON_CLICK AD_ORACLE |
基于 Perl 的 Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范如表 2 所示:
|
前綴 |
描述 |
舉例 |
|---|---|---|
| CQ | 對(duì)象的前綴 | CQEntity CQSession |
| $CQPerlExt::CQ | 常量的前綴 | $CQPerlExt::CQ_BUTTON_CLICK $CQPerlExt::CQ_ORACLE |
另外,在 Rational ClearQuest API 的命名規(guī)范中,英文復(fù)數(shù)的對(duì)象名通常指一組以單數(shù)對(duì)象名命名的對(duì)象,比如 Schemas 就是一個(gè)包含多個(gè) Schema 對(duì)象的集合。還有,名稱后包含 Def 三個(gè)字母的對(duì)象一般用于定義以其前綴命名的對(duì)象,比如 EntityDef 就定義和描述了 Entity 對(duì)象的結(jié)構(gòu)。了解了這些,會(huì)幫助我們更好地閱讀,理解和使用 Rational ClearQuest API。
Rational ClearQuest API 中的對(duì)象,方法及其調(diào)用方式
Entity 對(duì)象和 EntityDef 對(duì)象
在 Rational ClearQuest Common Schema 中,每一個(gè)數(shù)據(jù)類型,對(duì)應(yīng)了用戶數(shù)據(jù)庫中的一張表,表中的每一條記錄對(duì)應(yīng)了一條屬于該數(shù)據(jù)類型的數(shù)據(jù)。在 Rational ClearQuest API 中,定義了 Entity 對(duì)象,Rational ClearQuest 用戶數(shù)據(jù)庫表中的每一條記錄可以對(duì)應(yīng)為一個(gè) Entity 對(duì)象。一條數(shù)據(jù)記錄的所有信息都可以存儲(chǔ)在一個(gè) Entity 對(duì)象中,通過 Entity 對(duì)象的方法可以得到一條記錄的每一數(shù)據(jù)項(xiàng)的值。通過創(chuàng)建 Entity 對(duì)象,用戶可以在代碼層次對(duì)數(shù)據(jù)記錄進(jìn)行一系列的操作。
Entity 對(duì)象具備兩個(gè)屬性,一個(gè)是 AttachmentFields,用來記錄該條記錄的附件,一個(gè)是 HistoryFields,用來記錄該條記錄的歷史日志,它們都是只讀的,無法通過程序進(jìn)行修改。
Entity 對(duì)象的一些常用方法如表 3 所示:
|
方法 |
描述 |
|---|---|
| AddAttachmentFieldValue | 為數(shù)據(jù)記錄添加附件及描述 |
| AddFieldValue | 為某數(shù)據(jù)記錄添加值 |
| Commit | 提交數(shù)據(jù)記錄 |
| GetActionName | 獲得操作名稱 |
| GetDbId | 獲得該數(shù)據(jù)記錄的 DBID |
| GetFieldChoiceList | 獲得某數(shù)據(jù)項(xiàng)的選項(xiàng)單 |
| GetFieldType | 獲得某數(shù)據(jù)項(xiàng)的類型 |
| GetFieldValue | 獲得某數(shù)據(jù)項(xiàng)的值 |
| Revert | 忽略對(duì)數(shù)據(jù)記錄做出的改動(dòng) |
| SetFieldChoiceList | 設(shè)定某數(shù)據(jù)項(xiàng)的選項(xiàng)單 |
| SetFieldRequirenessForCurrentAction | 設(shè)定某數(shù)據(jù)項(xiàng)的行為,可以是 Mandatory,Optional 或 Read-only |
| SetFieldValue | 設(shè)定某數(shù)據(jù)項(xiàng)的值 |
| Validate | 驗(yàn)證該數(shù)據(jù)記錄是否合法可以提交 |
由于每種數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)、數(shù)據(jù)項(xiàng)的行為、狀態(tài)、狀態(tài)跳轉(zhuǎn)、操作、Hook 都不相同,因此 Entity 對(duì)象有不同的結(jié)構(gòu),它的結(jié)構(gòu)就是由 EntityDef 對(duì)象來定義和描述的。EntityDef 對(duì)象中包含的這些信息是只讀的。
Session 對(duì)象及 Session 變量
在 Rational ClearQuest API 中,定義了 Session 對(duì)象,用戶可以通過 Session 對(duì)象訪問 ClearQuest 用戶數(shù)據(jù)庫、創(chuàng)建查詢、對(duì)數(shù)據(jù)記錄進(jìn)行操作。
圖 3 顯示出了 Session 對(duì)象與 Entity 對(duì)象的關(guān)系,通過 Session 對(duì)象,用戶可以登陸用戶數(shù)據(jù)庫,每一個(gè) Entity 對(duì)象對(duì)應(yīng)了某種數(shù)據(jù)類型在用戶數(shù)據(jù)庫中的一條數(shù)據(jù)記錄。
圖 3 Session 對(duì)象與 Entity 對(duì)象關(guān)系圖
Session 對(duì)象的一些常用方法如表 4 所示:
|
方法 |
描述 |
|---|---|
| BuildEntity | 創(chuàng)建數(shù)據(jù)記錄 |
| BuildQuery | 創(chuàng)建查詢 |
| BuildSQLQuery | 創(chuàng)建基于 SQL 語句的查詢 |
| DeleteEntity | 刪除數(shù)據(jù)記錄 |
| EditEntity | 編輯數(shù)據(jù)記錄 |
| EntityExists | 判斷某條數(shù)據(jù)記錄是否存在 |
| GetEntity | 獲得指定數(shù)據(jù)類型的數(shù)據(jù)記錄 |
| GetSessionDatabase | 獲得當(dāng)前 Session 訪問的數(shù)據(jù)庫名稱 |
| OutputDebugString | 輸出調(diào)試信息 |
| UserLogon | 以特定的用戶名和密碼登陸用戶數(shù)據(jù)庫 |
Session 變量作用于整個(gè) Session 周期中,對(duì)于整個(gè)登陸 Session 來說,Session 變量是全局變量。當(dāng)創(chuàng)建 Session 變量之后,可以通過當(dāng)前 Session 對(duì)象訪問 Session 變量,當(dāng) Session 結(jié)束時(shí),Session 變量會(huì)自動(dòng)被釋放。在程序中,使用 HasValue 方法可以判斷當(dāng)前 Session 是否定義了某個(gè) Session 變量。下面的代碼就是一個(gè)關(guān)于如何創(chuàng)建 Session 變量的例子。
VBScript example:
Dim myValue
myValue = "Hello World"
‘cuSession 為 Session 對(duì)象
if(curSession.HasValue(“Hello”))
{
‘獲得 Session 變量 Hello 的值
Dim newValue
newValue = curSession.NameValue("Hello")
}
else
{
‘創(chuàng)建變量 Hello, 并將 myValue 的值賦給 Session 變量
curSession.NameValue "Hello", myValue
}
Perl example:
my $myValue = "Hello World";
#$curSession 為 Session 對(duì)象
if($curSession->HasValue(“Hello”))
{
# 獲得 Session 變量 Hello 的值
my $newValue = $curSession->GetNameValue("Hello");
}
else
{
# 創(chuàng)建變量 Hello, 并將 myValue 的值賦給 Session 變量
$curSession->SetNameValue("Hello", $myValue);
}實(shí)例分析
使用 Rational ClearQuest API 訪問用戶數(shù)據(jù)庫
使用 Rational ClearQuest API 訪問用戶數(shù)據(jù)庫的基本調(diào)用順序分為以下四步:
- 啟動(dòng) ClearQuest Session
- 登入用戶數(shù)據(jù)庫
- 操作 ClearQuest 用戶數(shù)據(jù)庫中的數(shù)據(jù)記錄
- 結(jié)束 ClearQuest Session
在 Rational ClearQuest 的 hook 中,Session 對(duì)象會(huì)自動(dòng)被創(chuàng)建,因此這里主要討論如何在外部應(yīng)用程序中創(chuàng)建 Session 對(duì)象。
下面的代碼是如何在外部應(yīng)用程序中創(chuàng)建 Session 對(duì)象的例子:
VBScript example: Set curSession = CreateObject(“CLEARQUEST.SESSION”) Perl example: my $curSession = CQSession::Build(); # 釋放 Session 對(duì)象 CQSession::Unbuild($curSession);
下面的代碼是如何在 Hook 中獲得 Session 對(duì)象的例子:
VBScript example: Set currentSession = GetSession Perl example: my $curSession = $entity->GetSession();
在操作用戶數(shù)據(jù)庫的數(shù)據(jù)之前,需要使用 ClearQuest 授權(quán)的用戶名密碼登入數(shù)據(jù)庫,一般來說這個(gè)操作包括以下幾步:
- 通過 Session 對(duì)象調(diào)用方法 GetAccessibleDatabases 獲得和模式庫相關(guān)聯(lián)的用戶數(shù)據(jù)庫列表,這個(gè)方法返回的是 DatabaseDesc 對(duì)象列表,其中每個(gè)對(duì)象包含一個(gè)用戶數(shù)據(jù)庫的信息
- 通過調(diào)用 DatabaseDesc 對(duì)象的方法可以得到相應(yīng)用戶數(shù)據(jù)庫的信息,比如數(shù)據(jù)庫名稱,與其相關(guān)聯(lián)的模式庫等
- 通過 Session 對(duì)象調(diào)用方法 UserLogon,以用戶數(shù)據(jù)庫名稱,相關(guān)聯(lián)的模式庫,ClearQuest 用戶名和密碼為參數(shù),就可以登入用戶數(shù)據(jù)庫建立查詢對(duì)數(shù)據(jù)進(jìn)行操作了
下面的例子就是通過代碼實(shí)現(xiàn)了這一過程:
VBScript example:
Set Databases = curSession.GetAccessibleDatabases(“MASTER”, “admin”, “”)
for each db in Databases
Set dbName = db.GetDatabaseName
curSession.UserLogon("Mike", "1qaz2wsx", dbName, AD_PRIVATE_SESSION, "")
Next
Perl example:
my $Databases;
$Databases = $curSession->GetAccessibleDatabases("MASTR", "admin", "");
my $count = $Databases->Count();
for(my $i=0;$i<$count;$i++)
{
my $db = $databases->Item($i);
my $dbName = $db->GetDatabaseName();
my $curSession->UserLogon( "Mike", "1qaz2wsx", $dbName, "" );
}在 ClearQuest 的 Hook 中,則無需進(jìn)行上述這些數(shù)據(jù)庫登入操作,因?yàn)橛脩魯?shù)據(jù)庫的授權(quán)登入是由 ClearQuest 客戶端來控制的。
了解了使用 Rational ClearQuest API 訪問用戶數(shù)據(jù)庫的步驟后,我們有必要對(duì)如何使用 Rational ClearQuest API 操作用戶數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行詳細(xì)介紹。下面將分別介紹如何調(diào)用 Rational ClearQuest API 建立查詢、生成圖表的方法。
調(diào)用 Rational ClearQuest API 建立查詢
下面的代碼分別是使用 Session 對(duì)象的 BuildQuery 方法和 BuildSQLQuery 方法建立查詢的過程:
VBScript example:
'使用 BuildQuery 方法建立查詢
'建立針對(duì)數(shù)據(jù)類型“defect”的查詢
Set Query = curSession.BuildQuery ("defect")
Query.BuildField("id")
Query.BuildField("headline")
'建立查詢的結(jié)果集
Set Result = curSession.BuildResultSet (Query)
'運(yùn)行查詢,查詢結(jié)果會(huì)返回到結(jié)果集中
Result.Execute
'使用 BuildSQLQuery 方法建立查詢
'創(chuàng)建 SQL 語句
Set sqlQuery = “Select * from Defect”
'建立查詢的結(jié)果集
Set Result = curSession.BuildSQLQuery(sqlQuery)
'運(yùn)行查詢,查詢結(jié)果會(huì)返回到結(jié)果集中
Result.Execute
'根據(jù)結(jié)果集的查詢結(jié)果對(duì)數(shù)據(jù)進(jìn)行操作
while (Result.MoveNext == AD_SUCCESS)
{
Set Id = Result.GetColumnValue(1)
'獲取關(guān)于“defect”數(shù)據(jù)類型的數(shù)據(jù)記錄
DefectEntity = curSession.GetEntity "Defect" Id
'獲取相應(yīng)數(shù)據(jù)項(xiàng)的值
Set Head = DefectEntity.GetFieldValue("Headline").GetValue
Set State= DefectEntity.GetFieldValue("State").GetValue
}
Perl example:
# 使用 BuildQuery 方法建立查詢
# 建立針對(duì)數(shù)據(jù)類型“defect”的查詢
my $Query = $curSession -> BuildQuery ("defect");
$Query -> BuildField ("id");
$Query -> BuildField ("headline");
# 建立查詢的結(jié)果集
my $Result = $CurSession -> BuildResultSet ($Query);
# 運(yùn)行查詢,查詢結(jié)果會(huì)返回到結(jié)果集中
$Result -> Execute();
# 使用 BuildSQLQuery 方法建立查詢
# 創(chuàng)建 SQL 語句
my $sqlQuery = “Select * from Defect”;
# 建立查詢的結(jié)果集
my $Result = $curSession->BuildSQLQuery($sqlQuery);
# 運(yùn)行查詢,查詢結(jié)果會(huì)返回到結(jié)果集中
$Result->Execute();
# 根據(jù)結(jié)果集的查詢結(jié)果對(duì)數(shù)據(jù)進(jìn)行操作
while ($Result->MoveNext() == $CQPerlExt::CQ_SUCCESS)
{
my $Id = $Result->GetColumnValue(1);
# 獲取關(guān)于“defect”數(shù)據(jù)類型的數(shù)據(jù)記錄
my $DefectEntity = $curSession->GetEntity("Defect", $Id);
# 獲取相應(yīng)數(shù)據(jù)項(xiàng)的值
my $Head = $DefectEntity->GetFieldValue("Headline")->GetValue();
my $State= $DefectEntity->GetFieldValue("State")->GetValue();
}調(diào)用 Rational ClearQuest API 生成圖
在介紹調(diào)用 Rational ClearQuest API 生成圖表之前,有必要對(duì) API 中定義的 WorkSpace 對(duì)象作一個(gè)介紹,Rational ClearQuest 的 WorkSpace 包含查詢,圖表存儲(chǔ)的目錄層次關(guān)系。WorkSpace 對(duì)象主要就是用來儲(chǔ)存這些信息,在代碼中我們可以通過調(diào)用 Session 對(duì)象的 GetWorkSpace 方法得到 WorkSpace 對(duì)象。
在 Rational ClearQuest API 中,定義了 ChartMgr 對(duì)象,該對(duì)象提供了創(chuàng)建圖的接口。值得注意的是,ChartMgr 對(duì)象只支持 Windows 系統(tǒng)下的繪圖。
在 Windows 系統(tǒng)下調(diào)用 Rational ClearQuest API 生成圖可以分為以下幾個(gè)步驟:
- 通過調(diào)用 Session 對(duì)象的 GetWorkSpace 方法得到 WorkSpace 對(duì)象
- 調(diào)用 WorkSpace 對(duì)象的 GetCharMgr 方法得到 ChartMgr 對(duì)象
- 創(chuàng)建查詢的結(jié)果集,用 Execute 方法得到查詢結(jié)果
- 調(diào)用 ChartMgr 對(duì)象的 SetResultSet 方法設(shè)定圖中包含的數(shù)據(jù)
- 調(diào)用 ChartMgr 對(duì)象的 MakeJPEG 或 MakePNG 方法生成圖,并存儲(chǔ)于指定的文件路徑中
下面的代碼是調(diào)用 Rational ClearQuest API 生成圖的例子:
VBScript example:
'創(chuàng)建 WorkSpace 對(duì)象
Set WorkSpace = curSession.GetWorkSpace
Set ChartDef = WorkSpace.GetChartDef "Personal Queries/Sample_Chart"
'創(chuàng)建結(jié)果集
Set Result = curSession.BuildResultSet(ChartDef)
Result.SetMaxRowsInMemory(1000)
Result.Execute
'創(chuàng)建 ChartMgr 對(duì)象
Set chartMgr = WorkSpace.GetChartMgr
chartMgr.SetResultSet Result
'生成圖
chartMgr.MakeJPEG "C:\\ Chart.jpg"
Perl example:
# 創(chuàng)建 WorkSpace 對(duì)象
my $WorkSpace = $curSession->GetWorkSpace();
my $ChartDef = $WorkSpace->GetChartDef("Personal Queries/Sample_Chart");
# 創(chuàng)建結(jié)果集
my $Result = $curSession->BuildResultSet($ChartDef);
$Result->SetMaxRowsInMemory(1000);
$Result->Execute();
# 創(chuàng)建 ChartMgr 對(duì)象
my $chartMgr = $WorkSpace->GetChartMgr();
$chartMgr->SetResultSet($Result);
# 生成圖
$chartMgr->MakeJPEG("C:\\ Chart.jpg");調(diào)用 Rational ClearQuest API 生成報(bào)表
在 Rational ClearQuest API 中,定義了 ReportMgr 對(duì)象,該對(duì)象提供了創(chuàng)建報(bào)表的接口。值得注意的是,ReportMgr 對(duì)象也只支持 Windows 系統(tǒng)下報(bào)表的創(chuàng)建。
在 Windows 系統(tǒng)下調(diào)用 Rational ClearQuest API 生成報(bào)表可以分為以下幾個(gè)步驟:
- 通過調(diào)用 Session 對(duì)象的 GetWorkSpace 方法得到 WorkSpace 對(duì)象
- 調(diào)用 WorkSpace 對(duì)象的 GetReportMgr 方法得到 ReportMgr 對(duì)象
- 調(diào)用 ReportMgr 對(duì)象的 SetHTMLFileName 方法設(shè)定報(bào)表文件存儲(chǔ)路徑
- 調(diào)用 ReportMgr 對(duì)象的 ExecuteReport 方法生成報(bào)表
下面的代碼是調(diào)用 Rational ClearQuest API 生成報(bào)表的例子:
VBScript example:
'創(chuàng)建 WorkSpace 對(duì)象
Set WorkSpace = curSession.GetWorkSpace
'創(chuàng)建 ReportMgr 對(duì)象
Set reportMgr = WorkSpace.GetReportMgr "Personal Queries/Sample_report"
reportMgr.SetHTMLFileName "C:\\Report.html"
'生成報(bào)表
reportMgr.ExecuteReport
Perl example:
# 創(chuàng)建 WorkSpace 對(duì)象
my $WorkSpace = $curSession->GetWorkSpace();
# 創(chuàng)建 ReportMgr 對(duì)象
my $reportMgr = $WorkSpace->GetReportMgr ("Personal Queries/Sample_report" );
$reportMgr->SetHTMLFileName("C:\\Report.html");
# 生成報(bào)表
$reportMgr->ExecuteReport();調(diào)用 Rational ClearQuest API 創(chuàng)建,修改和刪除數(shù)據(jù)記錄
在用戶數(shù)據(jù)庫中創(chuàng)建,修改和刪除數(shù)據(jù)記錄主要通過調(diào)用 Entity 對(duì)象的相應(yīng)方法來實(shí)現(xiàn)。
下面的代碼是調(diào)用 Rational ClearQuest API 創(chuàng)建數(shù)據(jù)記錄的例子:
VBScript example:
'創(chuàng)建基于”Defect”數(shù)據(jù)類型的 Entity 對(duì)象
set DefectEntity = curSession.BuildEntity(“Defect”)
DefectEntity.SetFieldValue “Headline”“MyDefect”
DefectEntity.SetFieldValue “Severity”“1-Critical”
Set Status = DefectEntity.Validate
if Status = “” then
'提交數(shù)據(jù)記錄
DefectEntity.Commit
else
DefectEntiry.Revert
End if
Perl example:
# 創(chuàng)建基于”Defect”數(shù)據(jù)類型的 Entity 對(duì)象
my $DefectEntity = $curSession->BuildEntity(“Defect”);
$DefectEntity->SetFieldValue(“Headline”, “MyDefect”);
$DefectEntity->SetFieldValue(“Severity”, “1-Critical”);
my $Status = $DefectEntity->Validate();
if($Status eq “”)
{
# 提交數(shù)據(jù)記錄
$DefectEntity->Commit();
}
else
{
# 打印錯(cuò)誤信息
print $Status;
$DefectEntity->Revert();
}下面的代碼是調(diào)用 Rational ClearQuest API 修改數(shù)據(jù)記錄的例子:
VBScript example:
'得到 id 為“BUGDB00000001”的數(shù)據(jù)記錄
Set DefectEntity = curSession.GetEntity(“Defect”, “BUGDB00000001”)
'設(shè)定修改數(shù)據(jù)記錄的操作
curSession.EditEntity DefectEntity “Modify”
DefectEntity.SetFieldValue “Headline”“MyDefect”
DefectEntity.SetFieldValue “Severity”“1-Critical”
Set Status = DefectEntity.Validate
if Status = “” then
'提交數(shù)據(jù)記錄
DefectEntity.Commit
else
DefectEntiry.Revert
End if
Perl example:
# 得到 id 為“BUGDB00000001”的數(shù)據(jù)記錄
my $DefectEntity = $curSession->GetEntity(“Defect”, “BUGDB00000001”);
# 設(shè)定修改數(shù)據(jù)記錄的操作
$curSession->EditEntity($DefectEntity ,“Modify”);
$DefectEntity->SetFieldValue(“Headline”, “MyDefect”);
$DefectEntity->SetFieldValue(“Severity”, “1-Critical”);
my $Status = $DefectEntity->Validate();
if($Status eq “”)
{
# 提交數(shù)據(jù)記錄
$DefectEntity->Commit();
}
else
{
# 打印錯(cuò)誤信息
print $Status;
$DefectEntity->Revert();
}下面的代碼是調(diào)用 Rational ClearQuest API 刪除數(shù)據(jù)記錄的例子:
VBScript example: '得到 id 為“BUGDB00000001”的數(shù)據(jù)記錄 Set DefectEntity = curSession.GetEntity(“Defect”, “BUGDB00000001”) '刪除數(shù)據(jù)記錄 curSession.DeleteEntity DefectEntity “Delete” Perl example: # 得到 id 為“BUGDB00000001”的數(shù)據(jù)記錄 my $DefectEntity = $curSession->GetEntity(“Defect”, “BUGDB00000001”); # 刪除數(shù)據(jù)記錄 $curSession->DeleteEntity($DefectEntity ,“Delete”);
調(diào)用 Rational ClearQuest API 訪問模式庫
和訪問用戶數(shù)據(jù)庫類似,訪問模式庫,首先需要建立 AdminSession 對(duì)象,再調(diào)用該對(duì)象的 Logon 方法訪問模式庫,其中,AdminSession 對(duì)象允許用戶創(chuàng)建和模式庫相關(guān)的 Session 對(duì)象。
調(diào)用 Logon 成功后,可以使用 AdminSession 對(duì)象的其他方法進(jìn)行下列的操作:
- 創(chuàng)建數(shù)據(jù)庫
- 刪除數(shù)據(jù)庫
- 創(chuàng)建用戶
- 創(chuàng)建組
- 5.查詢模式、用戶數(shù)據(jù)庫、用戶和組信息
AdminSession 對(duì)象的層級(jí)結(jié)構(gòu)如圖 4 所示。AdminSession 對(duì)象的屬性中包含四個(gè)對(duì)象,分別是 Schemas 對(duì)象,Databases 對(duì)象,Groups 對(duì)象和 Users 對(duì)象。根據(jù)前面講的命名規(guī)范,我們會(huì)比較容易理解下面的層級(jí)結(jié)構(gòu)圖。其中,SchemaRevs 對(duì)象包含某一個(gè) Schema 對(duì)象所對(duì)應(yīng)模式 ( 即 Schema) 的所有版本,SchemaRev 對(duì)象包含其中某一版本的相關(guān)信息。
圖 4 AdminSession 對(duì)象的層級(jí)結(jié)構(gòu)圖
表 5 列出了上述幾個(gè)比較重要的對(duì)象及其描述
|
對(duì)象 |
描述 |
|---|---|
| Database | 可以存儲(chǔ)用戶數(shù)據(jù)庫的信息,包括數(shù)據(jù)庫名稱、登陸用戶名、密碼、數(shù)據(jù)庫的類型等 |
| User | 可以存儲(chǔ)模式庫的用戶信息,包括用戶名、密碼、對(duì)不同數(shù)據(jù)庫的權(quán)限等 |
| Group | 可以存儲(chǔ)組信息,包括組名、組所包含的用戶名、組權(quán)限所應(yīng)用的數(shù)據(jù)庫等 |
| Schema | 可以存儲(chǔ)模式信息,包括模式名稱及該模式相應(yīng)的各個(gè)版本信息 |
| SchemaRev | 可以存儲(chǔ)某一模式的特定版本信息及該版本的描述 |
用 Rational ClearQuest API 創(chuàng)建用戶數(shù)據(jù)庫,分以下幾步完成:
- 創(chuàng)建 AdminSession 對(duì)象
- 登陸模式庫
- 創(chuàng)建用戶數(shù)據(jù)庫
- 配置用戶數(shù)據(jù)庫參數(shù)
下面的例子就是通過代碼實(shí)現(xiàn)了這一過程:
VBScript example:
Dim adminSession
Dim myDb
Dim mySchema
Dim mySchemaRev
'創(chuàng)建 AdminSession 對(duì)象
Set adminSession = CreateObject("ClearQuest.AdminSession")
'登陸模式庫
adminSession.Logon "Mike", 1qaz2wsx"", "Schema_Repository_Name"
'獲取模式版本信息
Set mySchema = adminSession.Schemas.Item(2)
Set mySchemaRev = mySchema.SchemaRevs.Item(0)
'創(chuàng)建用戶數(shù)據(jù)庫
Set myDb = adminSession.CreateDatabase(“UDB")
'配置數(shù)據(jù)庫參數(shù)
With myDb
.RWLogin = "db2inst1"
.RWPassword = "db2inst1"
.Description = "creating database using API"
.vendor = 4 '或 AD_DB2
.DatabaseName = "TESTDB"
.SetInitialSchemaRev mySchemaRev
.TimeoutInterval = 120
.CheckTimeoutInterval = 5
'提交數(shù)據(jù)庫參數(shù)變更,如果配置參數(shù)不正確則返回錯(cuò)誤信息
.ApplyPropertyChanges
End With
Perl example:
my $adminSession;
my $myDb;
my $mySchema;
my $mySchemaRev;
my $mySchemaList;
my $mySchemaRevList;
# 創(chuàng)建 AdminSession 對(duì)象
$adminSession= CQAdminSession::Build();
# 登陸模式庫
$adminSession->Logon( "Mike", 1qaz2wsx"", "Schema_Repository_Name");
# 獲取模式版本信息
$mySchemaList = $adminSession->GetSchemas();
$mySchema =$mySchemaList ->Item(2);
$mySchemaRevList = $mySchema->GetSchemaRevs();
$mySchemaRev = $mySchemaRevList->Item(0);
# 創(chuàng)建用戶數(shù)據(jù)庫
$myDb = $adminSession->CreateDatabase(“UDB");
# 配置數(shù)據(jù)庫參數(shù)
$myDb->SetRWLogin( "db2inst1");
$myDb->SetRWPassword("db2inst1");
$myDb->SetDescription( "creating database using API”);
$myDb->SetVendor(4); # 或 AD_DB2
$myDb->SetDatabaseName("TESTDB");
$myDb->SetInitialSchemaRev($mySchemaRev);
$myDb->SetTimeoutInterval(120);
$myDb->SetCheckTimeoutInterval(5);
# 提交數(shù)據(jù)庫參數(shù)變更,如果配置參數(shù)不正確則返回錯(cuò)誤信息
$myDb->ApplyPropertyChanges(0);
CQAdminSession::Unbuild($adminSession);總結(jié)
本文介紹了 Rational ClearQuest API 中的對(duì)象、常量命名規(guī)范,并針對(duì)比較重要的幾個(gè)對(duì)象及其方法進(jìn)行了介紹,最后介紹了如何使用 Rational ClearQuest API 訪問操作用戶數(shù)據(jù)庫和模式庫。使用好 Rational ClearQuest API 不僅可以幫助用戶和開發(fā)人員方便地在外部應(yīng)用程序中實(shí)現(xiàn) Rational ClearQuest 的相關(guān)功能,而且可以幫助用戶和開發(fā)人員進(jìn)行模式中 Hook 腳本的開發(fā)和定制。





