定制ClearQuest以通过所有者角色或组来分隔记录Word格式.docx
《定制ClearQuest以通过所有者角色或组来分隔记录Word格式.docx》由会员分享,可在线阅读,更多相关《定制ClearQuest以通过所有者角色或组来分隔记录Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
在我的例子中,我使用TestStudio作为模板,并解释了如何定制此模板,来按照提交者来分隔缺陷记录。
通常的步骤如下:
1.定义你的隔离方针,然后创建适当的组。
2.创建一个securitycontext记录类型。
3.修改你想要进行权限控制的记录类型,并增加一个reference字段。
4.如果需要,编写一些hook。
5.将模板应用于用户数据库,并做一些事先调整。
注意:
此方法并不限于缺陷记录;
它可以应用于任何你想进行权限控制的记录类型中。
然而,下面的场景将集中在缺陷管理上。
详细步骤
在此场景中,一个项目中的测试人员只能查看和修改他们自己提交的记录,但是测试经理组的成员可以查看所有的记录。
作为一个测试人员,每次你提交一个缺陷,缺陷的securitycontext字段会自动地将你设置为所有者。
只有ClearQuest管理员可以查看和修改securitycontext记录类型。
此例子假定你熟悉ClearQuest定制过程--我将会浏览一下这些步骤,但不是详述幕后发生了什么。
如果你对此过程比较陌生,请查看你的ClearQuest文档中的有关定制过程。
1.首先,你需要使用ClearQuestUserAdministration工具定义适当的组。
我通常为每个测试人员定义一个组,然后创建一个测试经理组。
在某种意义上,这些组代表了你的项目定义中的特定角色。
例如,图1-5显示了关于我定义的组的详细内容:
图1:
在ClearQuest中设置组
组xiaming、yangrong、zhanghan、yangrongwei和gengxueping都分别是单个测试人员的测试组。
TestManager组是测试经理角色的组。
图2:
TestManager组的定义
图3:
ClearQuest管理员的SuperAdmin组的定义
图4:
定义一个Guest组
如果经过ClearQuest管理员授权,你也可以设置一个Guest组,用于不在你的项目中的用户来访问那些缺陷记录。
图5:
为一个单独测试人员设置一个组
这个单个测试人员组的例子包括成员组Guest和TestManager。
2.打开ClearQuestDesigner,登录到你的目标schema数据库,并检出(checkout)TestStudio模版进行编辑。
增加一个新的状态无关记录类型,名为ACL(此过程的步骤如下面的图6-11所示)。
此记录类型用作securitycontext记录类型。
图6:
增加一个新的状态无关记录类型
图7:
ACL记录类型的字段定义
图8:
ACL记录类型的action定义
图9:
ACL记录类型的behavior定义
图10:
ACL记录类型的主键定义
图11:
ACL记录类型的form定义
3.修改缺省的缺陷记录类型,在缺陷记录类型中增加一个新字段。
这个字段用于对securitycontext记录的关联,如图12和13所示。
图12:
缺陷记录中的ACL字段定义
图13:
将ACL字段的behavior设置为USE_HOOK。
4.为了自动地分割缺陷,在关联字段上增加一个defaultvaluehook。
尽管ClearQuest支持两种脚本语言(VBScript和Perl),但是以下脚本的例子使用了Perl:
subacl_DefaultValue{
my($fieldname)=@_;
my$session;
my$username;
$session=$entity->
GetSession();
$username=$session->
GetUserLoginName();
$entity->
SetFieldValue($fieldname,$username);
}
5.在关联字段上增加一个permissionhook,在改变一个缺陷记录时设置控制权限。
subacl_Permission{
my($fieldname,$username)=@_;
my$result;
my$userGroups,$sessionObj;
my$AuthorizedUserGroup="
SuperAdmin"
;
#Bydefault,setthisfieldreadonly
$result=$CQPerlExt:
:
CQ_READONLY;
$sessionObj=$entity->
$userGroups=$sessionObj->
GetUserGroups();
if(!
@$userGroups){
}else{
foreach$strAnGroup(@$userGroups){
if($strAnGroupeq$AuthorizedUserGroup){
CQ_OPTIONAL;
last;
return$result;
6.在缺陷记录的action上增加一个accesscontrolhook。
在我的例子中,我在actionModify、Delete、Duplicate和Unduplicate上增加了此hook。
为了更好地维护和重用代码,我使用recordscripts来增强代码可重用性。
在一个action的accesscontrolhook中调用代码的一个例子如下:
subDefect_AccessControl{
my($actioname,$actiontype,$username)=@_;
my$params=
$actioname."
\n"
.$actiontype."
.$username;
$result=$entity-
>
FireNamedHook("
RS_AccessControl"
$params);
调用代码的一个例子,其是一个recordscript,名为RS_AccessControl:
subDefect_RS_AccessControl{
my($result);
my($param)=@_;
#recordtypenameisDefect
if(ref($param)eq"
CQEventObject"
){
#addyourCQEventObjectparameterhandling
codehere
}elsif(ref(\$param)eq"
SCALAR"
@params=split'
\n'
$param;
my$username=$params[2];
?
$fieldInfo=$entity-
GetFieldValue("
Submitter"
);
$strSubmitterName=$fieldInfo-
GetValue();
#testiftheuserbelongstogroup
"
TestManager"
$FlagYes="
yes"
$FlagNo="
no"
$AuthorizedUserGroup1="
$AuthorizedUserGroup2="
$flag=$FlagNo;
if(!
if(($strAnGroupeq$AuthorizedUserGroup1)||
($strAnGroupeq
$AuthorizedUserGroup2))
{
$flag=$FlagYes;
#testiftheuserissameasthe
submitterorbelongstogroup"
if(($usernameeq$strSubmitterName)||($flageq$FlagYes)){
$result=1;
$result=0;
#addyourhandlingcodeforothertypeparametershere,forexample:
#die("
Unknownparametertype"
7.使用用户组修改ACL记录类型上的所有action的控制权限,如图14所示。
图14:
设置控制权限
这显示了只有在"
组中的成员可以对ACL记录类型操作。
8.检入schema,并将此涉及应用到你的用户数据库中。
9.最后,ClearQuest管理员需要手工地增加一些securitycontext记录,这些记录与每个测试人员组关联在一起(图15)。
图15:
securitycontext记录
注释:
在此设计中,ACL记录的名字应当与提交者的userid完全一样。
例如,在图15中,如果一个提交者的userid是xiaming,那么相应的ACL记录的名字也是xiaming。
不错,这并不是那么难,是不是?
现在,你可以自己尝试设计,来看一下缺陷记录是否完全按照提交者分隔开了。
如果系统没有准确地分隔缺陷,重新再进行这些步骤。
祝你好运!