首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法在所有链接的故事和任务完成后自动将史诗状态更改为完成?

是否有方法在所有链接的故事和任务完成后自动将史诗状态更改为完成?
EN

Stack Overflow用户
提问于 2016-02-17 21:22:36
回答 3查看 4K关注 0票数 3

我是JIRA和看板的新手。我期待着,当我创作一部史诗,并将一些故事和任务与它联系起来。当所有与史诗相关的故事和任务完成后,史诗的状态就会自动改变(例如完成)。但情况似乎并非如此。我可以将史诗从待办事项转移到Done列,即使它的链接任务和故事仍然在待办事项中。有没有办法让JIRA防止这种情况发生?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-18 12:03:51

我一直在做类似的事情。我的意图是在状态更改到特定状态时,将另一个链接问题的分配设置为特定用户。

我这样做的工作流程的后置函数为:“将字段值设置为常量或Groovy表达式”

在你的情况下,我会做以下几件事:

  • 转到“关闭”转换,然后单击配置。
  • 选择postfunctions,并添加我告诉您的类型。
  • 标记“只在条件为真时执行”的复选框。
  • 设定你的条件。可能有点像issue.epic=your史诗。
  • 然后添加脚本,在其中恢复与史诗相关的所有问题,并检查它们的状态。
  • 创建您的逻辑,以便如果任何事情都是应该的,您只需使用MutableIssue对象更改状态即可。
  • 请记住,这个脚本将修改一个字段,我想您不能选择status作为要设置的字段。如果发生这种情况,请选择汇总,并存储当前值,并使用它结束脚本,并设置摘要值,其值与您的值相同。
  • 发布您的工作流程。

对不起,如果不清楚,但很难解释。如果你还需要其他的话请告诉我。

PD:如果你只是想在某个特定的时刻完成这个任务,而不是每个史诗都是自动的,只需添加脚本Runner插件,然后在控制台中运行您的脚本。容易多了。

问候

票数 1
EN

Stack Overflow用户

发布于 2016-07-14 07:59:28

也许这会对您有所帮助:我使用了jira,系统语言设置为“俄语”(而且我不擅长groovy),这就是为什么下面的脚本包含语言依赖项(如果使用不同于我的jira系统语言的话,应该编辑代码!(至少改变一下)

  1. 使用Scrip Runner插件
  2. 创建“自定义侦听器”并粘贴代码(代码不太好,但它正在工作): 进口com.atlassian.jira.component.ComponentAccessor;进口com.atlassian.jira.issue.IssueManager;进口com.atlassian.jira.issue.Issue;进口com.atlassian.jira.issue.link.IssueLinkManager;进口com.atlassian.jira.issue.link.IssueLink;进口com.atlassian.jira.issue.ModifiedValue;进口com.atlassian.jira.issue.util.DefaultIssueChangeHolder;com.atlassian.jira.issue.customfields.option.Options;进口com.atlassian.jira.issue.customfields.option.Option;进口com.atlassian.jira.issue.fields.config.FieldConfig;导入com.atlassian.jira.issue.customfields.manager.OptionsManager;import com.atlassian.jira.ComponentManager;componentManager ComponentManager = ComponentManager.getInstance();def groupMan = ComponentAccessor.getGroupManager() def authCon = ComponentAccessor.getCustomFieldManager() def changeHolder =新DefaultIssueChangeHolder();IssueManager issueManager = ComponentAccessor.getIssueManager();issueManager groupMan= componentManager.getComponentInstanceOfType(OptionsManager.class);issueLinkManager IssueLinkManager = ComponentAccessor.getIssueLinkManager() def curUser = authCon.getUser() def curUser= event.issue def epicLinkCf =curUser {it.name == 'Epic Link'} if(!epicLinkCf) {log.warn“无史诗链接字段”;返回} log.warn“现有史诗链接:${epicLinkCf.getValue(问题)}”字符串epicIssue =epicLinkCf.getValue(问题)问题史诗= issueManager.getIssueObject(epicIssue) // epicKey被传递到您的脚本//检查epic链接是否存在如果(!Epic )返回真正的def newEpicState =“IssueLink”log.warn史诗:“+史诗列表allOutIssueLink =epicLinkCf.getValue for (Iterator outIterator =allOutIssueLink.iterator;outIterator.hasNext();) { issueLink IssueLink= (IssueLink) outIterator.next();log.warn“子链接类型:”+ issueLink.getIssueLinkType().getName() //检查epic if (issueLink.getIssueLinkType().getName() ==“Epic”)的所有问题的状态(.getName= issueLink.getDestinationObject();log.warn“子状态:”+ chIssue.getStatusObject().getName() if(chIssue.getStatusObject().getName() ==“Впроцессе”){ newEpicState =“Впроцессе”}--如果(chIssue.getStatusObject().getName() != "Закрыто“& newEpicState !=”Впроцессе“){ newEpicState = "Сделать”}}customFieldManager.getCustomFieldObjects(epic).find {it.name ==‘史诗状态’} log.warn“当前史诗状态:+epicStatusCf.getValue(史诗) FieldConfig epicStatusFieldConfig =epicStatusCf.getRelevantConfig(史诗);String oldStatus = epicStatusCf.getValue( epic ) log.warn“新史诗状态:”+ newEpicState //设置新状态(如果需要的话) (oldStatus != newEpicState) { Options epicStatusOptions =epicStatusCf.getValue选项epicStatusDoneOption = epicStatusOptions.getOptionForValue(newEpicState,null);epicStatusCf.updateValue(null,epic,新ModifiedValue(epic.getCustomFieldValue(epicStatusCf),epicStatusDoneOption) log.warn“史诗状态更新!”}
票数 1
EN

Stack Overflow用户

发布于 2021-12-03 14:07:42

如果您使用的是Scriptrunner,那么您应该很好地使用scriptrunner代码。请查看scriptrunner的代码:

代码语言:javascript
复制
// Add the next line as a condition to the script listener, so it gets executed only for epic issues, the line must be written uncommented:
// issue.isEpic

// Check if the resolution has been changed
def resolutionChange = changelog.items.find {
    (it as Map).field == 'resolution'
} as Map
logger.info("The resolution change of issue '${issue.key}': ${resolutionChange}.")

if (!resolutionChange) {
    logger.info("The resolution didn't change.")
    return
}

// Compute the 'Epic Status' value to set based on the resolution value
def newEpicStatusValue = (resolutionChange.toString == 'Done') ? 'Done' : 'To Do'

// Get the 'Epic Status' field ID
final epicStatusField = get("/rest/api/2/field")
    .asObject(List)
    .body
    .find {
        (it as Map).name == 'Epic Status'
    } as Map
def epicStatusFieldId = epicStatusField.id

logger.info("Updating Epic Status field (${epicStatusFieldId}) to '${newEpicStatusValue}'.")
// Update the 'Epic Status' field value
put("/rest/api/2/issue/${issue.key}")
    .queryString("overrideScreenSecurity", Boolean.TRUE)
    .header("Content-Type", "application/json")
    .body([
        fields: [
            (epicStatusFieldId): [value: newEpicStatusValue]
        ]
    ])
    .asString()

您可以在jira中自动化这段代码,您的后功能或自动化。请在这个链接中找到更多的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35468017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档