项目脚本示例
此部分提供一些示例供您参考,以帮助您编写自己的项目脚本。
在本主题中︰
- 示例:自定义新建缺陷对话框中的字段
- 示例:阻止用户执行操作
- 示例:更改实体详细信息对话框的选项卡名称
- 示例:将模板添加到备注字段
- 示例:更改基于用户组的字段
- 示例:根据另一个字段来更改一个字段
- 示例:字段更改时更改字段属性
- 示例:验证在特定情况下实体是否可以更新
- 示例:验证字段
- 示例:呈现动态字段列表
示例:自定义新建缺陷对话框中的字段
此示例显示如何自定义“新建缺陷”对话框中的字段布局和其他字段属性。可创建相似的代码来排列“缺陷详细信息”对话框的布局。
此示例包括以下示例函数:
-
SetFieldApp 函数。接收字段名及其属性作为参数,并将属性分配到字段。
在 Bug_SharedFunction 事件中添加以下代码。它分配以下字段属性: 字段可见性、字段是否必填、要显示该字段的页面 (选项卡) 数和视图顺序 (从左到右,从上到下)。
Copy codefunction SetFieldApp(fieldName, Vis, Req, PNo, VOrder){
var bugfield = Bug_Fields(fieldName);
bugfield.IsVisible = Vis;
bugfield.IsRequired = Req;
bugfield.PageNo = PNo;
bugfield.ViewOrder = VOrder;
console.log("SetFieldApp");
} -
FieldCust_AddDefect 函数。在“新建缺陷”对话框中对每个字段调用 SetFieldApp 函数,以设置字段的属性。对某些字段,FieldCust_AddDefect 检查当前用户所属的用户组,并相应地自定义字段属性。Bug_New 事件过程中有对 FieldCust_AddDefect 的调用。
-
在 Bug_New 事件中,添加以下示例代码以处理对所有用户组通用的字段。它只对特定用户组或针对不同用户有不同属性的用户组,为对话框中显示的字段使用条件语句。
JavaScript 示例:
Copy codefunction FieldCust_AddDefect()
{
// Initialize the fields of the defect
for (var i= 0; i<= Bug_Fields.Count -1; i++)
{
SetFieldApp(Bug_Fields.FieldById(i).FieldName, false, false, 100, 0);
}
var ViewNum = 0;
var PageNum = 0;
// Set fields that are in common for all user groups
SetFieldApp("BG_DESCRIPTION", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_SUMMARY", true, true, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_DETECTED_BY", true, true, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_DETECTION_DATE", true, true, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_DETECTION_VERSION", true, true, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_SEVERITY", true, true, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_PRIORITY", true, true, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_PROJECT", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_REPRODUCIBLE", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_STATUS", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
// Set fields that are different for different user groups.
// Since one user can belong to multiple user groups,
// or none of these groups, there is no need for an Else statement.
if (User.IsInGroup("Developer"))
{
SetFieldApp("BG_PLANNED_CLOSING_VERSION", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_PLANNED_FIX_TIME", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
}
if (User.IsInGroup("QATester"))
{
PageNum = PageNum + 1;
SetFieldApp("BG_USER_01", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
SetFieldApp("BG_USER_02", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
}
SetFieldApp("BG_ACTUAL_FIX_TIME", true, false, PageNum, ViewNum);
ViewNum = ViewNum + 1;
// ...
console.log("FieldCust_AddDefect");
}
-
在 Bug_New 事件过程中添加对 FieldCust_AddDefect 的调用,这样用户添加新缺陷时将触发它:
JavaScript 示例:
Copy codefunction Bug_New() {
FieldCust_AddDefect();
}
-
示例:阻止用户执行操作
此示例演示如何阻止用户在特定情况下执行操作。
如果缺陷状态为“新建”,则该代码会阻止用户删除缺陷。
将以下代码添加到 ActionCanExecute 事件过程,这样用户试图执行操作时将执行检查。
function ActionCanExecute(actionName) {
if (actionName === 'Defects.DeleteDefect') {
if (Bug_Fields("BG_STATUS").Value === 'New') {
MsgBox('Defect with New status cannot be deleted.');
return false;
}
}
return true;
}
示例:更改实体详细信息对话框的选项卡名称
此示例演示如何在“新建缺陷”对话框中自定义选项卡名称。此示例将选项卡设置为 General、Environments 和 Business Case。
将以下 JavaScript 代码添加到 Defects_GetDetailsPageName 事件过程,此过程在 ALM 打开“新建缺陷”对话框之前触发。
function GetDetailsPageName(pageName, pageNum) {
if (ActiveDialogName === "New Bug") {
var detailsPageName;
switch (pageNum) {
case 1:
detailsPageName = "General";
break;
case 2:
detailsPageName = "Environments";
break;
default:
detailsPageName = "Business Case";
break;
}
return detailsPageName;
}
}
示例:将模板添加到备注字段
可以用项目脚本将默认模板添加到备注字段。此示例将文本添加到用户定义的备注字段 BG_USER_25,以在添加缺陷时显示模板。
将以下 JavaScript 代码添加到 Bug_New 事件过程:
function Bug_New() {
Bug_Fields("BG_USER_25").Value = "<html><body><b>Step by step scenario:</b>" + "<br><br><br><b>How it affects the user:</b></body></html>";
console.log("Bug_New");
}
示例:更改基于用户组的字段
此示例演示如何按照输入缺陷的用户的用户组来更改字段值。
在此示例中,用户定义字段 BG_USER_01 是检测模式字段,检测到缺陷的用户可以输入发现它的方式。可能的值有 Formal testing、Informal testing 和 BTW。
该示例在缺陷由非 QATester 组的用户打开时,将检测模式字段的值设置为 BTW。如果缺陷由 QATester 组中的用户打开,则默认值设置为 Formal testing。
将以下 JavaScript 代码添加到 Bug_New 事件,这样添加缺陷时就会触发它:
function Bug_New() {
if (!(User.IsInGroup("QATester")))
{
Bug_Fields("BG_USER_01").Value = "BTW";
}
else
{
Bug_Fields("BG_USER_01").Value = "Formal testing";
}
console.log("Bug_New");
}
示例:根据另一个字段来更改一个字段
此示例演示如何根据输入另一个字段的值来更改字段值。
例如,当 Category 字段设置为 UI Suggestion 时可以将缺陷分配给用户 alex_qc,当 Category 字段设置为 Security Issue 时可以将缺陷分配给用户 alice_qc。
该示例假定用户定义的字段 BG_USER_05 用于存储类别。在“缺陷”模块中更改类别字段时,BG_RESPONSIBLE 字段将分配到相应值。
将以下 JavaScript 代码添加到 Bug_FieldChange 事件过程,这样用户更改缺陷的字段值时就会触发它。
function Bug_FieldChange(fieldName) {
if (fieldName == "BG_USER_05") {
switch (Bug_Fields("BG_USER_05").Value)
{
case "UI Suggestion":
Bug_Fields("BG_RESPONSIBLE").Value="alex_qc";
break;
case "Security Issue":
Bug_Fields("BG_RESPONSIBLE").Value="alice_qc";
break;
default:
Bug_Fields("BG_RESPONSIBLE").Value="non-assigned";
}
}
console.log("Bug_FieldChange");
}
示例:字段更改时更改字段属性
此示例演示如何在更改不同字段时更改字段的属性。
在此示例中,如果缺陷的状态 (
BG_STATUS)
更改为 Closed,则用户必须在字段“关闭于版本”(BG_CLOSING_VERSION) 中提供值。
将以下 JavaScript 代码添加到 Bug_FieldChange 事件过程,这样如果状态更改为 Closed,“关闭于版本”字段就为必填:
function Bug_FieldChange(fieldName) {
if (fieldName == "BG_STATUS")
{
if (Bug_Fields("BG_STATUS").Value == "Closed")
{
Bug_Fields("BG_CLOSING_VERSION").IsRequired=true;
}
else
{
Bug_Fields("BG_CLOSING_VERSION").IsRequired=false;
}
}
else
{
// Enter your code here.;
}
console.log("Bug_FieldChange");
}
示例:验证在特定情况下实体是否可以更新
此示例演示如何通过使用 CanPost 事件过程来执行所有字段的验证。例如,此代码段确保用户不能在没有添加注释的情况下拒绝缺陷。
在此示例中,用户不能将缺陷状态 (BG_STATUS) 更改为 Rejected,除非已在“注释”字段 (BG_DEV_COMMENTS) 中输入了一些解释文本。
将以下 JavaScript 代码添加到 Bug_CanPost 事件,这样用户试图拒绝缺陷时将执行检查。
function Bug_CanPost() {
// Initialize the function's return value to avoid unpredictable behavior.
var Bug_CanPost = false;
if (Bug_Fields("BG_STATUS").IsModified && Bug_Fields("BG_STATUS").Value == "Rejected" && !(Bug_Fields("BG_DEV_COMMENTS").IsModified))
{
Bug_CanPost = false;
MsgBox("You must enter a comment when rejecting a defect.");
return Bug_CanPost;
}
else
{
Bug_CanPost = true;
return Bug_CanPost;
}
console.log("Bug_CanPost");
}
示例:验证字段
此示例演示如何验证单个字段值。例如,以下代码段显示如何确保特定组中的用户无法降低缺陷的优先级。
在此示例中,如果用户在 QATester 组中,且正在更新 BG_PRIORITY 字段,则 BG_PRIORITY 字段的新值不能小于当前值。
此示例假定在项目的优先级字段列表中,以升序对值排序时,较低的优先级在前。例如,如果元素如下,则列表符合此需求:1 - 低,2 - 中,3 - 高。
将以下 JavaScript 代码添加到 Bug_FieldCanChange 事件过程,这样用户试图更改缺陷字段值时就会触发它。
function Bug_FieldCanChange(fieldName, newValue) {
// Initialize the function's return value to avoid unpredictable behavior.
var Bug_FieldCanChange = true;
if (User.IsInGroup("QATester") && fieldName == "BG_PRIORITY")
{
if (newValue < Bug_Fields("BG_PRIORITY").Value)
{
Bug_FieldCanChange = false;
MsgBox("You do not have permission to lower " + "defect priority.");
return Bug_FieldCanChange;
}
else
{
Bug_FieldCanChange = true;
return Bug_FieldCanChange;
}
}
else
{
// Enter your code here.
}
console.log("Bug_FieldCanChange");
}
示例:呈现动态字段列表
此示例演示如何根据另一个字段的值,在字段中呈现不同的字段列表。
用户定义的函数 SW_SetLists_Environment 会检查环境规范字段 (BG_USER_02) 的值,并将相应字段列表分配到环境类型字段 (BG_USER_01)。
此示例假定字段列表已在项目中定义。有关详细信息,请参阅自定义字段列表。
-
将以下 JavaScript 代码添加到 Bug_MoveTo 事件过程,这样用户在缺陷模块中更改聚焦对象时,就会调用用户定义的函数 SW_SetLists_Environment。
Copy codefunction Bug_MoveTo() {
SW_SetLists_Environment();
console.log("Bug_MoveTo");
}
-
将以下 JavaScript 代码添加到 Bug_FieldChange 事件过程,这样用户在“缺陷”模块中更改“环境类型”字段 (BG_USER_01) 的值时,就会调用用户定义的函数 SW_SetLists_Environment。
Copy codefunction Bug_FieldChange(fieldName) {
if (fieldName == "BG_USER_01")
{
SW_SetLists_Environment();
}
else
{
// Enter your code here.
}
console.log("Bug_FieldChange");
}
-
用户定义的函数 SW_SetLists_Environment 会检查环境规范字段 (BG_USER_02) 的值,并将相应字段列表分配到环境类型字段 (BG_USER_01)。
Copy codefunction SW_SetLists_Environment()
{
var listName;
switch (Bug_Fields("BG_USER_01").Value)
{
case "Browser":
listName = "Browsers";
break;
case "Database Type":
listName = "Database Type";
break;
case "Operating System":
listName = "Platform";
break;
case "Web Server":
listName = "Web Server";
break;
default:
listName = "Environment Specification";
}
Bug_Fields("BG_USER_02").List = Lists(listName);
console.log("Set Environment List");
}