如何在JIRA Script Runner中通过电子邮件获取用户 [英] How to get a user by email in JIRA Script Runner

查看:340
本文介绍了如何在JIRA Script Runner中通过电子邮件获取用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在为编写Groovy脚本时,JIRA Script Runner ,你如何得到一个用户,或只是他们的用户名,给他们的电子邮件地址?



看来你应该使用 findUsersByEmail 方法在 UserSearchService 接口中。

https://docs.atlassian.com/jira /7.0.2/com/atlassian/jira/bc/user/search/UserSearchService.html



但是,您如何获得此类的实例?

相关问题:如何通过电子邮件在JIRA插件中获取用户
区别在于问题是关于插件,而我的问题是关于JIRA Script Runner。



此代码无效:

  setUserProperties(httpMethod:POST,groups:[jira-administrators])
{多值映射queryParams,String body,HttpServletRequest请求 - >
$ b $ def userPropertyManager = ComponentAccessor.getUserPropertyManager()
def userManager = ComponentAccessor.getUserManager()
def userSearchService = DefaultUserPickerSearchService;
def users = userSearchService.findUsersByEmail(felicity.smoak@queenconsolidated.com)

users.each {
aUser - >
userPropertyManager.getPropertySet(aUser).setString(jira.meta.Company,Smoak Technologies)
}

return Response.ok(users).build() ;
}

这是我得到的错误:

  2016-04-18 15:23:06,168错误[common.UserCustomScriptEndpoint]:****************** ************************************************** ***************** 
2016-04-18 15:23:06,168错误[common.UserCustomScriptEndpoint]:脚本端点在方法上失败:POST setUserProperties
groovy.lang.MissingMethodException:方法没有签名:static com.atlassian.jira.bc.user.search.DefaultUserPickerSearchService.findUsersByEmail()适用于参数类型:(java.lang.String)values:[felicity.smoak@queenconsolidated
可能的解决方案:
at Script462 $ _run_closure3.doCall(Script462.groovy:40)
at com
可能的解决方案:findUsersByEmail(java.lang.String),findUserKeysByEmail(java.lang.String) .onresolve.scriptrunner.runner.rest.common.UserCustomScriptEndpoint.doEndpoint(UserCustomScriptEndpoint.groovy:308)
at com.onresolve.scriptrunner.runner.rest.common.UserCustomScriptEndpo int.postUserEndpoint(UserCustomScriptEndpoint.groovy:208)

编辑



根据@ Oldskultxo和@BjörnKautler的建议,现在是我的工作代码:

  import com.atlassian.jira.component.ComponentAccessor 
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.user。*
import com.atlassian.jira.bc .user.search.UserSearchService
import com.atlassian.sal.api.user.UserManager
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json。*
导入groovy.transform.BaseScript

导入javax.servlet.http.HttpServletRequest
导入javax.ws.rs.core.MultivaluedMap
导入javax.ws.rs .core.Response

@BaseScript CustomEndpointDelegate委托
$ b setUserProperties(httpMethod:POST,groups:[jira-administrators])
{多值映射queryParams,字符串正文,HttpServletRequest请求 - &g吨;
$ b def userPropertyManager = ComponentAccessor.getUserPropertyManager()
def userManager = ComponentAccessor.getUserManager()
def userSearchService = ComponentAccessor.getComponent(UserSearchService.class)
def users = userSearchService.findUsersByEmail(felicity.smoak@queenconsolidated.com)

users.each {
aUser - >
userPropertyManager.getPropertySet(aUser).setString(jira.meta.Company,Smoak Technologies)
}

return Response.ok(200)。build ();


解决方案使用 ComponentAccessor.getComponent(UserSearchService)以在没有具体的 getUserSearchService()方法时获得正确的服务。


When writing a Groovy script for JIRA Script Runner, how do you get a user, or just their username, given their email address?

It seems that you're supposed to use the findUsersByEmail method in the UserSearchService interface.

https://docs.atlassian.com/jira/7.0.2/com/atlassian/jira/bc/user/search/UserSearchService.html

But how do you get an instance of this class?

Related question: How to get a user by email in a JIRA plugin. The difference is that question is about a plugin, and my question is about JIRA Script Runner.

This code does not work:

setUserProperties(httpMethod: "POST", groups: ["jira-administrators"])
{ MultivaluedMap queryParams, String body, HttpServletRequest request ->

    def userPropertyManager = ComponentAccessor.getUserPropertyManager()
    def userManager = ComponentAccessor.getUserManager()
    def userSearchService = DefaultUserPickerSearchService;
    def users = userSearchService.findUsersByEmail("felicity.smoak@queenconsolidated.com")

    users.each {
        aUser ->
            userPropertyManager.getPropertySet(aUser).setString("jira.meta.Company", "Smoak Technologies")
    }

    return Response.ok(users).build();
}

This is the error I got:

2016-04-18 15:23:06,168 ERROR [common.UserCustomScriptEndpoint]: *************************************************************************************
2016-04-18 15:23:06,168 ERROR [common.UserCustomScriptEndpoint]: Script endpoint failed on method: POST setUserProperties
groovy.lang.MissingMethodException: No signature of method: static com.atlassian.jira.bc.user.search.DefaultUserPickerSearchService.findUsersByEmail() is applicable for argument types: (java.lang.String) values: [felicity.smoak@queenconsolidated.com]
Possible solutions: findUsersByEmail(java.lang.String), findUserKeysByEmail(java.lang.String)
    at Script462$_run_closure3.doCall(Script462.groovy:40)
    at com.onresolve.scriptrunner.runner.rest.common.UserCustomScriptEndpoint.doEndpoint(UserCustomScriptEndpoint.groovy:308)
    at com.onresolve.scriptrunner.runner.rest.common.UserCustomScriptEndpoint.postUserEndpoint(UserCustomScriptEndpoint.groovy:208)

EDIT

Based on @Oldskultxo's and @BjörnKautler suggestions, this is now my working code:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.user.*
import com.atlassian.jira.bc.user.search.UserSearchService
import com.atlassian.sal.api.user.UserManager
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.*
import groovy.transform.BaseScript

import javax.servlet.http.HttpServletRequest
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response

@BaseScript CustomEndpointDelegate delegate

setUserProperties(httpMethod: "POST", groups: ["jira-administrators"])
{ MultivaluedMap queryParams, String body, HttpServletRequest request ->

    def userPropertyManager = ComponentAccessor.getUserPropertyManager()
    def userManager = ComponentAccessor.getUserManager()
    def userSearchService = ComponentAccessor.getComponent(UserSearchService.class)
    def users = userSearchService.findUsersByEmail("felicity.smoak@queenconsolidated.com")

    users.each {
        aUser ->
            userPropertyManager.getPropertySet(aUser).setString("jira.meta.Company", "Smoak Technologies")
    }

    return Response.ok("200").build();
}

解决方案

Use ComponentAccessor.getComponent(UserSearchService) to get the right service if there is no concrete getUserSearchService() method.

这篇关于如何在JIRA Script Runner中通过电子邮件获取用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆