JIRA SOAP API:获取用户列表

时间:2009-07-07 17:09:41

标签: api jira

我正在使用C#中的一个工具来连接JIRA SOAP API。我已经阅读了可以在这里找到的文档:http://docs.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/index.html

有谁知道如何获取特定项目的所有可分配用户的列表?我还没找到怎么做......

3 个答案:

答案 0 :(得分:5)

好的,我今天必须处于更好的状态,所以这里是我的问题的解决方案

    /// <summary>
    /// object interface to the JIRA API
    /// </summary>
    private readonly JiraSoapServiceClient _JiraService;

    /// <summary>
    /// authentication token returned by the login method 
    /// that can be used on all other SOAP methods
    /// </summary>
    private readonly string _Token;

    /// <summary>
    /// name of the RemoteProjectRole "Developers"
    /// </summary>
    private const string DEVELOPER_ROLE = "Developers";

    /// <summary>
    /// id of the RemoteProjectRole "Developers"
    /// </summary>
    private static long? _DeveloperId;

    /// <summary>
    /// return the list of the names of all the users who have
    /// the role "Developers" in a project
    /// </summary>
    /// <param name="project"></param>
    /// <returns></returns>
    public List<string> GetUsersForProject(string project)
    {
        List<string> users = new List<string>();
        try
        {
            // get the RemoteProject
            RemoteProject rp = _JiraService.getProjectByKey(_Token, project);

            // get the "Developers" Prject Role
            RemoteProjectRole developerRole = getDeveloperRole();

            if (developerRole != null)
            {
                // we can use this method only if the user logged in is an administrator
                RemoteRoleActors actors = _JiraService.getProjectRoleActors(_Token, developerRole, rp);
                foreach (RemoteRoleActor actor in actors.roleActors)
                {
                    foreach (RemoteUser user in actor.users)
                    {
                        users.Add(user.name);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            // TODO log the error

            users.Clear();
        }
        users.Sort();
        return users;
    }

    /// <summary>
    /// return the RemoteProjectRole "Developers"
    /// </summary>
    /// <returns></returns>
    private RemoteProjectRole getDeveloperRole()
    {
        RemoteProjectRole developerRole = null;
        if (_DeveloperId == null)
        {
            // the first time we call this function we don't know the id of this role
            // that's why we are obliged to find it with a foreach on all the project roles
            foreach (RemoteProjectRole role in _JiraService.getProjectRoles(_Token))
            {
                if (role.name == DEVELOPER_ROLE)
                {
                    developerRole = role;
                    _DeveloperId = role.id;
                    break;
                }
            }
        }
        else
        {
            // we have the id so we can get directly the RemoteProjectRole from the JIRA SOAP API
            developerRole = _JiraService.getProjectRole(_Token, (long)_DeveloperId);
        }

        return developerRole;
    }

欢迎提出意见。 显然,我们可以以不同的角色使用相同的方式。一个人必须确保用户登录JIRA api时有一些管理员权限

答案 1 :(得分:2)

请注意,从Flex(至少)调用getProjectRoleActors时,如果您的登录用户不是管理员,那么您可能没有得到任何响应,而是收到错误或空响应,这非常令人沮丧,直到你记得让用户成为管理员。

答案 2 :(得分:2)

这有点违反直觉,因为没有通用的“获取用户”类型命令,您需要在提出问题之前加载项目和角色对象。

这是PHP中的相同基本实现(因为我刚刚编写它),但是关键是“用户”角色而不是“开发人员”:

$base_url = 'https://yourjira.domain.com';
$wsdl = $base_url . '/rpc/soap/jirasoapservice-v2?wsdl';

$username = 'username';
$password = 'password';

$client = new SoapClient($wsdl);

try {
    $token = $client->login($username, $password);
}
catch (SoapFault $fault) {
    echo "Error logging in to JIRA";
    print_r($fault);
}

$code = 'MYPROJECT'

$project = $client->getProjectByKey($token, $code); 

$role = $client->getProjectRole($token, 10000); // 10000 is typically the "users" role

$users = $client->getProjectRoleActors($token, $role, $project);

print_r($users);