Aspose.Tasks のプロジェクト計算モードの作成方法
プロジェクトを扱う際、状況に応じてスケジュール、コスト、またはリソースの再計算に対して異なるアプローチが必要になることがあります。Aspose.Tasks for .NET は柔軟な計算モードを提供しており、プロジェクトのプロパティを自動的に更新するか、手動で更新するか、あるいはまったく再計算しないかを選択できます。これにより、処理効率、正確性、およびプロジェクトファイルの動作を完全に制御できます。
案件の計算モード
Aspose.Tasks for .NET API は、プロパティの値を設定したときに依存するプロパティの値がどのように計算されるかを定義する、3つの案件計算モードを提供します。
適切なモードを選択することで、利用ケースに応じて効率と精度のバランスを取ることができます。
これらの計算モードは次のとおりです。
- なし 必要なプロパティのみを設定し、計算は一切行いません。案件全体を再計算せずに値を素早く調整したい場合に有用です。
- 手動 依存するオブジェクトのプロパティを設定しますが、他の案件データの完全な再計算は引き起こしません。部分的な更新が必要なときに役立ちます。
- 自動 変更後に日付、作業量、およびコストのプロパティを即座に再計算します。正確性と一貫性が重要な場合に推奨されます。
以下の例は、各モードがコード内でどのように適用されるかを示します。
案件の計算モード:なし
このモードでは、案件は再計算を行いません。バッチ更新を行う場合や、依存関係を調整せずに生の値だけを変更する必要がある場合に効率的です。
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)));
なし、手動、自動の3つの計算モードを提供することで、Aspose.Tasks for .NET は開発者に案件データの処理方法を選択する柔軟性を提供します。
優先するものが 処理効率、 制御、または 正確性、適切な計算モードにより、シナリオに最も適した方法で案件の更新を効率的に処理できます。