编写高级项目脚本

此部分介绍何时需要使用高级项目脚本以及如何使用。

在本主题中︰

高级项目脚本概述

您可以定义高级项目脚本在后端处理项目数据。这些脚本可以帮助您操控项目用户的权限,这些权限是根据您的项目对实体创建、更新和删除的特定需求而定制的。它们还可确保使用 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)。

Copy code
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 插件) 创建缺陷,则即使“检测于发布”字段未填写,也能提交缺陷。为了确保新缺陷的“检测于发布”字段始终被填充,无论它们是如何创建的,您都需要编写高级项目脚本来扩展验证。

您的高级工作流脚本可能如下所示:

Copy code
function setFieldProperties(fieldName, Req){
    var bugfield = Bug_Fields(fieldName);
    bugfield.IsRequired = Req;
}

function Bug_Create(){
    setFieldProperties("BG_DETECTED_IN_REL", true);
}

用例 2:量身定制的用户权限管理

假设您已经定义了如下项目脚本,当“严重度”字段的值设置为“高”、“非常高”或“紧急”时,自动将缺陷的“优先级”字段填充为“紧急”:

Copy code
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 客户端 中的“优先级”字段。

  • 只要“严重度”字段设置为特定值,无论用户是否具有“优先级”字段的编辑权限,都确保“优先级”字段相应更新。

您的高级项目脚本可能如下所示:

Copy code
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 请求。

要为请求编写脚本,请执行以下操作:

  1. Web 客户端 横幅中,选择“设置” >“工作流”

  2. 在“脚本编辑器”选项卡中,在项目脚本树中的“工作流脚本”>“高级项目脚本”节点下,根据您希望何时触发代码,展开目标模块并选择要添加代码的请求。

    • 对于创建实体的请求,请查找 <实体>_Create 请求。

    • 对于更新实体的请求,请查找 <实体>_Update 请求。

    • 对于删除实体的请求,请查找 <实体>_Delete 请求。

    • 要编写可由同一模块中的其他请求使用的代码,请查找 <模块>_SharedFunction 请求。

    • 要编写可供多个模块中的请求使用的代码,请查找 Common script > SharedFunction 请求。

    有关请求的详细描述,请参阅高级项目脚本请求

  3. 将 JavaScript 代码添加到请求。

    请参阅编写高级项目脚本以供参考。

    Note: 对于脚本中的日期,请使用 YYYY-MM-DD 格式。

  4. 单击保存

返回页首

另请参阅: