public void ResumeMapperUnitTests_ToWorkItemModel()
        {
            // Arrange
            const string titleValue       = "a";
            const string aliasValue       = "b";
            const string linkValue        = "c";
            const string subtitleValue    = "d";
            const string descriptionValue = "e";

            XElement element = new XElement(
                "Root",
                new XElement("title", titleValue),
                new XElement("alias", aliasValue),
                new XElement("link", linkValue),
                new XElement("subtitle", subtitleValue),
                new XElement("description", descriptionValue)
                );
            IWorkItemModelDao dao = new WorkItemModelXmlDao(element);

            // Act
            WorkItemModel model = ResumeMapper.ToWorkItemModel(dao);

            // Assert
            Assert.IsNotNull(model);
            Assert.AreEqual(titleValue, model.Title);
            Assert.AreEqual(aliasValue, model.Alias);
            Assert.AreEqual(linkValue, model.Link);
            Assert.AreEqual(subtitleValue, model.Subtitle);
            Assert.AreEqual(descriptionValue, model.Description);
        }
        public async Task <IActionResult> CreateWorkItem([FromBody] WorkItemModel workItemModel)
        {
            string userId      = null;
            var    currentUser = HttpContext.User;

            if (currentUser != null)
            {
                userId = currentUser.FindFirst("id").Value;
            }
            if (userId != null)
            {
                bool isSuccess = await _workItemsRepository.CreateWorkItem(workItemModel, userId);

                if (isSuccess)
                {
                    if (workItemModel.WorkItemId > 0)
                    {
                        return(Ok(new Response <bool> {
                            Code = HttpStatusCode.OK, Data = isSuccess, Message = ResponseMessageModel.WorkItemMessage.WorkItemUpdation
                        }));
                    }
                    return(Ok(new Response <bool> {
                        Code = HttpStatusCode.OK, Data = isSuccess, Message = ResponseMessageModel.WorkItemMessage.WorkItemCreated
                    }));
                }
            }

            return(BadRequest(new ErrorResponse(ResponseMessageModel.WorkItemMessage.PleaseContactToAdministrator)));
        }
        public void OpenWorkItem(WorkItemModel workItemModel)
        {
            if (workItemModel == null)
            {
                return;
            }

            int selectedWorkItemId = workItemModel.Id;

            IWorkItemDocument widoc = null;

            try
            {
                var documentService = GetService <DocumentService>();
                widoc = documentService.GetWorkItem(CurrentContext.TeamProjectCollection, selectedWorkItemId, this);
                documentService.ShowWorkItem(widoc);
            }
            finally
            {
                if (widoc != null)
                {
                    widoc.Release(this);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Calculates cross-sprint metrics for a top-level work item (i.e. User Story) and all its children.
        /// </summary>
        /// <param name="parent">Top level work item.</param>
        /// <returns></returns>
        public CrossSprintMetricsModel CalculateCrossSprintMetricsForWorkItem(WorkItemModel parent)
        {
            var crossSprintMetrics = new CrossSprintMetricsModel
            {
                IterationMetrics = parent.ChildItems
                                   .GroupBy(x => x.IterationPath)
                                   .OrderBy(x => x.Key)
                                   .Select(x => CalculateWorkItemIterationMetrics(x))
                                   .Where(x => x.TotalTime > 0),
                WorkItemTitle = parent.Title,
                WorkItemID    = parent.ID,
            };

            crossSprintMetrics.NumberOfIterations = crossSprintMetrics.IterationMetrics.Count();

            foreach (var iterationMetric in crossSprintMetrics.IterationMetrics)
            {
                crossSprintMetrics.NumberOfBugs       += iterationMetric.NumberOfBugs;
                crossSprintMetrics.NumberOfOpenBugs   += iterationMetric.NumberOfOpenBugs;
                crossSprintMetrics.TimeBugFixing      += iterationMetric.TimeBugFixing;
                crossSprintMetrics.TimeDeveloping     += iterationMetric.TimeDeveloping;
                crossSprintMetrics.TimeTesting        += iterationMetric.TimeTesting;
                crossSprintMetrics.TotalTime          += iterationMetric.TotalTime;
                crossSprintMetrics.TotalEstimatedTime += iterationMetric.EstimatedTime;
            }

            crossSprintMetrics.BugFixingPercentageOfDev = crossSprintMetrics.TimeBugFixing / crossSprintMetrics.TimeDeveloping;

            return(crossSprintMetrics);
        }
Esempio n. 5
0
        private WorkItemModel WorkItemModelFromResponse(WorkItemResponse response)
        {
            WorkItemModel model = new WorkItemModel();

            FillOutWorkItemModel(model, response);

            return(model);
        }
Esempio n. 6
0
 public IHttpActionResult Put(WorkItemModel workModel)
 {
     try
     {
         return(Ok(_worksService.Modify(workModel)));
     }
     catch (Exception ex)
     {
         return(InternalServerError(ex));
     }
 }
Esempio n. 7
0
 public WorkItemModel Modify(WorkItemModel workModel)
 {
     using (var context = _dbContextFactory.Create())
     {
         var work = context.Works.Where(w => w.Id == workModel.Id)
                    .FirstOrDefault();
         work.Title       = workModel.Title;
         work.IsCompleted = workModel.Completed;
         context.SaveChanges();
         return(workModel);
     }
 }
Esempio n. 8
0
        public async Task <IActionResult> Get(int id)
        {
            var result = await _service.GetWorkItemByID(id);

            WorkItemModel wim = new WorkItemModel();

            wim.Id    = result.Id;
            wim.Title = result.Fields["System.Title"].ToString();
            // wim.RemainingTime = Convert.ToInt32(result.Fields["Microsoft.VSTS.Scheduling.RemainingWork"]);
            wim.url = result.Url;
            return(Ok(wim));
        }
Esempio n. 9
0
 private void FillOutWorkItemModel(WorkItemModel model, WorkItemResponse response)
 {
     model.Activity         = response.Fields.Activity;
     model.CompletedWork    = response.Fields.CompletedWork;
     model.IterationPath    = response.Fields.IterationPath;
     model.OriginalEstimate = response.Fields.OriginalEstimate;
     model.RemainingWork    = response.Fields.RemainingWork;
     model.State            = response.Fields.State;
     model.Title            = response.Fields.Title;
     model.WorkItemType     = response.Fields.WorkItemType;
     model.ID = response.ID;
 }
Esempio n. 10
0
        public async Task <WorkItemModel> GetProjectWorkItemById(int id)
        {
            WorkItemModel workItemModel = new WorkItemModel();
            string        api           = string.Empty;
            string        commentapi    = string.Empty;

            if (id.ToString() != null)
            {
                api        = String.Format(VSTSAPI.GetWorkItemsById, _appSettings.VSTS.AccountName, id);
                commentapi = String.Format(VSTSAPI.GetWorkItemCommentsByID, _appSettings.VSTS.AccountName, id);
            }
            return(await _dataRepository.GetWorkItemById(api, commentapi));
        }
Esempio n. 11
0
        public async Task <WorkItemModel> CreateWorkitem(CreateWorkItem workItem)
        {
            WorkItemModel workItemModel = new WorkItemModel();

            try
            {
                workItemModel = await workItemManager.CreateWorkitem(workItem);
            }
            catch (Exception)
            {
            }
            return(workItemModel);
        }
Esempio n. 12
0
        public async Task <WorkItemModel> CreateAttachmentToWorkitem(int workItemid, string solname, string projectid,
                                                                     string orgnizationurl, string builderroreport)
        {
            WorkItemModel workItemModel = new WorkItemModel();

            try
            {
                workItemModel = await workItemManager.CreateAttachmentToWorkitem(workItemid, solname, projectid,
                                                                                 orgnizationurl, builderroreport);
            }
            catch (Exception)
            {
            }
            return(workItemModel);
        }
Esempio n. 13
0
        public async Task <IActionResult> GetProjectWorkItemsById(int projectId, int workItemId)
        {
            WorkItemModel WorkItem = await _workItemsRepository.GetProjectWorkItemById(workItemId);

            if (WorkItem != null)
            {
                return(Ok(new Response <WorkItemModel> {
                    Code = HttpStatusCode.OK, Data = WorkItem, Message = string.Empty
                }));
            }
            else
            {
                return(BadRequest(new ErrorResponse(ResponseMessageModel.WorkItemMessage.PleaseContactToAdministrator)));
            }
        }
        public async Task <WorkItem> Create(
            string accessToken,
            string organization,
            string project,
            string type,
            WorkItemModel model
            )
        {
            var url = URL_TEMPLATE.Replace(
                "{organization}",
                organization
                ).Replace(
                "{project}",
                project
                ).Replace(
                "{type}",
                type
                );

            var result = await Post <WorkItem>(
                url,
                accessToken,
                model
                //new List<object>
                //{
                //    new
                //    {
                //        op = "add",
                //        path = "/fields/System.Title",
                //        value = title,
                //    },
                //    new
                //    {
                //        op = "add",
                //        path = "/fields/System.Description",
                //        value = $"Description for {title}",
                //    },
                //}
                );

            if (!result.Successful)
            {
                return(new WorkItem());
            }

            return(result.Result);
        }
Esempio n. 15
0
        public IEnumerable <WorkItemModel> GetPersonalWork()
        {
            List <WorkItemModel> items = new List <WorkItemModel>();

            if (_isInitialized)
            {
                IEnumerable <XElement> elements = _personalWorkDoc.Descendants("work");
                foreach (XElement element in elements)
                {
                    IWorkItemModelDAO dao  = new WorkItemModelXMLDAO(element);
                    WorkItemModel     item = new WorkItemModel(dao);
                    items.Add(item);
                }
            }

            return(items);
        }
Esempio n. 16
0
        public WorkItemModel Create(WorkItemModel workModel)
        {
            using (var context = _dbContextFactory.Create())
            {
                var work = new Work
                {
                    WorkListId  = workModel.WorkListId,
                    Title       = workModel.Title,
                    IsCompleted = false
                };

                context.Works.Add(work);
                context.SaveChanges();
                workModel.Id = work.Id;
                return(workModel);
            }
        }
 public override void AddWorkItem(WorkItemModel workItemModel)
 {
     try
     {
         if (workItemModel == null)
         {
             return;
         }
         var GitPendingChangesModelType =
             Type.GetType(
                 "Microsoft.TeamFoundation.Git.Controls.PendingChanges.GitPendingChangesModel,Microsoft.TeamFoundation.Git.Controls");
         var gitPendingChangesModel = ServiceProvider.GetService(GitPendingChangesModelType);
         var method = GitPendingChangesModelType.GetMethod("AddWorkItemsByIdAsync",
                                                           BindingFlags.Public | BindingFlags.Instance);
         method.Invoke(gitPendingChangesModel, new object[] { new[] { workItemModel.Id } });
     }
     catch (Exception ex)
     {
         ShowNotification(ex.ToString(), NotificationType.Error);
     }
 }
        public void AddWorkItem(WorkItemModel workItemModel)
        {
            try
            {
                if (workItemModel == null)
                {
                    return;
                }

                int selectedWorkItemId = workItemModel.Id;

                var pc    = GetService <IPendingChangesExt>();
                var model = pc.GetType().GetField("m_workItemsSection", BindingFlags.NonPublic | BindingFlags.Instance);
                var t     = model.FieldType;
                var mm    = model.GetValue(pc);
                var m     = t.GetMethod("AddWorkItemById", BindingFlags.NonPublic | BindingFlags.Instance);
                m.Invoke(mm, new object[] { selectedWorkItemId });
            }
            catch (Exception ex)
            {
                ShowNotification(ex.ToString(), NotificationType.Error);
            }
        }
Esempio n. 19
0
        public async Task <bool> CreateWorkItem(WorkItemModel workItemModel, bool isAdmin, string userId)
        {
            string userName          = string.Empty;
            var    adminProjSettings = await _projectdata.GetProjectSettings(workItemModel.Id);

            if (!isAdmin)
            {
                UserModel user = await _userData.GetUserDetail(userId);

                if (user != null)
                {
                    userName = user.UserName;
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                userName = userId;
            }

            string api = string.Empty;

            workItemModel.AssignTo = adminProjSettings != null && adminProjSettings.Count > 0 ?  adminProjSettings[0].DefaultAssignment : string.Empty;
            List <string> projectNames = await _projectdata.GetProjectName(workItemModel.Id);

            workItemModel.ProjectId = projectNames != null && projectNames.Count > 0 ? projectNames[0] : string.Empty;
            workItemModel.State     = adminProjSettings != null && adminProjSettings.Count > 0 ? adminProjSettings[0].CreatedItemStatus : string.Empty;

            if (adminProjSettings != null && adminProjSettings.Count > 0)
            {
                api = workItemModel.WorkItemId != 0 ? String.Format(VSTSAPI.UpdateWorkItem, _appSettings.VSTS.AccountName, workItemModel.ProjectId, workItemModel.WorkItemId, _appSettings.VSTS.ByPassRules) : String.Format(VSTSAPI.CreateWorkItem, _appSettings.VSTS.AccountName, workItemModel.ProjectId, adminProjSettings[0].CreatedItemType.ToLower(), _appSettings.VSTS.ByPassRules);
            }
            return(await _dataRepository.CreateWorkItem(workItemModel, api, userName));
        }
Esempio n. 20
0
        public async Task <WorkItemModel> CreateLinkedWorkitem(CreateWorkItem workItem)
        {
            WorkItemModel        workItemModel = new WorkItemModel();
            DevOpsConnectionPool poolObj       = _builderPool.Get();

            try
            {
                List <Params> ListParams = new List <Params>();
                //VssCredentials creds = new VssBasicCredential(string.Empty, personalaccesstoken);
                //VssConnection connection = new VssConnection(new Uri(c_collectionUri), creds);
                //ProjectHttpClient projectClient = connection.GetClient<ProjectHttpClient>();

                var workItemTrackingClient = poolObj.VssConnection.GetClient <WorkItemTrackingHttpClient>();

                JsonPatchDocument patchDocument = new JsonPatchDocument();
                Fields            field         = null;
                string            title         = $"Error deploying solution {workItem.crmsolutioname} in {workItem.crmorgurl}.";
                string            bugtest       = $"Error deploying solution {workItem.crmsolutioname} in {workItem.crmorgurl}. \n See attachment file for full error log.";
                string            description   = $"Error deploying solution {workItem.crmsolutioname} in {workItem.crmorgurl}. \n See attachment file for full error log.";

                switch (workItem.type.ToLower())
                {
                case "bug":
                    field = new Fields()
                    {
                        AssignedTo = workItem.assignedTo,
                        BugText    = bugtest,
                        Priority   = "2",
                        Title      = title,
                        Severity   = "2 - High"
                    };
                    ListParams.AddRange(GetBugFields(field));
                    break;

                default:    //Issue,Feature,Task
                    field = new Fields()
                    {
                        AssignedTo  = workItem.assignedTo,
                        Description = description,
                        Priority    = "2",
                        Title       = title,
                        Severity    = "2 - High"
                    };
                    ListParams.AddRange(GetTaskIssueFeatureFields(field));
                    break;
                }

                foreach (var item in ListParams)//there will be one type of witalways
                {
                    patchDocument.Add(
                        new JsonPatchOperation()
                    {
                        Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                        Path      = item.Path,
                        Value     = item.Value,
                    }
                        );
                }

                if (workItem.parentWit > 0)
                {
                    /* patchDocument.Add(new Microsoft.VisualStudio.Services.WebApi.Patch.Json.JsonPatchOperation()
                     * {
                     *   Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                     *   Path = "/fields/System.Title",
                     *   Value = "childWIT"
                     * });*/
                    patchDocument.Add(new Microsoft.VisualStudio.Services.WebApi.Patch.Json.JsonPatchOperation()
                    {
                        Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                        Path      = "/relations/-",
                        Value     = new
                        {
                            rel = "System.LinkTypes.Hierarchy-Reverse",
                            url = poolObj.VssConnection.Uri.AbsoluteUri + "/" + workItem.projectname + "/_apis/wit/workItems/" + workItem.parentWit
                        }
                    });
                }

                var workitem = await workItemTrackingClient.CreateWorkItemAsync(patchDocument, workItem.projectid, workItem.type);

                if (workitem != null)
                {
                    workItemModel.Id  = workitem.Id.Value;
                    workItemModel.url = workitem.Url;
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                _builderPool.Return(poolObj);
            }
            return(workItemModel);
        }
Esempio n. 21
0
        public IEnumerable <WorkItemModel> GetAllWorkItems()
        {
            var model = new WorkItemModel();

            return(model.MyWorkItems());
        }
Esempio n. 22
0
        public async Task <WorkItemModel> CreateWorkitem(CreateWorkItem workItem)
        {
            WorkItemModel        workItemModel = new WorkItemModel();
            DevOpsConnectionPool poolObj       = _builderPool.Get();

            try
            {
                List <Params> ListParams = new List <Params>();
                //VssCredentials creds = new VssBasicCredential(string.Empty, personalaccesstoken);
                //VssConnection connection = new VssConnection(new Uri(c_collectionUri), creds);
                //ProjectHttpClient projectClient = connection.GetClient<ProjectHttpClient>();

                var workItemTrackingClient = poolObj.VssConnection.GetClient <WorkItemTrackingHttpClient>();

                JsonPatchDocument patchDocument = new JsonPatchDocument();
                Fields            field         = null;

                string title       = $"error deploying solution {workItem.crmsolutioname} in {workItem.crmorgurl}";
                string bugtest     = $"error deploying solution {workItem.crmsolutioname} in {workItem.crmorgurl}. \n see attachment file for full error log.";
                string description = $"error deploying solution {workItem.crmsolutioname} in {workItem.crmorgurl}. \n see attachment file for full error log.";

                switch (workItem.type.ToLower())
                {
                case "bug":
                    field = new Fields()
                    {
                        AssignedTo = workItem.assignedTo,
                        BugText    = bugtest, //workItem.bugtest,
                        Priority   = "2",
                        Title      = title,   //workItem.title,
                        Severity   = "2 - High"
                    };
                    ListParams.AddRange(GetBugFields(field));
                    break;

                default:    //Issue,Feature,Task
                    field = new Fields()
                    {
                        AssignedTo  = workItem.assignedTo,
                        Description = description,    //workItem.description,
                        Priority    = "2",
                        Title       = title,
                        Severity    = "2 - High"
                    };
                    ListParams.AddRange(GetTaskIssueFeatureFields(field));
                    break;
                }

                foreach (var item in ListParams)
                {
                    patchDocument.Add(
                        new JsonPatchOperation()
                    {
                        Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                        Path      = item.Path,
                        Value     = item.Value,
                    }
                        );
                }

                var workitem = await workItemTrackingClient.CreateWorkItemAsync(patchDocument, workItem.projectid, workItem.type);

                if (workitem != null)
                {
                    workItemModel.Id  = workitem.Id.Value;
                    workItemModel.url = workitem.Url;
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                _builderPool.Return(poolObj);
            }
            return(workItemModel);
        }
Esempio n. 23
0
        public static JsonPatchDocument ToPatchDocument(this WorkItemModel model, string ProjectName, WorkItem parent = null)
        {
            var workItemType = "User Story";

            if (model.Type == "Bug")
            {
                workItemType = "Bug";
            }
            if (parent != null)
            {
                workItemType = "Task";
            }

            var azurePriority = 5;

            if (model.BacklogPriority > 0 && model.BacklogPriority < 1000)
            {
                azurePriority = 1;
            }
            else if (model.BacklogPriority >= 1000 && model.BacklogPriority < 10000)
            {
                azurePriority = 2;
            }
            else if (model.BacklogPriority >= 10000 && model.BacklogPriority < 100000)
            {
                azurePriority = 3;
            }
            else if (model.BacklogPriority >= 100000 && model.BacklogPriority < 500000)
            {
                azurePriority = 4;
            }

            var patchDocument = new JsonPatchDocument
            {
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.Title", Value = model.Title
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.AreaPath", Value = $"{ProjectName}\\{model.AreaPath}"
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.IterationPath", Value = $"{ProjectName}\\{model.IterationPath}"
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.WorkItemType", Value = workItemType
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.State", Value = model.State
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.AssignedTo", Value = model.AssignedTo
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.CreatedBy", Value = model.CreatedBy
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.CreatedDate", Value = model.CreatedDate
                },
                new JsonPatchOperation()
                {
                    Operation = Operation.Add, Path = "/fields/System.Tags", Value = model.Tags
                }
            };

            if (model.Type == "Bug")
            {
                patchDocument.Add(new JsonPatchOperation()
                {
                    Operation = Operation.Add,
                    Path      = "/fields/Microsoft.VSTS.TCM.ReproSteps",
                    Value     =
                        $"<pre>Ported by tfs-to-devops @ {DateTime.Now:dd-MMM-yyyy HH:mm:ss}{Environment.NewLine}</pre><p><hr></p>{model.HtmlDescription}"
                });
Esempio n. 24
0
        private void RegisterMessages()
        {
            Messenger.Default.Register <UpdateWaitSpinnerMessage>(this, ProcessUpdateWaitSpinnerMessage);

            Messenger.Default.Register <RefreshMessage>(this,
                                                        (message) =>
            {
                switch (message.ItemToRefresh)
                {
                case RefreshTarget.Pools:
                    AsyncOperationTracker.Instance.AddTrackedInternalOperation(this.GetDataAsync(dataProvider, false, false, true));
                    break;

                case RefreshTarget.WorkItems:
                    AsyncOperationTracker.Instance.AddTrackedInternalOperation(this.GetDataAsync(dataProvider, true, false, false));
                    break;
                }
            }
                                                        );

            Messenger.Default.Register <ModelNotFoundAfterRefresh>(this, (message) =>
            {
                ModelBase modelBase = message.Model;

                WorkItemModel workItemModel = modelBase as WorkItemModel;
                if (workItemModel != null)
                {
                    this.workItems.Remove(workItemModel);
                    FirePropertyChangedEvent("WorkItemTabTitle");
                    SelectedWorkItem = null;
                }

                PoolModel poolModel = modelBase as PoolModel;
                if (poolModel != null)
                {
                    this.pools.Remove(poolModel);
                    FirePropertyChangedEvent("PoolTabTitle");
                    SelectedPool = null;
                    SelectedTVM  = null;
                }

                JobModel jobModel = modelBase as JobModel;
                if (jobModel != null)
                {
                    jobModel.ParentWorkItem.Jobs.Remove(jobModel);
                    FirePropertyChangedEvent("JobTabTitle");
                }

                TaskModel taskModel = modelBase as TaskModel;
                if (taskModel != null)
                {
                    taskModel.ParentJob.Tasks.Remove(taskModel);
                    taskModel.ParentJob.UpdateTaskView();
                    FirePropertyChangedEvent("TasksTabTitle");
                }

                TvmModel vmModel = modelBase as TvmModel;
                if (vmModel != null)
                {
                    vmModel.ParentPool.Tvms.Remove(vmModel);
                    vmModel.ParentPool.UpdateTvmView();
                    FirePropertyChangedEvent("VMsTabTitle");
                    selectedTVM = null;
                }
            });
        }
Esempio n. 25
0
        public async Task <List <WorkItemModel> > GetAllworkItems(string projectName, string searchText)
        {
            List <WorkItemModel> workItems     = new List <WorkItemModel>();
            WorkItemModel        workItemModel = null;
            DevOpsConnectionPool poolObj       = _builderPool.Get();

            try
            {
                //VssCredentials creds = new VssBasicCredential(string.Empty, personalaccesstoken);
                //VssConnection connection = new VssConnection(new Uri(c_collectionUri), creds);
                var workItemTrackingClient = poolObj.VssConnection.GetClient <WorkItemTrackingHttpClient>();

                // create a wiql object and build our query
                var wiql = new Wiql()
                {
                    // NOTE: Even if other columns are specified, only the ID & URL will be available in the WorkItemReference
                    Query = "Select [Id] " +
                            "From WorkItems " +
                            "Where  " +
                            "[System.TeamProject] = '" + projectName + "' " +
                            "And [System.WorkItemType] <> '' AND [System.State] <> '' " +
                            "AND [System.Title] contains words '" + searchText + "' ORDER BY [Id]",
                };
                var httpClient = poolObj.VssConnection.GetClient <WorkItemTrackingHttpClient>();

                var result = await httpClient.QueryByWiqlAsync(wiql);

                var ids = result.WorkItems.Select(item => item.Id).ToArray();

                // some error handling
                if (ids.Length == 0)
                {
                    return(workItems);
                }

                // build a list of the fields we want to see
                var fields = new[] { "System.Id", "System.Title", "System.State" };

                // get work items for the ids found in query
                var witems = await httpClient.GetWorkItemsAsync(ids, fields, result.AsOf);

                if (witems != null && witems.Count > 0)
                {
                    foreach (var witem in witems)
                    {
                        workItemModel = new WorkItemModel()
                        {
                            Id  = witem.Id.HasValue ? witem.Id.Value : 01,
                            url = witem.Url
                        };
                        workItems.Add(workItemModel);
                    }
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                _builderPool.Return(poolObj);
            }
            return(workItems);
        }