挂钩

本主题说明了 ClearQuest 挂钩的概念。

和触发器一样,挂钩是在指定时间运行的脚本的入口点,用于控制用户在 Rational® ClearQuest® 环境中的工作方式。

运行挂钩时使用的是超级用户特权,因此挂钩不受普通访问控制或字段行为限制的约束。 您可以使用挂钩来设置和重置通常处于只读状态的字段的值。 (系统字段无法重置,如“历史记录”字段。)必填字段仍是必填的。 有关更多信息,请参阅 IBM Rational ClearQuest API Reference操作和访问控制

支持以下四种类型的挂钩:

挂钩的脚本语言

您可以使用 VBScript(对于 Windows)和 Perl(对于 UNIX 系统和 Windows)来编写挂钩。缺省情况下,挂钩在 Windows 上以 VBScript 运行。 有关以 Perl 运行挂钩(对于 Windows)的信息,请参阅脚本语言

您可以向字段和操作挂钩添加以 VBScript 或 Perl 编写的脚本。 如果正在创建全局脚本或记录脚本,那么必须使用 VBScript 或 Perl。

为了便于存储和引用,您可以在同一模式中同时编写 VBScript 和 Perl 脚本。 但是,模式只会运行使用为该模式指定的语言来编写的脚本。 有关更多信息,请参阅脚本语言

在脚本编辑器中编写或编辑脚本。 定义新脚本时,Designer 会向脚本编辑器窗口添加该挂钩的调用语法。 调用语法是不可编辑的。Designer 还会添加可按需进行编辑的样本正文。 (初始正文已注释掉,除非除去注释标记,否则不会运行。)

Desinger 为 VBScript 和 Perl 提供了不同的脚本编辑器,并会在窗口的标题栏中指明编辑器类型。 在编写代码之前,请验证所使用的编辑器是否正确。

挂钩脚本的运行上下文

一致的运行上下文可简化 VBScript 和 Perl 挂钩的编写过程。 在挂钩调用 VBScript 或 Perl 脚本之前,Rational ClearQuest 软件会创建一个 Session 对象并以用户身份登录。 因为所有挂钩(包括全局脚本)都是在当前记录的上下文中运行的,因此会为您提供与该记录对应的 Entity 对象。 (全局脚本会共享与调用该记录的挂钩关联的 Entity 对象。)

在脚本中,您可以在不指定前置标识的情况下调用 Entity 对象的方法。 例如,您可以用以下方式来调用 Entity 对象的 GetSession 方法:

set curSession = GetSession
 

以此方式调用方法时,Rational ClearQuest 软件会假定您正在调用传递给挂钩的隐式 Entity 对象的方法。 如果要显式地引用此 Entity 对象,可以将记录类型的名称用作该对象的标识。 使用此标识有助于让一次可操控多个 Entity 对象的代码变得清晰明了,如在以下示例中,此标识将一个实体标记为另一个实体的重复项:

set curSession = GetSession  
 idName = GetFieldValue("id").GetValue  
 set currentObj = curSession.GetEntity("defect", idName)  
 ' Mark the entity with ID="SAMPL00000031" as a duplicate of this entity.
 ' Use the action named "duplicate".  
 set dupEntityObj = curSession.GetEntity("defect", "SAMPL00000031") 
 curSession.MarkEntityAsDuplicate dupEntityObj, currentObj, "duplicate"

因为脚本会影响字段的行为,所以请仔细地设计和测试挂钩。 例如,如果挂钩要求字段包含某种类型的值,那么即使未将该字段的行为未设置为 MANDATORY,该字段也会成为必填字段。

挂钩测试注意事项

如果挂钩代码编写错误,那么可能会在运行时引入难以辨认的错误。 验证模式时会对挂钩进行编译,且会对所有语法错误进行标记。 在检入模式之前,请先使用测试数据库测试该模式;在对用户数据库应用模式更改之前,请先备份该用户数据库。 有关更多信息,请参阅使用测试数据库测试模式

规划挂钩时,请考虑以下问题:

复制环境中的挂钩

许多与在复制环境中运行的挂钩相关的问题都和单站点数据库锁定问题相同。 单站点或复制环境中的挂钩功能测试也是相同的。 然而,某些 ClearQuest 挂钩的运行在复制环境和单站点环境中是不同的。 例如,对于可在某一记录的操作上下文中更新其他记录的挂钩,如果这些其他记录因不受控于当前站点而无法修改,那么这些挂钩可能会出错。

每条数据库记录都只能在其当前控制站点(这由记录的 ratl_mastership 字段中的副本站点名称指明)上进行更新。 在复杂的应用程序中,可将多条记录作为一项复杂事务的一部分来进行更新。 为复制环境设计和测试挂钩时,应考虑到这些原则。

对于存在交互链接记录的复制环境中的复杂应用程序,您设计的模式应能处理以下情况:
  • 父记录因控制权问题而无法修改。例如,如果父记录不受控于当前站点,那么无法修改该父记录。
  • 父记录可修改(受控于当前站点),但下级记录因控制权问题(不受控于当前站点)而无法修改。

另请参阅记录锁定验证模式

通过程序包安装的脚本

安装程序包时,可能会将字段挂钩或记录脚本添加到模式中。 这些脚本是程序包的一部分,而不是挂钩代码的一部分。

无法删除或修改程序包所拥有的脚本;它们不是模式所拥有的代码的一部分。 因此,为挂钩代码选择的缺省语言设置和程序包所拥有的挂钩的实现语言之间没有任何关系。


反馈