Page tree
Skip to end of metadata
Go to start of metadata

页面上使用项目编码

1,在issue菜单管理中,增加自定义字段“项目编码”


2,在scriptrunner中增加 REST Endpoints

点击插件管理,进入scriptrunner管理菜单,点击REST Endpoints  点击 Create REST Endpoint


@WithPlugin("com.hktx.jzjr.project-code")   //外部接口秘钥
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonBuilder
import groovy.json.JsonOutput
import groovy.transform.BaseScript
import groovyx.net.http.ContentType
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.Method
 
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
import com.hktx.jzjr.projectcode.services.ServiceScript
import com.atlassian.jira.component.ComponentAccessor
import com.hktx.jzjr.projectcode.beans.ProjectCodeBean
 
@BaseScript CustomEndpointDelegate delegate
 
getProjectCodeQuery(httpMethod: "GET") { MultivaluedMap queryParams ->
 
def serviceScript = ComponentAccessor.getOSGiComponentInstanceOfType(ServiceScript)
def query = queryParams.getFirst("query") as String
 
def rt = [:]
if (query) {
def repos = serviceScript.queryProjectCodeByCode(query)  //调用外部接口
 
log.info(repos.code)
 
rt = [
items : repos.collect { ProjectCodeBean repo ->
def repoCode = repo.code
def repoName = repo.name
[
value: repoCode,
html : repoName.replaceAll(/(?i)$query/) { "<b>${it}</b>" }
+ "<span style=\"float: right\">${repoCode} ⭐</span>",
label: repoName,
icon : repoCode
]
}
]
 
}
return Response.ok(new JsonBuilder(rt).toString()).build()
}



3,在scriptrunner中增加Behaviour

并配置相应的项目关联
 


getFieldByName("项目编码").convertToMultiSelect([           //多选
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner/latest/custom/getProjectCodeQuery",
query: true, // keep going back to the sever for each keystroke
minQueryLength: 2,
keyInputPeriod: 100,
formatResponse: "general",
]
])


getFieldByName("项目编码").convertToSingleSelect([    //单选
    ajaxOptions: [
        url : getBaseUrl() + "/rest/scriptrunner/latest/custom/getProjectCodeQuery", 
        query: true, // keep going back to the sever for each keystroke
        minQueryLength: 1, 
        keyInputPeriod: 100, 
        formatResponse: "general", 
    ],
    css : "max-width: 500px; width: 500px",
])


4,在页面应用效果

  • No labels