2009-07-07 19 views
4

私はJIRA SOAP APIをインタフェースするC#のツールを開発中です。私はここに見つけることができる文書を読んだ:​​JIRA SOAP API:ユーザのリストを取得

私はどのように特定のプロジェクトのすべての割り当て可能なユーザーのリストを得ることができる知っていますか?私は

答えて

5

[OK]を、私はので、ここで良い形で、今日でなければなりませんが

/// <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のログインに使用したユーザがいくつかの管理者権限を持っていることを確かめてください

2

FlexからgetProjectRoleActors(少なくとも)を呼び出すとき、ログインしたユーザが管理者ではない場合、あなたが期待しているようにエラーや空の応答を得ると、全く応答がなくなり、ユーザを管理者にすることを覚えているまでは非常に不満です。

2

「Get Users」という一般的なコマンドがないため、直感的ではありません。質問をする前にプロジェクトとロールオブジェクトを読み込む必要があります。

ここでは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); 
関連する問題