Jira字段行为脚本故障:无法将Scheduled Start Time日期字段值复制至Planned Scheduled Start Time字段
解决Jira字段行为脚本复制日期字段值的问题
看起来你遇到的问题主要出在两个关键点上:字段赋值方向搞反了,以及日期值的格式没有匹配Jira表单字段的要求。咱们一步步来修正:
问题分析
- 字段方向错误:你的代码里是把
Planned Scheduled Start Time(目标字段)的值赋值给Scheduled Start Time(源字段),这和你想要的复制方向完全相反。 - 日期格式不兼容:Jira的日期时间字段在表单中需要特定格式的字符串(通常是ISO 8601标准格式),直接调用
toString()得到的格式Jira无法识别,直接传递原始Date对象也可能在字段行为的上下文里不生效。
修正后的Groovy脚本
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.datetime.DateTimeFormatterFactory import com.onresolve.jira.groovy.user.FieldBehaviours import groovy.transform.BaseScript @BaseScript FieldBehaviours fieldBehaviours // 定义源字段和目标字段的名称 final String SOURCE_FIELD = "Scheduled Start Time" final String TARGET_FIELD = "Planned Scheduled Start Time" // 获取字段实例(字段行为脚本中优先用getFieldByName) def sourceField = getFieldByName(SOURCE_FIELD) def targetField = getFieldByName(TARGET_FIELD) // 获取源字段的日期值(返回类型为Date) def sourceDate = sourceField.getValue() if (sourceDate) { // 使用Jira官方的日期格式化工具,生成表单能识别的格式 def dateFormatter = ComponentAccessor.getComponent(DateTimeFormatterFactory) .formatter() .forLoggedInUser() // 匹配当前用户的日期显示配置 .withStyle(com.atlassian.jira.datetime.DateTimeStyle.DATE_TIME) .format(sourceDate) // 给目标字段赋值 targetField.setFormValue(dateFormatter) } else { // 源字段为空时,清空目标字段值 targetField.setFormValue(null) }
关键说明
- 字段方向修正:明确区分源字段(要复制的字段)和目标字段(要赋值的字段),用
getFieldByName直接获取字段实例是字段行为脚本中最可靠的方式。 - 官方格式化工具:使用Jira自带的
DateTimeFormatterFactory来生成符合当前用户配置的日期格式,避免手动拼接格式导致的兼容性问题。 - 空值处理:增加了源字段为空时的逻辑,避免赋值空值时出现异常。
你提到硬编码日期能生效,正是因为硬编码的格式恰好符合Jira表单字段的要求,而之前脚本里的格式转换不正确,导致目标字段无法识别传入的值。
内容的提问来源于stack exchange,提问作者user1783675
相关产品推荐
相关产品推荐

