页面上使用项目编码
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,在页面应用效果