• [转]Perform a JQL Search in ScriptRunner for Jira


    本文转自:https://library.adaptavist.com/entity/perform-a-jql-search-in-scriptrunner-for-jira

    Overview

    Use this snippet to look for issues based on a JQL search. This code can be used as part of a larger bulk-administration or workflow automation task, in the Script Console and other features.

    Example

    The available issue resolutions in a project have been updated, leaving several issues with incorrect resolution values. I want to locate all issues with the incorrect value, so I can perform a bulk action to update them all. To save me time manually searching, I can use this script to run a JQL search, locating all affected issues.

    import com.atlassian.jira.bc.issue.search.SearchService
    import com.atlassian.jira.component.ComponentAccessor
    import com.atlassian.jira.issue.search.SearchException
    import com.atlassian.jira.web.bean.PagerFilter
    import org.apache.log4j.Level
    
    // Set log level to INFO
    log.setLevel(Level.INFO)
    
    // The JQL query you want to search with
    final jqlSearch = "Some JQL query"
    
    // Some components
    def user = ComponentAccessor.jiraAuthenticationContext.loggedInUser
    def searchService = ComponentAccessor.getComponentOfType(SearchService)
    
    // Parse the query
    def parseResult = searchService.parseQuery(user, jqlSearch)
    if (!parseResult.valid) {
        log.error('Invalid query')
        return null
    }
    
    try {
        // Perform the query to get the issues
        def results = searchService.search(user, parseResult.query, PagerFilter.unlimitedFilter)
        def issues = results.results
        issues.each {
            log.info(it.key)
        }
    
        issues*.key
    } catch (SearchException e) {
        e.printStackTrace()
        null
    }

    Cloud

    def jqlSearch = "project = \"Some Project\" and issueType = Epic"
    
    post('/rest/api/2/search')
        .header('Content-Type', 'application/json')
        .body([
            jql: jqlSearch,
        ])
        .asObject(Map).body.issues.each { Map issue ->
            //Here you can do something with each issue
            logger.warn "Issue key: ${issue.key}"
            def fields = issue.fields
            logger.warn "Issue summary: ${(fields as Map).summary}"
        }

    https://library.adaptavist.com/entity/bulk-update-the-value-of-a-system-field-on-jira-issues

    Overview

    Use this script in the Script Console to update the value of a system field for all issues returned by a JQL query.

    Example

    As a project manager, I want to modify the description of a set of similar issues in a project. With this script, I can easily bulk change all of these issue descriptions automatically, saving me time and reducing the risk of human error.

    import com.atlassian.jira.component.ComponentAccessor
    import com.atlassian.jira.issue.search.SearchProvider
    import com.atlassian.jira.jql.parser.JqlQueryParser
    import com.atlassian.jira.web.bean.PagerFilter
    import com.atlassian.jira.issue.search.SearchQuery
    
    // The issues returned from that JQL will get altered
    final searchQuery = "project = TEST"
    
    // Get some components
    def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
    def searchProvider = ComponentAccessor.getComponent(SearchProvider)
    def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
    def issueService = ComponentAccessor.issueService
    
    // Perform the search
    def query = jqlQueryParser.parseQuery(searchQuery)
    def searchResults = searchProvider.search(SearchQuery.create(query, loggedInUser), PagerFilter.unlimitedFilter)
    
    // Iterate all the results to update each issue
    searchResults.results.each { documentIssue ->
        // Define the new params (a new description)
        def issueInputParameters = issueService.newIssueInputParameters()
        issueInputParameters.setDescription("A new description")
    
        // Update the issue
        def issueId = documentIssue.document.fields.find { it.name() == "issue_id" }.stringValue().toLong()
        def updateValidationResult = issueService.validateUpdate(loggedInUser, issueId, issueInputParameters)
        assert updateValidationResult.valid : updateValidationResult.errorCollection
    
        // Validate the update
        def issueResult = issueService.update(loggedInUser, updateValidationResult)
        assert issueResult.valid : issueResult.errorCollection
    }
  • 相关阅读:
    Android系统四层架构分享
    tracebace用法
    Hadoop生态系统入门进阶之一
    Eclipse无法显示Android设计界面解决方案
    va_start和va_end使用详解
    Android实现左右滑动效果
    Android实现网络多线程断点续传下载
    基于TCP Socket的简单网络通信
    Android通过手势实现图像拖拽功能
    SHELLEXECUTEINFO 结构详解
  • 原文地址:https://www.cnblogs.com/freeliver54/p/15885402.html
Copyright © 2020-2023  润新知