4

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

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

4

3 回答 3

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 的用户具有一些管理员权限

于 2009-07-08T08:58:28.410 回答
2

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

于 2010-04-30T10:00:05.023 回答
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);
于 2011-01-19T02:31:04.647 回答