Project script examples
This section provides some examples for your reference to help you write your own project scripts.
Example: Customize fields in New Defect dialog box
This example shows how you can customize the field layout and other field properties in the New Defect dialog box. You can create similar code to arrange the layout of the Defect Details dialog box.
This example involves the following example functions:
-
SetFieldApp function. Receives a field name and its properties as parameters, and assigns the properties to the field.
Add the following code in the Bug_SharedFunction event. It assigns the following field properties: field visibility, whether the field is required, the number of the page (tab) on which the field should be displayed, and the view order (from left to right and from top to bottom).
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 function. Calls the SetFieldApp function for each field in the New Defect dialog box, to set the properties of the field. For some of the fields, FieldCust_AddDefect checks the user group to which the current user belongs, and customizes the field properties accordingly. A call to FieldCust_AddDefect is placed in the Bug_New event procedure.
-
In the Bug_New event, add the following example code that handles the fields that are common to all user groups. It uses conditional statements for the fields that appear in the dialog box only for specific user groups, or that have different properties for different users.
JavaScript example:
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");
}
-
Add a call to FieldCust_AddDefect in the Bug_New event procedure so that it will be triggered when a user adds a new defect:
JavaScript example:
Copy codefunction Bug_New() {
FieldCust_AddDefect();
}
-
Example: Prevent users from performing an action
This example demonstrates how you can prevent users from performing an action under a specific circumstance.
The code prevents users from deleting a defect if the defect status is New.
Add the following code to the ActionCanExecute event procedure so that the check is performed when a user attempts to execute an action.
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;
}
Example: Change tab names of entity details dialog box
This example demonstrates how to customize tab names in the New Defect dialog box. This example sets the tabs to General, Environments, and Business Case.
Add the following JavaScript code to the Defects_GetDetailsPageName event procedure, which is triggered before ALM opens the New Defect dialog box:
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;
}
}
Example: Add a template to a memo field
You can use project scripts to add a default template to a memo field. This example adds text to a user-defined memo field BG_USER_25 to display a template when a defect is added.
Add the following JavaScript code to the Bug_New event procedure:
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");
}
Example: Change a field based on the user group
This example demonstrates how you can change a field value according to the user group of the user entering the defect.
In this example, the user-defined field BG_USER_01 is a detection mode field in which the user who detected the defect can enter the way in which it was discovered. Possible values are Formal testing, Informal testing, and BTW.
The example sets the value of the detection mode field to BTW when a defect is opened by a user who is not in the QATester group. If the defect is opened by a user who is in the QATester group, the default value is set to Formal testing.
Add the following JavaScript code to the Bug_New event, so that it is triggered when a defect is added:
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");
}
Example: Change one field based on another field
This example demonstrates how you can change a field value based on the value entered into another field.
For example, you can have defects assigned to the user alex_qc when the Category field is set to UI Suggestion, and to the user alice_qc when the Category field is set to Security Issue.
The example assumes that the user-defined field BG_USER_05 is used to store the category. When the Category field is changed in the Defects module, the BG_RESPONSIBLE field is assigned the appropriate value.
Add the following JavaScript code to the Bug_FieldChange event procedure so that it is triggered when a user changes a field value for a defect.
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");
}
Example: Change field properties when a field changes
This example demonstrates how you can change the properties of a field when a different field is changed.
In this example, if the status of the defect(
BG_STATUS)
is changed to Closed, the user must provide a value in the field Closed in Version (BG_CLOSING_VERSION).
Add the following JavaScript code to the Bug_FieldChange event procedure, to make the Closed in Version field a required field if the status is changed to 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");
}
Example: Validate if an entity can be updated in specific cases
This example demonstrates how you can perform validations of all fields by using the CanPost event procedure. For example, this code segment ensures that a user cannot reject a defect without adding a comment.
In this example, a user cannot change the defect status (BG_STATUS) to Rejected unless some explanatory text has been entered in the Comment field (BG_DEV_COMMENTS).
Add the following JavaScript code to the Bug_CanPost event so that the check is performed when the user attempts to reject the defect.
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");
}
Example: Validate a field
This example demonstrates how to validate a single field value. For example, the following code segment shows how you can ensure that a user in a specific group cannot lower the priority of a defect.
In this example, if the user is in the QATestergroup and updating the BG_PRIORITY field, the new value of the BG_PRIORITY field cannot be lower than the current value.
This example assumes that in the Priority field list for the project, lower priorities come first when the values are sorted in ascending order. For example, the list meets this requirement if the elements are as follows: 1-Low, 2-Medium, 3-High.
Add the following JavaScript code to the Bug_FieldCanChange event procedure so that it is triggered when the user attempts to change a defect field value.
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");
}
Example: Present a dynamic field list
This example demonstrates how you can present a different field list in a field, depending on the value of another field.
The user-defined function SW_SetLists_Environment checks the value of the Environment Specification field (BG_USER_02) and assigns the appropriate field list to the Environment Type field (BG_USER_01).
This example assumes that the field lists have been defined in the project. For details, see Customize field lists.
-
Add the following JavaScript code to the Bug_MoveTo event procedure so that the user-defined function SW_SetLists_Environment is called when the user changes focus in the defects module.
Copy codefunction Bug_MoveTo() {
SW_SetLists_Environment();
console.log("Bug_MoveTo");
}
-
Add following JavaScript code to the Bug_FieldChange event procedure so that the user-defined function SW_SetLists_Environment is called when a user changes the value of the Environment Type field (BG_USER_01)in the Defects module.
Copy codefunction Bug_FieldChange(fieldName) {
if (fieldName == "BG_USER_01")
{
SW_SetLists_Environment();
}
else
{
// Enter your code here.
}
console.log("Bug_FieldChange");
}
-
The user-defined function SW_SetLists_Environment checks the value of the Environment Specification field (BG_USER_02) and assigns the appropriate field list to the Environment Type field (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");
}