4 Stimmen

JIRA SOAP API: Abrufen der Liste der Benutzer

Ich arbeite an einem Tool in C#, das eine Schnittstelle zur JIRA SOAP API bietet. Ich habe das Dokument gelesen, das man hier finden kann: http://docs.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/index.html

Weiß jemand, wie ich die Liste aller zuweisbaren Benutzer für ein bestimmtes Projekt erhalten kann? Ich habe noch nicht herausfinden können, wie das geht...

5voto

pierroz Punkte 7245

Ich muss heute in besserer Form sein, also hier ist die Lösung meines Problems

    /// <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;
    }

Kommentare sind willkommen. Natürlich können wir die gleiche Methode für verschiedene Rollen verwenden. Man muss nur sicherstellen, dass der Benutzer, der sich bei der JIRA-Api anmeldet, über einige Administratorrechte verfügt

2voto

Thor Harley Punkte 21

Beachten Sie, dass beim Aufruf von getProjectRoleActors aus Flex (zumindest), wenn der angemeldete Benutzer kein Administrator ist, anstelle einer Fehlermeldung oder einer leeren Antwort, wie man es erwarten könnte, überhaupt keine Antwort erhalten wird.

2voto

Josh Koenig Punkte 399

Es ist etwas kontra-intuitiv, da es keinen allgemeinen Befehl vom Typ "Get Users" gibt und Sie ein Projekt- und Rollenobjekt laden müssen, bevor Sie die Frage stellen können.

Hier ist die gleiche Grundimplementierung in PHP (da ich sie gerade geschrieben habe), aber mit dem Schlüssel für die Rolle "Benutzer" statt "Entwickler":

$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);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X