public void WorkWithTimephasedDataCollection() { // ExStart // ExFor: TimephasedDataCollection // ExFor: TimephasedDataCollection.#ctor // ExFor: TimephasedDataCollection.Add(TimephasedData) // ExFor: TimephasedDataCollection.AddRange(IEnumerable{Aspose.Tasks.TimephasedData}) // ExFor: TimephasedDataCollection.Clear // ExFor: TimephasedDataCollection.Contains(TimephasedData) // ExFor: TimephasedDataCollection.CopyTo(TimephasedData[],Int32) // ExFor: TimephasedDataCollection.Count // ExFor: TimephasedDataCollection.GetEnumerator // ExFor: TimephasedDataCollection.IsReadOnly // ExFor: TimephasedDataCollection.Remove(TimephasedData) // ExFor: TimephasedDataCollection.SelectBetweenStartAndFinish(TimephasedDataType,DateTime,DateTime) // ExFor: TimephasedDataCollection.ToList // ExSummary: Shows how to work with timephased data collections. var project = new Project(DataDir + "Project1.mpp"); var resource = project.Resources.Add("Resource 1"); resource.Set(Rsc.Type, ResourceType.Work); var resource2 = project.Resources.Add("Resource 2"); resource2.Set(Rsc.Type, ResourceType.Work); var task = project.RootTask.Children.Add("Task 1"); task.Set(Tsk.Start, new DateTime(2019, 11, 11, 8, 0, 0)); task.Set(Tsk.Duration, project.GetDuration(24, TimeUnitType.Hour)); task.Set(Tsk.Work, project.GetDuration(3d, TimeUnitType.Hour)); task.Set(Tsk.Finish, new DateTime(2019, 11, 13, 17, 0, 0)); var task2 = project.RootTask.Children.Add("Task 2"); task2.Set(Tsk.Start, new DateTime(2019, 11, 11, 8, 0, 0)); task2.Set(Tsk.Duration, project.GetDuration(24, TimeUnitType.Hour)); task2.Set(Tsk.Work, project.GetDuration(3d, TimeUnitType.Hour)); task2.Set(Tsk.Finish, new DateTime(2019, 11, 13, 17, 0, 0)); var assignment = project.ResourceAssignments.Add(task, resource); assignment.Set(Asn.Start, new DateTime(2019, 11, 11, 8, 0, 0)); assignment.Set(Asn.Work, project.GetDuration(3, TimeUnitType.Hour)); assignment.Set(Asn.Finish, new DateTime(2019, 11, 13, 17, 0, 0)); var assignment2 = project.ResourceAssignments.Add(task2, resource2); assignment2.Set(Asn.Start, new DateTime(2019, 11, 11, 8, 0, 0)); assignment2.Set(Asn.Work, project.GetDuration(3, TimeUnitType.Hour)); assignment2.Set(Asn.Finish, new DateTime(2019, 11, 13, 17, 0, 0)); // set contoured work contour assignment.Set(Asn.WorkContour, WorkContourType.Contoured); Console.WriteLine("Is timephased data collection read-only?: " + assignment.TimephasedData.IsReadOnly); // clear generated tds assignment.TimephasedData.Clear(); var td = new TimephasedData { Start = new DateTime(2019, 11, 11, 8, 0, 0), Finish = new DateTime(2019, 11, 11, 9, 0, 0), Uid = assignment.Get(Asn.Uid), Unit = TimeUnitType.Hour, Value = "PT1H0M0S", TimephasedDataType = TimephasedDataType.AssignmentRemainingWork }; assignment.TimephasedData.Add(td); var list = new List <TimephasedData>(); var td2 = new TimephasedData { Start = new DateTime(2019, 11, 12, 8, 0, 0), Finish = new DateTime(2019, 11, 12, 9, 0, 0), Uid = assignment.Get(Asn.Uid), Unit = TimeUnitType.Hour, Value = "PT1H0M0S", TimephasedDataType = TimephasedDataType.AssignmentRemainingWork }; var td3 = new TimephasedData { Start = new DateTime(2019, 11, 13, 8, 0, 0), Finish = new DateTime(2019, 11, 13, 9, 0, 0), Uid = assignment.Get(Asn.Uid), Unit = TimeUnitType.Hour, Value = "PT1H0M0S", TimephasedDataType = TimephasedDataType.AssignmentRemainingWork }; list.Add(td2); list.Add(td3); assignment.TimephasedData.AddRange(list); // one can filter the collection by type and date range Console.WriteLine("Print filtered tds:"); IList <TimephasedData> filteredTds = assignment.TimephasedData.SelectBetweenStartAndFinish( TimephasedDataType.AssignmentRemainingWork, new DateTime(2019, 11, 11, 0, 0, 0), new DateTime(2019, 11, 13)); Assert.AreEqual(2, filteredTds.Count); // ExSkip foreach (var data in filteredTds) { Console.WriteLine("Start: " + data.Start); Console.WriteLine("Finish: " + data.Finish); Console.WriteLine("Timephased Data Type: " + data.TimephasedDataType); Console.WriteLine(); } Console.WriteLine("--------------------------"); Console.WriteLine(); // ... // add a wrong td and then delete it var td4 = new TimephasedData { Start = new DateTime(2019, 11, 13, 8, 0, 0), Finish = new DateTime(2019, 11, 13, 9, 0, 0), Uid = assignment.Get(Asn.Uid), Unit = TimeUnitType.Hour, Value = "PT0H0M1S", // wrong value TimephasedDataType = TimephasedDataType.AssignmentRemainingWork }; assignment.TimephasedData.Add(td4); // ... // delete the wrong td item if (assignment.TimephasedData.Contains(td4)) { assignment.TimephasedData.Remove(td4); } // ... assignment.TimephasedData.AddRange(list); // iterate over timephased items Console.WriteLine("Print all timephased items:"); Console.WriteLine("Timephased data count: " + assignment.TimephasedData.Count); foreach (var item in assignment.TimephasedData) { Console.WriteLine("Start: " + item.Start); Console.WriteLine("Finish: " + item.Finish); Console.WriteLine("Timephased Data Type: " + item.TimephasedDataType); Console.WriteLine(); } // copy tds to another assignment var timephasedDatas = new TimephasedData[assignment.TimephasedData.Count]; assignment.TimephasedData.CopyTo(timephasedDatas, 0); assignment2.TimephasedData.Clear(); foreach (var data in timephasedDatas) { assignment2.TimephasedData.Add(data); } // the collection can be converted to a plain list List <TimephasedData> tds = assignment.TimephasedData.ToList(); // lets remove tds one by one foreach (var timephasedData in tds) { assignment.TimephasedData.Remove(timephasedData); } // ExEnd }
public void WorkWithTimephasedData() { // ExStart // ExFor: TimephasedData // ExFor: TimephasedData.#ctor // ExFor: TimephasedData.CreateCostTimephased(Int32,DateTime,DateTime,Double,TimeUnitType,TimephasedDataType) // ExFor: TimephasedData.CreateUnitTimephased(Int32,DateTime,DateTime,Double,TimephasedDataType) // ExFor: TimephasedData.CreateWorkTimephased(Int32,DateTime,DateTime,TimeSpan,TimeUnitType,TimephasedDataType) // ExFor: TimephasedData.Finish // ExFor: TimephasedData.Start // ExFor: TimephasedData.TimephasedDataType // ExFor: TimephasedData.Uid // ExFor: TimephasedData.Unit // ExFor: TimephasedData.Value // ExFor: TimephasedData.ValueToCost // ExFor: TimephasedData.ValueToDuration // ExFor: TimephasedData.ValueToUnits // ExFor: TimephasedDataType // ExSummary: Shows how to work with custom timephased data. var project = new Project(DataDir + "Project1.mpp") { CalculationMode = CalculationMode.None }; var workResource = project.Resources.Add("Work Resource"); workResource.Set(Rsc.Type, ResourceType.Work); var costResource = project.Resources.Add("Cost Resource"); costResource.Set(Rsc.Type, ResourceType.Cost); var task = project.RootTask.Children.Add("Task"); task.Set(Tsk.Start, new DateTime(2018, 1, 1, 8, 0, 0)); task.Set(Tsk.Duration, project.GetDuration(1, TimeUnitType.Day)); var workAssignment = project.ResourceAssignments.Add(task, workResource); workAssignment.Set(Asn.WorkContour, WorkContourType.Contoured); var costAssignment = project.ResourceAssignments.Add(task, costResource); costAssignment.Set(Asn.WorkContour, WorkContourType.Contoured); // lets add custom timephased tds workAssignment.TimephasedData.Clear(); // add work days var td1 = TimephasedData.CreateWorkTimephased( workAssignment.Get(Asn.Uid), new DateTime(2018, 1, 2, 8, 0, 0), new DateTime(2018, 1, 5, 17, 0, 0), TimeSpan.FromHours(40), TimeUnitType.Hour, TimephasedDataType.AssignmentRemainingWork); // add weekend var td2 = TimephasedData.CreateWorkTimephased( workAssignment.Get(Asn.Uid), new DateTime(2018, 1, 6, 8, 0, 0), new DateTime(2018, 1, 8, 8, 0, 0), TimeSpan.Zero, TimeUnitType.Hour, TimephasedDataType.AssignmentRemainingWork); workAssignment.TimephasedData.Add(td1); workAssignment.TimephasedData.Add(td2); costAssignment.TimephasedData.Clear(); // add work days var td11 = TimephasedData.CreateCostTimephased( costAssignment.Get(Asn.Uid), new DateTime(2018, 1, 2, 8, 0, 0), new DateTime(2018, 1, 5, 17, 0, 0), 1, TimeUnitType.Hour, TimephasedDataType.AssignmentCost); // add weekend var td22 = TimephasedData.CreateCostTimephased( costAssignment.Get(Asn.Uid), new DateTime(2018, 1, 6, 8, 0, 0), new DateTime(2018, 1, 8, 8, 0, 0), 0, TimeUnitType.Hour, TimephasedDataType.AssignmentCost); costAssignment.TimephasedData.Add(td11); costAssignment.TimephasedData.Add(td22); Console.WriteLine("Print assignment timephased data:"); foreach (var assignment in project.ResourceAssignments) { Console.WriteLine("Assignment UID: " + assignment.Get(Asn.Uid)); foreach (var tds in assignment.TimephasedData) { Console.WriteLine(" Uid: " + tds.Uid); Console.WriteLine(" Start: " + tds.Start); Console.WriteLine(" Finish: " + tds.Finish); Console.WriteLine(" Type: " + tds.TimephasedDataType); Console.WriteLine(" Unit: " + tds.Unit); Console.WriteLine(" Value: " + tds.Value); Console.WriteLine(" ValueToCost: " + tds.ValueToCost); Console.WriteLine(" ValueToDuration: " + tds.ValueToDuration); Console.WriteLine(" ValueToUnits: " + tds.ValueToUnits); Console.WriteLine(); } } project.Recalculate(); // ExEnd }