通过 API 列出所有 JIRA 转换

Listing All JIRA Transitions via API

我想在 JIRA 中设置智能提交,但我的开发人员想知道他们转换的所有选项。为了帮助他们,我想打印所有转换名称的作弊-sheet(我相信他们足够聪明,可以从那里弄清楚什么是什么)。

但是当我查看 REST API 文档时,我只能找到一种方法来获取 list of transitions for a particular issue(大概是通过它的状态)。有没有办法获取任何工单在其工作流程中的任何时候都可以进行的 所有 转换的列表?

您可以获得具有 /rest/api/2/project/{projectIdOrKey}/statuses 端点的项目的所有转换。这是响应示例,请查看 "statuses" 数组:

[
    {
        "self": "http://localhost:8090/jira/rest/api/2.0/issueType/3",
        "id": "3",
        "name": "Task",
        "subtask": false,
        "statuses": [
            {
                "self": "http://localhost:8090/jira/rest/api/2.0/status/10000",
                "description": "The issue is currently being worked on.",
                "iconUrl": "http://localhost:8090/jira/images/icons/progress.gif",
                "name": "In Progress",
                "id": "10000"
            },
            {
                "self": "http://localhost:8090/jira/rest/api/2.0/status/5",
                "description": "The issue is closed.",
                "iconUrl": "http://localhost:8090/jira/images/icons/closed.gif",
                "name": "Closed",
                "id": "5"
            }
        ]
    }
]

但它并没有为您提供任何问题在任何时候都可能发生的转换的确切列表,而且我不确定 API 中是否存在这种方法。

public void changeStatus(IssueRestClient iRestClient,
        List<Statuses> JiraStatuses, String key) {
    String status = "To Do";
    for (Statuses statuses : vOneToJiraStatuses) {
        if (1 == statuses.compareTo(status)) {
            try {
                String _transition = statuses.getTransition();
                Issue issue = iRestClient.getIssue(key).get();
                Transition transition = getTransition(iRestClient, issue,
                        _transition);
                if (!(isBlankOrNull(transition))) {

                    if (!(issue.getStatus().getName()
                            .equalsIgnoreCase(_transition)))
                        transition(transition, issue, null, iRestClient,
                                status);
                }
            } catch (Exception e) {
                Constants.ERROR.info(Level.INFO, e);

            }
            break;
        }
    }

}

List 是一个 pojo 实现,其中 xml 中定义的状态和转换通过 setter/constructor.

注入
private void transition(Transition transition, Issue issue,
        FieldInput fieldInput, IssueRestClient issueRestClient,
        String status) throws Exception {

    if (isBlankOrNull(fieldInput)) {
        TransitionInput transitionInput = new TransitionInput(
                transition.getId());

                issueRestClient.transition(issue, transitionInput).claim();
        Constants.REPORT.info("Status Updated for : " + issue.getKey());
    } else {
        TransitionInput transitionInput = new TransitionInput(
                transition.getId());
        issueRestClient.transition(issue, transitionInput).claim();
        Constants.REPORT.info("Status Updated for : " + issue.getKey());

    }
}

public Transition getTransition(IssueRestClient issueRestClient,
        Issue issue, String _transition) {

        Promise<Iterable<Transition>> ptransitions = issueRestClient
            .getTransitions(issue);
    Iterable<Transition> transitions = ptransitions.claim();
    for (Transition transition : transitions) {

        if (transition.getName().equalsIgnoreCase(_transition)) {
            return transition;
        }
    }
    return null;
}

简而言之,使用 JIRA 的转换 API 我们可以获取所有转换以设置状态

您可以通过此端点列出给定票证的转换:

/rest/api/2/issue/${issueIdOrKey}/transitions

如需更深入的解释,请查看此处: Does the JIRA REST API require submitting a transition ID when transitioning an issue?