编写高级项目脚本
此部分介绍何时需要使用高级项目脚本以及如何使用。
在本主题中︰
高级项目脚本概述
您可以定义高级项目脚本在后端处理项目数据。这些脚本可以帮助您操控项目用户的权限,这些权限是根据您的项目对实体创建、更新和删除的特定需求而定制的。它们还可确保使用 ALM REST API 的应用程序之间的数据完整性和行为一致性。
当高级项目脚本被触发时
高级项目脚本由用户在 Web 客户端 用户界面中完成操作后发送到数据库的请求触发。
高级项目脚本在事件触发的项目脚本之后生效,作为确保一切按预期运行的补充机制。
例如,当用户在 Web 客户端 用户界面中单击“新建缺陷”时,将触发 Bug_New 事件。ALM 侦听 Bug_New 事件中编写的项目脚本,并相应地自定义“新建缺陷”对话框。用户提交缺陷后,会向后台发送创建缺陷的请求,并触发 Bug_Create 请求。ALM 根据 Bug_Create 请求中编写的脚本处理缺陷数据。
高级项目脚本适用的环境
默认情况下,高级项目脚本仅适用于 Web 客户端。如果要将这些脚本应用到使用 ALM REST API 的所有应用程序,请将 CLIENT_TYPES_BYPASS_REST_WF 站点参数更改为 None。有关此参数的详细信息,请参阅 ALM 站点参数。
高级项目脚本的用例
以下是高级项目脚本可以提供帮助的一些用例。
用例 1:应用程序之间的一致验证
假设您已经定义项目脚本来定义当用户创建缺陷时,所有用户组都需要“检测于发布”字段 (BG_DETECTED_IN_REL)。
function SetFieldApp(fieldName, Req){
var bugfield = Bug_Fields(fieldName);
bugfield.IsRequired = Req;
console.log("SetFieldApp");
}
function FieldCust_AddDefect()
{
for (var i= 0; i<= Bug_Fields.Count -1; i++)
{
SetFieldApp(Bug_Fields.FieldById(i).FieldName, false, false, 100, 0);
}
SetFieldApp("BG_DETECTED_IN_REL", true);
}
当用户从 Web 客户端 用户界面创建缺陷时,上述脚本可以正常工作。
但是,如果用户从使用 ALM REST API 的另一个应用程序 (例如 Excel 插件) 创建缺陷,则即使“检测于发布”字段未填写,也能提交缺陷。为了确保新缺陷的“检测于发布”字段始终被填充,无论它们是如何创建的,您都需要编写高级项目脚本来扩展验证。
您的高级工作流脚本可能如下所示:
function setFieldProperties(fieldName, Req){
var bugfield = Bug_Fields(fieldName);
bugfield.IsRequired = Req;
}
function Bug_Create(){
setFieldProperties("BG_DETECTED_IN_REL", true);
}
用例 2:量身定制的用户权限管理
假设您已经定义了如下项目脚本,当“严重度”字段的值设置为“高”、“非常高”或“紧急”时,自动将缺陷的“优先级”字段填充为“紧急”:
function Bug_FieldChange(fieldName){
if(fieldName === 'BG_SEVERITY'){
var severity = Bug_Fields("BG_SEVERITY").Value ;
if(severity === '3-High'||severity === '4-Very High'||severity === '5-Urgent'){
Bug_Fields("BG_PRIORITY").Value = '5-Urgent';
}
}
}
对于拥有“优先级”字段编辑权限的用户而言,上面的脚本可以正常工作。
但是,如果用户组没有“优先级”字段的编辑权限,则当该用户组中的任何用户将“严重度”字段设置为“高”、“非常高”或“紧急”时,无法自动填充该字段。因此,如果要实现以下两个目标,则需要编写高级项目脚本:
-
仍然禁止用户组编辑 Web 客户端 中的“优先级”字段。
-
只要“严重度”字段设置为特定值,无论用户是否具有“优先级”字段的编辑权限,都确保“优先级”字段相应更新。
您的高级项目脚本可能如下所示:
function Bug_Update(){
var severity = Bug_Fields("BG_SEVERITY").Value ;
if(severity === '3-High'||severity === '4-Very High'||severity === '5-Urgent'){
Bug_Fields("BG_PRIORITY").Value = '5-Urgent';
}
}
编写高级项目脚本之前
在编写高级项目脚本之前,您应该熟悉请求和对象。
将代码放置在适当的请求中,以便在将请求发送到数据库时调用它。
下表描述了每个请求的触发时间以及通过编辑请求可以实现的目标:
请求 | 描述 |
---|---|
<实体>_Create |
将实体添加到 ALM 数据库时会触发此请求。 例如,当要将新需求添加到数据库时,将会触发 Req_Create 请求。当要将新缺陷添加到数据库时,将会触发 Bug_Create 请求。 |
<实体>_Update |
当 ALM 数据库中更新实体时,将会触发此请求。 例如,当要将现有需求的更新添加到 ALM 数据库时,将会触发 Req_Update 请求。当要将对现有缺陷的更新添加到 ALM 数据库时,将会触发 Bug_Update 请求。 |
<实体>_Delete |
从 ALM 数据库中删除实体时会触发此请求。 例如,当要从 ALM 数据库中删除现有需求时,将会触发 Req_Delete 请求。当要从 ALM 数据库中删除现有缺陷时,将会触发 Bug_Delete 请求。 |
SharedFunction |
编写可由 SharedFunction 中的多个请求使用的代码。 |
高级项目脚本的对象
脚本根据从相关对象获取的信息 (例如字段信息和用户信息) 执行自定义。
有关详细信息,请参阅对象。
编写高级项目脚本
要编写高级项目脚本,您需要将 JavaScript 代码添加到由 REST 请求触发的请求中。例如,当数据库收到添加实体的请求时,将会触发 Create 请求。
要为请求编写脚本,请执行以下操作:
-
从 Web 客户端 横幅中,选择“设置”
>“工作流”。
-
在“脚本编辑器”选项卡中,在项目脚本树中的“工作流脚本”>“高级项目脚本”节点下,根据您希望何时触发代码,展开目标模块并选择要添加代码的请求。
-
对于创建实体的请求,请查找 <实体>_Create 请求。
-
对于更新实体的请求,请查找 <实体>_Update 请求。
-
对于删除实体的请求,请查找 <实体>_Delete 请求。
-
要编写可由同一模块中的其他请求使用的代码,请查找 <模块>_SharedFunction 请求。
-
要编写可供多个模块中的请求使用的代码,请查找 Common script > SharedFunction 请求。
有关请求的详细描述,请参阅高级项目脚本请求。
-
-
将 JavaScript 代码添加到请求。
请参阅编写高级项目脚本以供参考。
Note: 对于脚本中的日期,请使用 YYYY-MM-DD 格式。
-
单击保存。
另请参阅: