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

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


  • No labels