编写Behaviour,在表单初始化时将文本字段转换为选择字段或多选字段。
还可以指定字段的可用选项,包括键入搜索时执行的选择器函数。
以下我们以:从Jira问题中选取 来演示一个例子
链接文本字段的显示是来自于JQL查询的问题的可搜索列表内容。比如希望单文本字段“GIT项目名称”,需要从一个服务器的返回列表中选择。
第一步
验证一个过滤器,使唤之能够返回正确的数据,比如内容如下
project ="DEMO ORDER BY key ASC"
第二步
创建一个Behaviour,并编写脚本如下:
getFieldByName("GIT项目名称").convertToSingleSelect([
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner-jira/latest/issue/picker",
query: true,
data: [
currentJql : "project =EMO ORDER BY key ASC",
],
formatResponse: "issue"
],
css: "max-width: 500px; width: 500px",
])
第三步
将此Behaviour的内容关联到WXJ项目,Story的问题类型中,如
验证
接下来,我们可以来对之进行验证
ajaxOptions说明
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner-jira/latest/issue/picker",
query: true, //在进行选择时,每次按键结束都将后到以进行查询
//以下信息是请求后台的数据请求内容
data: [
currentJql : "后台查询的JQL语句",
label : "获得结果显示时首行的提示",
showSubTasks: false, //是否显示查询结果包含的子任务
max : 5, //指定查询结果显示的最大问题条数
],
minQueryLength: 4, //最输入字个字符的时候进行查询
keyInputPeriod: 500, //每次输入停顿多长毫秒的时候开始井底
formatResponse: "general||issue",//如果不是issue数据的时候,需要填写 general
],
其它例子
当然,我们也可以根据不同项目,不同的问题类型,设置动态的JQL来获得对应数据,如下
def selectedProject = getFieldById("所属项目").value as Project //获得表单中指定的一个项目,这个字段项目字段类型
def jqlSearchField = getFieldByName("GIT项目名称")
if (selectedProject) {
//设置GIT项目名称为只读,并给一个默认的提示
jqlSearchField.setReadOnly(false).setDescription("Select an issue in the ${selectedProject.name} project")
jqlSearchField.convertToSingleSelect([
ajaxOptions: [
url : getBaseUrl() + "/rest/scriptrunner-jira/latest/issue/picker",
query : true,
data : [
currentJql : "project = ${selectedProject.key} ORDER BY key ASC",
label : "Pick high priority issue in ${selectedProject.name} project",
],
formatResponse: "issue"
],
css : "max-width: 500px; width: 500px",
])
} else {
jqlSearchField.convertToShortText()
jqlSearchField.setReadOnly(true).setDescription("Please select a project before entering the issue")
}
对数据校验
def selectedIssueField = getFieldById(getFieldChanged())
def selectedIssue = selectedIssueField.value as String
log.debug("selectedIssue changed: ${selectedIssue}")
def selectedProject = getFieldByName("ProjectPicker").value as Project
if (selectedIssue && selectedProject) {
def jqlQueryBuilder = JqlQueryBuilder.newBuilder()
def searchService = ComponentAccessor.getComponent(SearchService)
def user = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()
def query = jqlQueryBuilder.where().project(selectedProject.id).and().issue(selectedIssue).buildQuery()
if (searchService.searchCount(user, query) == 1) {
selectedIssueField.clearError()
} else {
selectedIssueField.setError("Issue not found in the selected project")
}
}
https://scriptrunner.adaptavist.com/latest/jira/behaviours-conversions.html

