Jira Scriptrunner中如何用Groovy更新Original Estimate且不留变更历史
Scriptrunner Groovy更新Jira Original Estimate无痕迹方案
完整可运行脚本
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.ModifiedValue import com.atlassian.jira.issue.index.IssueIndexingService import com.atlassian.jira.util.ImportUtils // 替换为你的目标issue,实际场景可从上下文获取或通过issueKey查询 def issue = ComponentAccessor.issueManager.getIssueObject("TEST-123") // 新的Original Estimate值,单位为秒,示例为2小时 = 2 * 3600 = 7200秒 def newEstimateSecond = 7200L // 获取时间跟踪字段实例 def timeTrackingField = ComponentAccessor.fieldManager.timeTrackingField // 获取当前issue对应的字段布局项 def fieldLayoutItem = ComponentAccessor.fieldLayoutManager.getFieldLayout(issue).getFieldLayoutItem(timeTrackingField) // 构造ModifiedValue参数:第一个参数为旧值,第二个为新值 def modifiedValue = new ModifiedValue(issue.originalEstimate, newEstimateSecond) // 执行无痕迹更新:最后一个参数传null即不会生成变更历史记录 timeTrackingField.updateValue(fieldLayoutItem, issue, modifiedValue, null) // 可选操作:更新后重新索引,保证看板、搜索等场景的值即时同步 boolean originalIndexState = ImportUtils.isIndexIssues() ImportUtils.setIndexIssues(true) ComponentAccessor.getComponent(IssueIndexingService).reIndex(issue) ImportUtils.setIndexIssues(originalIndexState)
注意:脚本运行身份需要拥有目标issue的编辑权限,否则会更新失败
问题解答
- 如何获取对应Issue的该字段实例?
Original Estimate属于Jira内置的时间跟踪复合字段,可直接通过ComponentAccessor.getFieldManager().getTimeTrackingField()获取对应的字段实例。再调用ComponentAccessor.getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(时间跟踪字段实例),即可拿到当前issue对应的FieldLayoutItem参数。 - 代码中的ModifiedValue参数应当如何构造?
ModifiedValue的构造方法直接接收两个参数,第一个为字段当前旧值,第二个为要设置的新值。Original Estimate在Jira中以秒为单位存储,新旧值均需传入Long类型的秒数:旧值可直接从issue.originalEstimate获取,新值按需求换算为秒数传入即可。
内容的提问来源于stack exchange,提问作者Sesegma Tsydypova
相关产品推荐
相关产品推荐

