执行自定义脚本
脚本操作是针对工作流转变执行脚本的工作流操作。
重要信息:工作流转变脚本的安全性
工作流转变脚本是一个功能强大的工具,因此,“能力越大,责任越大”:系统管理员必须仔细审阅转变脚本:以防 Codebeamer 系统出现任何故障、恶意攻击或安全问题!
为了强制执行安全审阅,已在 Codebeamer 9.4 中修订了工作流脚本的执行和位置。这意味着:
* 
出于安全考虑,只能执行系统管理员在 Codebeamer 安装中批准并上传到 config/scripts/workflow 目录的脚本!
此目录通常位于 $CB_HOMEt/tomcat/webapps/cb/config/scripts/workflow/ 目录下。
在 9.3.0 版本中,工作流脚本位于 $CB_HOMEt/tomcat/webapps/cb/WEB-INF/classes 目录下。
脚本执行
Codebeamer 20.07 版本及更早版本中:
自定义脚本始终在具有默认执行超时的单独线程中执行。
可通过“系统管理员”“应用程序配置”配置脚本执行超时,例如:

{
"workflowAction" : {
"scriptTimeoutInSeconds" : 2
}
}
将取消未在配置的超时内完成执行的脚本,但会开始整个事务。
Codebeamer 20.11 及更高版本中:
默认情况下,自定义脚本在没有任何执行超时的当前线程/事务中执行。
要在额外的线程/事务中运行脚本,需要将 scriptTimeoutInSeconds 明确配置为大于 0
处理旧式脚本被拒绝时的错误
工作流转变中的旧式脚本因安全设置而被拒绝时,可能会导致用户无法对项执行某些工作流转变。这将显示为错误消息:
要解决此问题,系统管理员可执行以下操作:
仔细审阅跟踪器中使用的工作流脚本的源代码
在批准脚本后,必须将脚本源上传到 config/scripts/workflow 文件夹中的新文件
将跟踪器重新配置为使用此新脚本文件。例如,要使用 "sample.groovy",需进行以下配置:
解决此问题后,工作流转变将再次正常运行。
需要注意的是,如果将“否决例外”标志设置为“假”,这意味着当未执行缺失或不安全脚本时,不会阻止/否决转变,但用户只会收到一条关于缺失或不安全脚本的警告消息。这种情况的纠正方法与上述相同。
使用脚本
首先,系统管理员必须仔细审阅并批准工作流转变脚本,然后将脚本文件上传到 Codebeamer 安装下的 "config/scripts/workflow" 目录中。
在此之后,上传的项可在跟踪器配置中使用,如下所示:
此操作有三个参数:
“脚本类型”为脚本类型/语言。
“脚本路径”是要执行的脚本的文件名。
“否决例外”指示脚本执行错误是中止触发事件 (true),还是仅进行记录 (false)。
目前支持以下脚本语言:
Groovy
Java 脚本 (服务器端)
以脚本形式写入工作流操作具有诸多优点。
部署更加容易:无需针对开发编译、部署和重新启动 Codebeamer 服务器。
代码更加精简:使用 Groovy 的高级功能可缩短代码。
快速调整:如果需求发生变化,只需更改 Groovy 脚本即可轻松调整。
存在以下缺点:
脚本可能存在安全风险。
无编译时错误/警告。只能在运行时检测到错误。
脚本执行上下文
可在脚本中访问以下上下文对象/变量:
名称
类型
说明
applicationContext
org.springframework.context.ApplicationContext
Spring 框架的上下文可用于访问 DAO 或管理器方法,以在系统中执行查询和更新。
scriptWorkflowListener
com.intland.codebeamer.event.impl.CustomScriptExecutor
运行脚本代码的 CustomScriptExecutor 实例。
logger
org.apache.log4j.Logger
log4j 记录器可用于从脚本执行日志记录。
event
com.intland.codebeamer.event.BaseEvent<ArtifactDto, TrackerItemDto, ActionData>
触发事件。
user
com.intland.codebeamer.persistence.dto.UserDto
触发事件的用户。
source
com.intland.codebeamer.persistence.dto.ArtifactDto
触发事件的源,例如状态转变、上报规则等。
transition
com.intland.codebeamer.persistence.dto.WorkflowTransitionDto
仅当从状态转变调用操作时,否则为 null。
subject
com.intland.codebeamer.persistence.dto.TrackerItemDto
作为触发事件主题的跟踪器项。
beforeEvent
java.lang.Boolean
是在主题项上处理触发事件“之前”还是“之后”调用脚本。
请知悉:对于每个触发事件,脚本将调用两次。
在主题项上处理触发事件之前调用一次。
在主题项上成功处理触发事件之后调用一次。
可通过检查变量 beforeEvent 的值来区分这两次执行。仅在之前阶段期间允许脚本抛出 com.intland.codebeamer.event.util.VetoException,在之后阶段将忽略。
示例脚本
有关自定义脚本的 (过期) 示例,请单击此处
这对您有帮助吗?