2013-05-28 7 views
5

Ich habe eine TFS-Gruppe für unsere Firma Programmierer erstellt und ich versuche, eine Liste von Programmierern für diese Gruppe zu bekommen. Das hier ist soweit ich es versucht habe.Mitglieder der TFS-Gruppe erhalten

ICommonStructureService iss = (ICommonStructureService)tfsServer.GetService(typeof(ICommonStructureService)); 
    IGroupSecurityService gss = tfsServer.GetService<IGroupSecurityService>(); 

    Identity SIDS = gss.ReadIdentity(SearchFactor.AccountName, "Project Collection Valid Users", QueryMembership.Expanded); 
    Identity[] _userIds = gss.ReadIdentities(SearchFactor.Sid, SIDS.Members, QueryMembership.None); 

    var companyProgrammers = _userIds.Where(u=>u.MemeberOf.Contains("CompanyProgrammers")).ToList(); 

Die Liste ist leer.

Fehle ich etwas?

Antwort

12

Dies wird eine Liste von Objekten zurückgeben, die die tatsächlichen TFS-Benutzer sind, nach denen Sie suchen. Sie können diese Objekte dann zu Ihren eigenen Entitäten serialisieren, damit Sie danach mit ihnen machen können, was Sie wollen.

Hier ist, wie es gemacht wird:

private List<Identity> ListContributors() 
{ 
    const string projectName = "<<TFS PROJECT NAME>>"; 
    const string groupName = "Contributors"; 
    const string projectUri = "<<TFS PROJECT COLLECTION>>"; 

    TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(projectUri)); 
    ICommonStructureService css = (ICommonStructureService) projectCollection.GetService(typeof(ICommonStructureService)); 
    IGroupSecurityService gss = projectCollection.GetService<IGroupSecurityService>(); 

    // get the tfs project 
    var projectList = css.ListAllProjects(); 
    var project = projectList.FirstOrDefault(o => o.Name.Contains(projectName)); 

    // project doesn't exist 
    if (project == null) return null; 

    // get the tfs group 
    var groupList = gss.ListApplicationGroups(project.Uri); 
    var group = groupList.FirstOrDefault(o => o.AccountName.Contains(groupName)); // you can also use DisplayName 

    // group doesn't exist 
    if (group == null) return null; 

    Identity sids = gss.ReadIdentity(SearchFactor.Sid, group.Sid, QueryMembership.Expanded); 

    // there are no users 
    if (sids.Members.Length == 0) return null; 

    // convert to a list 
    List<Identity> contributors = gss.ReadIdentities(SearchFactor.Sid, sids.Members, QueryMembership.Expanded).ToList(); 

    return contributors; 
} 
+0

Die IGroupSecurityService heute veraltet ist. Wie würden Sie das mit den neuen APIs machen? –

+2

Überholter Code. Laut Vorschlag sollte IDentityManagementService oder ISecurityService verwendet werden. Weiß jemand, wie man diese Schnittstellen benutzt? – jwrightmail