Як створити режими розрахунку проекту в Aspose.Tasks

При роботі з проектами різні сценарії можуть вимагати різних підходів до перерахунку розкладів, витрат або ресурсів. Aspose.Tasks for .NET надає гнучкі режими розрахунку, тож ви можете вирішити, чи властивості проекту повинні оновлюватися автоматично, вручну чи зовсім не перераховуватися. Це гарантує повний контроль над продуктивністю, точністю та поведінкою файлів проекту.

Режими розрахунку проекту

Aspose.Tasks for .NET API надає три режими розрахунку проекту, які визначають, як обчислюються значення залежних властивостей під час встановлення значення властивості.
Вибір правильного режиму дозволяє знайти баланс між ефективністю та точністю залежно від вашого сценарію використання.

Ці режими розрахунку:

Наведені нижче приклади демонструють, як кожен режим може бути застосований у коді.

Режим розрахунку проекту - None

У цьому режимі проект пропускає перерахунок. Це ефективно при виконанні пакетних оновлень або коли потрібно змінити лише сирі значення без коригування залежностей.

 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));

Режим розрахунку проекту - Manual

Режим Manual оновлює залежні властивості об’єктів, але уникає запуску глобальних перерахунків.
Це знаходить баланс між продуктивністю та підтриманням узгодженості пов’язаних значень.

 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)));

Режим розрахунку проекту - Automatic

Режим Automatic забезпечує, що всі дати, витрати та показники роботи залишаються узгодженими відразу після зміни будь-якої пов’язаної властивості.
Він забезпечує максимально можливу точність і найбільше відповідає тому, як 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))); 

Надаючи три режими розрахунку — None, Manual та Automatic — Aspose.Tasks for .NET дає розробникам гнучкість у виборі того, як обробляти дані проекту.
Чи віддаєте ви перевагу продуктивність, контроль, або точність, правильний режим розрахунку дозволяє обробляти оновлення проекту найбільш ефективно для вашого сценарію.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.