Aspose.Tasks 프로젝트 계산 모드 생성 방법
프로젝트 작업을 할 때, 다양한 상황에서는 일정, 비용 또는 리소스를 다시 계산하는 방법이 달라질 수 있습니다. Aspose.Tasks for .NET은 유연한 계산 모드를 제공하므로 프로젝트 속성을 자동으로 업데이트할지, 수동으로 업데이트할지, 또는 전혀 재계산하지 않을지 선택할 수 있습니다. 이를 통해 성능, 정확성 및 프로젝트 파일의 동작을 완벽하게 제어할 수 있습니다.
프로젝트 계산 모드
Aspose.Tasks for .NET API는 속성 값이 설정될 때 종속 속성의 값이 어떻게 계산되는지를 정의하는 세 가지 프로젝트 계산 모드를 제공합니다.
적절한 모드를 선택하면 사용 사례에 따라 효율성과 정확성 사이의 균형을 맞출 수 있습니다.
계산 모드는 다음과 같습니다:
- 없음 – 필요한 속성만 설정하고 어떠한 계산도 수행하지 않습니다. 프로젝트 전체를 재계산하지 않고 값을 빠르게 조정하려는 경우에 유용합니다.
- 수동 – 종속 객체의 속성만 설정하며 다른 프로젝트 데이터의 전체 재계산을 유발하지 않습니다. 부분 업데이트가 필요할 때 유용한 모드입니다.
- 자동 – 변경 후 즉시 날짜, 작업 및 비용 속성을 재계산합니다. 정확성과 일관성이 중요한 경우 권장됩니다.
아래 예제는 각 모드를 코드에서 어떻게 적용할 수 있는지 보여줍니다.
프로젝트 계산 모드 - 없음
이 모드에서는 프로젝트가 재계산을 건너뜁니다. 일괄 업데이트를 수행할 때나 종속성이 조정될 필요 없이 원시 값만 변경할 때 효율적입니다.
1// Create empty project and set calculation mode to None
2Project project = new Project();
3project.CalculationMode = CalculationMode.None;
4
5// Add a new task
6Task task = project.RootTask.Children.Add("Task");
7
8// Note that even ids were not calculated
9Console.WriteLine("Task.Id Equals 0 : {0} ", task.Get(Tsk.Id).Equals(0));
10Console.WriteLine("Task.OutlineLevel Equals 0 : {0} ", task.Get(Tsk.OutlineLevel).Equals(0));
11Console.WriteLine("Task Start Equals DateTime.MinValue : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
12Console.WriteLine("Task Finish Equals DateTime.MinValue : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
13Console.WriteLine("Task Duration Equals 0 mins : {0} ", task.Get(Tsk.Duration).ToString().Equals("0 mins"));
14
15// Set duration property
16task.Set(Tsk.Duration, project.GetDuration(2, TimeUnitType.Day));
17Console.WriteLine("Task Duration Equals 2 days : {0} ", task.Get(Tsk.Duration).ToString().Equals("2 days"));
18Console.WriteLine("Task Start Equals DateTime.MinValue : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
19Console.WriteLine("Task Finish Equals DateTime.MinValue : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
프로젝트 계산 모드 - 수동
수동 모드는 종속 객체의 속성을 업데이트하지만 전역 재계산을 유발하지 않습니다.
이것은 성능과 관련 값들의 일관성 유지 사이의 균형을 이룹니다.
1// Create empty project and set calculation mode to Manual
2Project project = new Project();
3project.CalculationMode = CalculationMode.Manual;
4
5// Set project start date and add new tasks
6project.Set(Prj.StartDate, new DateTime(2015, 4, 15));
7Task task1 = project.RootTask.Children.Add("Task 1");
8Task task2 = project.RootTask.Children.Add("Task 2");
9
10// The necessary properties are set in manual mode
11Console.WriteLine("Task1.Id Equals 1 : {0} ", task1.Get(Tsk.Id).Equals(1));
12Console.WriteLine("Task1 OutlineLevel Equals 1 : {0} ", task1.Get(Tsk.OutlineLevel).Equals(1));
13Console.WriteLine("Task1 Start Equals 15/04/2015 08:00 AM : {0} ", task1.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
14Console.WriteLine("Task1 Finish Equals 15/04/2015 05:00 PM : {0} ", task1.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
15Console.WriteLine("Task1 Duration Equals 1 day : {0} ", task1.Get(Tsk.Duration).ToString().Equals("1 day"));
16Console.WriteLine("Task2 Start Equals 15/04/2015 08:00 AM : {0} ", task2.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
17Console.WriteLine("Task2 Finish Equals 15/04/2015 05:00 PM : {0} ", task2.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
18Console.WriteLine("Task2 Duration Equals 1 day : {0} ", task2.Get(Tsk.Duration).ToString().Equals("1 day"));
19
20// When we link two tasks together their dates are not recalculated in manual mode
21TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);
22
23// Task 2 Start has not been changed
24Console.WriteLine("Task1 Start Equals Task2 Start : {0} ", task1.Get(Tsk.Start).Equals(task2.Get(Tsk.Start)));
25Console.WriteLine("Task1 Finish Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).Equals(task2.Get(Tsk.Finish)));
프로젝트 계산 모드 - 자동
자동 모드는 관련 속성에 변경이 생기면 모든 날짜, 비용 및 작업 값이 즉시 일관성을 유지하도록 합니다.
이는 최대한의 정확성을 제공하며, 기본적으로 Microsoft Project가 재계산을 처리하는 방식과 가장 유사합니다.
1// Create empty project and set calculation mode to Automatic
2Project project = new Project();
3project.CalculationMode = CalculationMode.Automatic;
4
5// Set project start date and add new tasks
6project.Set(Prj.StartDate, new DateTime(2015, 4, 15));
7Task task1 = project.RootTask.Children.Add("Task 1");
8Task task2 = project.RootTask.Children.Add("Task 2");
9
10// Link tasks
11TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);
12
13// Verify dates have been recalculated
14Console.WriteLine("Task1 Start + 1 Equals Task2 Start : {0} ", task1.Get(Tsk.Start).AddDays(1).Equals(task2.Get(Tsk.Start)));
15Console.WriteLine("Task1 Finish + 1 Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).AddDays(1).Equals(task2.Get(Tsk.Finish)));
16Console.WriteLine("RootTask Finish Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.RootTask.Get(Tsk.Finish)));
17Console.WriteLine("Project Finish Date Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.Get(Prj.FinishDate)));
세 가지 계산 모드(없음, 수동 및 자동)를 제공함으로써 Aspose.Tasks for .NET은 개발자에게 프로젝트 데이터를 어떻게 처리할지 선택할 수 있는 유연성을 제공합니다.
우선순위가 성능, 제어또는 정확성인 경우에도 적절한 계산 모드는 귀하의 시나리오에 가장 효율적인 방식으로 프로젝트 업데이트를 처리할 수 있게 해줍니다.