编写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