コード例 #1
0
        public static List <WorkItemsDay> GetHistoricalWorkitemsByUser(string tfsURL, string projectName, string userName, DateTime dFilter, DataSource oDataSource)
        {
            try
            {
                Uri tfsUrl = new Uri(tfsURL);
                TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsUrl);
                collection.EnsureAuthenticated();
                var workItemStore = collection.GetService <WorkItemStore>();
                var Ids           = workItemStore.Query("select [System.Id] from WorkItems " +
                                                        "where " +
                                                        (projectName != "*" ? "[System.TeamProject] = '" + projectName + "' " + "and " : "") +
                                                        "(ever [System.ChangedBy] ='" + userName + "' or [System.AssignedTo] ='" + userName + "')" +
                                                        (oDataSource.ExcludeTasks ? " and [Work Item Type] <> 'Task'" : ""));
                var              itemList = new List <WorkItemRegister>();
                DateTime         dAcum;
                WorkItemRegister oWIR = new WorkItemRegister();
                foreach (WorkItem wi in Ids)
                {
                    dAcum = wi.CreatedDate;
                    foreach (Revision revision in wi.Revisions)
                    {
                        if (revision.Fields["Assigned To"].Value.ToString() == userName)
                        {
                            if (oWIR.ID == null)
                            {
                                string PrjCode = "";
                                if (wi.Fields.Contains("Project Code"))
                                {
                                    PrjCode = wi.Fields["Project Code"].Value.ToString();
                                }
                                else if (wi.Fields.Contains("ProjectCode"))
                                {
                                    PrjCode = wi.Fields["ProjectCode"].Value.ToString();
                                }
                                oWIR = new WorkItemRegister(revision.Fields["ID"].Value.ToString(),
                                                            revision.Fields["Title"].Value.ToString(),
                                                            revision.Fields["Changed By"].Value.ToString(),
                                                            PrjCode,
                                                            revision.Fields["Work Item Type"].Value.ToString())
                                {
                                    DateFrom = dAcum
                                };
                            }
                        }
                        else
                        {
                            if (oWIR.ID != null)
                            {
                                oWIR.DateTo = (DateTime)revision.Fields["Changed Date"].Value;
                                itemList.Add(oWIR);
                                oWIR = new WorkItemRegister();
                            }
                        }
                        if (revision.Index == wi.Revisions.Count - 1)
                        {
                            dAcum = DateTime.Now;
                        }
                        else
                        {
                            dAcum = (DateTime)revision.Fields["Changed Date"].Value;
                        }
                    }
                    if (oWIR.ID != null)
                    {
                        oWIR.DateTo = dAcum;
                        itemList.Add(oWIR);
                        oWIR = new WorkItemRegister();
                    }
                }

                var      SplittedItemList = new List <WorkItemRegister>();
                DateTime dTempF;
                DateTime dTempT;
                foreach (WorkItemRegister oRow in itemList)
                {
                    dTempF = oRow.DateFrom;
                    while (dTempF < oRow.DateTo)
                    {
                        dTempT = dTempF.AddDays(1).Date;
                        if (dTempT > oRow.DateTo)
                        {
                            dTempT = oRow.DateTo;
                        }
                        SplittedItemList.Add(oRow.DuplicateWithDates(dTempF, dTempT));
                        dTempF = dTempT;
                    }
                }


                dTempF = dFilter;//SplittedItemList.Select(x => x.DateFrom).Min();
                dTempT = SplittedItemList.Select(x => x.DateFrom).Max();
                List <WorkItemsDay> groupedList = new List <WorkItemsDay>();
                WorkItemHours       oTemp;
                for (var day = dTempF.Date; day.Date <= dTempT.Date; day = day.AddDays(1))
                {
                    WorkItemsDay oRow = new WorkItemsDay(day);
                    foreach (WorkItemRegister wi in SplittedItemList.Where(x => x.DateFrom.Date == day.Date))
                    {
                        oTemp = oRow.WorkItems.FirstOrDefault(x => x.ID == wi.ID);
                        if (oTemp == null)
                        {
                            oTemp = new WorkItemHours(wi)
                            {
                                FromDatasource = oDataSource
                            };
                            oRow.WorkItems.Add(oTemp);
                        }
                        else
                        {
                            oTemp.Hours = oTemp.Hours.Add(wi.timeSpan);
                        }
                    }
                    groupedList.Add(oRow);
                }
                return(groupedList);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception retrieving data: {0}", ex.Message);
                return(new List <WorkItemsDay>());
            }
        }