Listing All JIRA Transitions via API

前端 未结 3 2054
长情又很酷
长情又很酷 2021-01-13 05:27

I\'m looking to set up smart commits in JIRA, but my developers want to know all the options for their transitions. In order to help them, I\'d like to print a cheat-sheet

相关标签:
3条回答
  • 2021-01-13 05:42

    You can list the transitions of a given ticket via this endpoint:

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

    For a more in depth explanation take a look here: Does the JIRA REST API require submitting a transition ID when transitioning an issue?

    0 讨论(0)
  • 2021-01-13 05:48

    You can get all transitions for project with /rest/api/2/project/{projectIdOrKey}/statuses endpoint. Here is response example, look at "statuses" array:

    [
        {
            "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"
                }
            ]
        }
    ]
    

    But it doesn't give you exactly list of transitions that any issue can take at any time, and I'm not sure that such method exist in API.

    0 讨论(0)
  • 2021-01-13 05:49
    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 is a pojo implementation where statuses and transitions defined in xml are injected through 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;
    }
    

    In Short using Transition API of JIRA we can fetch all the transitions to set statuses

    0 讨论(0)
提交回复
热议问题