小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

基于cq API的腳本開發(fā)

 ala咪s 2015-08-21

基于 Rational ClearQuest API 的腳本開發(fā)技巧

本文主要介紹如何利用 Rational ClearQuest API 從代碼層次上實(shí)現(xiàn) Rational ClearQuest 的相關(guān)功能,并通過相關(guān)的例子幫助讀者掌握基于 Rational ClearQuest API 的腳本開發(fā)方式和技巧。

王 秉坤, 軟件工程師, IBM

張 濤 (zzhangt@cn.ibm.com), 軟件工程師, IBM

2008 年 1 月 30 日

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)系示意圖
模式庫與用戶數(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ù)庫示意圖
用 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)用方式,分別是:

  1. 在 ClearQuest hook 或腳本中調(diào)用
  2. 在外部應(yīng)用程序中調(diào)用

通過對(duì) Rational ClearQuest API 的調(diào)用,用戶和開發(fā)人員將可以從代碼層面上實(shí)現(xiàn)以下功能:

  1. 登陸用戶數(shù)據(jù)庫或者模式庫
  2. 瀏覽,編輯或創(chuàng)建新的數(shù)據(jù)記錄
  3. 創(chuàng)建查詢,運(yùn)行已有的查詢并且得到查詢的結(jié)果
  4. 生成圖和報(bào)表
  5. 瀏覽和更新用戶、組、數(shù)據(jù)庫信息

Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范

在 Rational ClearQuest API 中定義了很多對(duì)象和常量,為了便于區(qū)分,針對(duì)不同的編程語言,它們的定義遵循一定的命名規(guī)范。

基于 VBScript 的 Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范如表 1 所示:

表 1 基于 VBScript 的 Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范

前綴

描述

舉例

OAd 對(duì)象的前綴 OAdEntity
OAdSession
AD
常量的前綴 AD_BUTTON_CLICK
AD_ORACLE

基于 Perl 的 Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范如表 2 所示:

表 2 基于 Perl 的 Rational ClearQuest API 中對(duì)象及常量的命名規(guī)范

前綴

描述

舉例

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 所示:

表 3 Entity 對(duì)象的常用方法及描述

方法

描述

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ì)象與 Entity 對(duì)象關(guān)系圖

Session 對(duì)象的一些常用方法如表 4 所示:

表 4 Session 對(duì)象的常用方法及描述

方法

描述

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)用順序分為以下四步:

  1. 啟動(dòng) ClearQuest Session
  2. 登入用戶數(shù)據(jù)庫
  3. 操作 ClearQuest 用戶數(shù)據(jù)庫中的數(shù)據(jù)記錄
  4. 結(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è)操作包括以下幾步:

  1. 通過 Session 對(duì)象調(diào)用方法 GetAccessibleDatabases 獲得和模式庫相關(guān)聯(lián)的用戶數(shù)據(jù)庫列表,這個(gè)方法返回的是 DatabaseDesc 對(duì)象列表,其中每個(gè)對(duì)象包含一個(gè)用戶數(shù)據(jù)庫的信息
  2. 通過調(diào)用 DatabaseDesc 對(duì)象的方法可以得到相應(yīng)用戶數(shù)據(jù)庫的信息,比如數(shù)據(jù)庫名稱,與其相關(guān)聯(lián)的模式庫等
  3. 通過 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è)步驟:

  1. 通過調(diào)用 Session 對(duì)象的 GetWorkSpace 方法得到 WorkSpace 對(duì)象
  2. 調(diào)用 WorkSpace 對(duì)象的 GetCharMgr 方法得到 ChartMgr 對(duì)象
  3. 創(chuàng)建查詢的結(jié)果集,用 Execute 方法得到查詢結(jié)果
  4. 調(diào)用 ChartMgr 對(duì)象的 SetResultSet 方法設(shè)定圖中包含的數(shù)據(jù)
  5. 調(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è)步驟:

  1. 通過調(diào)用 Session 對(duì)象的 GetWorkSpace 方法得到 WorkSpace 對(duì)象
  2. 調(diào)用 WorkSpace 對(duì)象的 GetReportMgr 方法得到 ReportMgr 對(duì)象
  3. 調(diào)用 ReportMgr 對(duì)象的 SetHTMLFileName 方法設(shè)定報(bào)表文件存儲(chǔ)路徑
  4. 調(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)行下列的操作:

  1. 創(chuàng)建數(shù)據(jù)庫
  2. 刪除數(shù)據(jù)庫
  3. 創(chuàng)建用戶
  4. 創(chuàng)建組
  5. 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)圖
AdminSession 對(duì)象的層級(jí)結(jié)構(gòu)圖

表 5 列出了上述幾個(gè)比較重要的對(duì)象及其描述

表 5 AdminSession 相關(guān)對(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ù)庫,分以下幾步完成:

  1. 創(chuàng)建 AdminSession 對(duì)象
  2. 登陸模式庫
  3. 創(chuàng)建用戶數(shù)據(jù)庫
  4. 配置用戶數(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ā)和定制。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多