2009-07-07 10 views

Répondre

5

Ok je dois être mieux est une forme aujourd'hui alors voici la solution de mon problème

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

commentaires sont les bienvenus. Évidemment, nous pouvons utiliser la même manière pour un rôle différent. Il faut juste être sûr que l'utilisateur utilisé pour se connecter à l'API JIRA a des droits d'administration

2

Notez que lorsque vous appelez getProjectRoleActors à partir de Flex (au moins), si votre utilisateur connecté n'est pas un administrateur, alors au lieu de Si vous obtenez une erreur ou une réponse vide comme on pourrait s'y attendre, vous n'obtenez aucune réponse, ce qui est très frustrant jusqu'à ce que vous vous souveniez de faire de l'utilisateur un administrateur.

2

C'est un peu contre-intuitif car il n'y a pas de commande générale de type "Obtenir les utilisateurs", et vous devez charger un objet projet et rôle avant de pouvoir poser la question.

est ici la même implémentation de base en PHP (depuis que je viens d'écrire), mais la saisie de rôle « utilisateurs » plutôt que « Développeurs »:

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