/// <summary> /// Rebuilds the TFS known elements asynchronous. /// </summary> /// <param name="baseUrl">The base URL.</param> /// <returns></returns> protected async Task <bool> RebuildTfsKnownElementsAsync(string baseUrl) { if (TfsKnownElements == null) { TfsKnownElements = new TfsKnownElements(baseUrl); } TfsKnownElements.ClearKnownProperties(); var projectCollections = await GetTeamProjectCollectionsAsync(); foreach (var projectCollectionReference in projectCollections) { var projectCollection = await GetTeamProjectCollectionAsync(projectCollectionReference.Id.ToString()); TfsKnownElements.KnownProjectCollectionReferences.Add(projectCollectionReference.Name, projectCollectionReference); TfsKnownElements.KnownProjectCollections.Add(projectCollection.Name, projectCollection); foreach (var projectReference in await GetTeamProjectsAsync(projectCollectionReference.Name)) { TfsKnownElements.KnownProjectReferences.Add(projectReference.Name, projectReference); TfsKnownElements.KnownProjectToCollectionMap.Add(projectReference.Name, projectCollectionReference.Name); } } return(true); }
/// <summary> /// Gets the single workitem detail by identifier asynchronous. /// </summary> /// <param name="workItemId">The work item identifier.</param> /// <param name="projectHint">The project hint.</param> /// <returns></returns> public async Task <WorkItem> GetSingleWorkitemDetailByIdAsync(int workItemId, string projectHint) { //assumes workitem id follows the workitem token. var mostLikelyTeamProject = TfsKnownElements.GetMostLikelyProject(projectHint); var witClient = GetWorkItemTrackingHttpClient(mostLikelyTeamProject); var workitem = await witClient.GetWorkItemAsync(workItemId); return(workitem); }
public async Task <List <WorkItemField> > GetFieldsAsync() { var knownProjectRefs = TfsKnownElements.KnownProjectReferences; if (knownProjectRefs == null) { throw new ArgumentException($"{nameof(knownProjectRefs)} returned a null result"); } var firstKnownProjectRef = knownProjectRefs.FirstOrDefault(); if (firstKnownProjectRef.Value == null) { throw new ArgumentException($"{nameof(firstKnownProjectRef)} returned no items"); } var mostLikelyProject = TfsKnownElements.GetMostLikelyProject(firstKnownProjectRef.Value.Name); var witClient = GetWorkItemTrackingHttpClient(mostLikelyProject); return(await witClient.GetFieldsAsync()); }
/// <summary> /// Gets the workitem details by wiql query asynchronous. /// </summary> /// <param name="wiql">The wiql.</param> /// <param name="projectHint">The project hint.</param> /// <returns></returns> /// <exception cref="System.ArgumentException">Learn to query, scrub!</exception> public async Task <List <WorkItem> > GetWorkitemDetailsByWiqlQueryAsync(string wiql, string projectHint) { if (string.IsNullOrWhiteSpace(wiql)) { throw new ArgumentException("Learn to query, scrub!"); } var mostLikelyTeamProject = TfsKnownElements.GetMostLikelyProject(projectHint); var witClient = GetWorkItemTrackingHttpClient(mostLikelyTeamProject); var resultOfOnlyIdValues = await witClient.QueryByWiqlAsync(new Wiql { Query = wiql }, mostLikelyTeamProject.TeamProjectRef.Name); if (resultOfOnlyIdValues.WorkItems.Any() == false) { return(new List <WorkItem>()); } var workitems = await witClient.GetWorkItemsAsync(resultOfOnlyIdValues.WorkItems.Select(w => w.Id)); return(workitems); }
protected void LoadTfsConfiguration(SystemInstances tfsConfig) { if (tfsConfig.IsValid == false) { throw new ArgumentException($"Tfs configuration is not valid: {tfsConfig.Instances?.Count} instances"); } var onlySupportsOneTfsInstance = tfsConfig.Instances.First(); var baseUrl = onlySupportsOneTfsInstance.InstanceUrl; if (onlySupportsOneTfsInstance.AutoLoadInstanceMetaData) { LogInfo("Auto loading Tfs instance metadata..."); RebuildTfsKnownElementsAsync(baseUrl).GetAwaiter().GetResult(); LogInfo("Auto load of Tfs instance metadata complete"); } else { LogInfo("Auto load of Tfs instance metadata was skipped"); TfsKnownElements = new TfsKnownElements(baseUrl); } }