使用 C# 以編程方式計算項目

我們可以使用 Microsoft Project 的項目選項中定義的計算模式來計算項目進度或成本。項目進度表顯示所有項目任務的開始和結束日期。 Microsoft Project 允許手動或自動進行項目計算。作為C#開發者,我們可以很方便的在.NET應用中設置工程計算方式,計算工程屬性。在本文中,我們將學習如何使用 C# 以編程方式計算項目。

本文應涵蓋以下主題:

以編程方式計算項目的 C# API

為了設置項目計算模式,我們將使用 Aspose.Tasks for .NET API。它提供了三種項目計算模式,用於計算依賴屬性的值。這些計算模式是:

  • 無 - 它只設置必要的屬性,不重新計算項目日期和成本。
  • 手動 - 它僅設置依賴對象屬性而不重新計算項目日期和成本。
  • 自動 - 它會自動重新計算項目日期和成本屬性。

API在CalculationMode枚舉中定義了上述計算模式。 Project 類的 CalculationMode 屬性允許設置或獲取 CalculationMode 的值。 API 還允許操作現有項目以添加一些修改。此外,它有助於無縫執行基本和高級項目管理操作。請 下載 API 的 DLL 或使用 NuGet 安裝它。

PM> Install-Package Aspose.Tasks

使用 C# 的手動項目計算

我們可以將計算模式設置為手動,並按照下面給出的步驟進行驗證:

  1. 首先,創建一個 Project 類的實例。
  2. 接下來,將計算模式設置為手動。
  3. 然後,指定項目開始日期。
  4. 接下來,添加新任務,例如,任務 1 和任務 2。
  5. 然後,讀取在手動模式下設置的任務屬性。
  6. 之後,初始化 TaskLinks 類的對象並鏈接任務。
  7. 最後,驗證任務 2 的開始和結束日期。

以下代碼示例顯示如何使用 C# 手動計算項目。

// 此代碼示例演示如何設置手動項目計算模式。
// 創建項目實例
Project project = new Project();

// 將計算模式設置為手動
project.CalculationMode = CalculationMode.Manual;

// 設置項目開始日期
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// 添加新任務
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// 必要的屬性在手動模式下設置
Console.WriteLine("Task1.Id Equals 1 : {0} ", task1.Get(Tsk.Id).Equals(1));
Console.WriteLine("Task1 OutlineLevel Equals 1 : {0} ", task1.Get(Tsk.OutlineLevel).Equals(1));
Console.WriteLine("Task1 Start Equals 15/04/2015 08:00 AM : {0} ", task1.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task1 Finish Equals 15/04/2015 05:00 PM : {0} ", task1.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task1 Duration Equals 1 day : {0} ", task1.Get(Tsk.Duration).ToString().Equals("1 day"));
Console.WriteLine("Task2 Start Equals 15/04/2015 08:00 AM : {0} ", task2.Get(Tsk.Start).Equals(new DateTime(2015, 4, 15, 8, 0, 0)));
Console.WriteLine("Task2 Finish Equals 15/04/2015 05:00 PM : {0} ", task2.Get(Tsk.Finish).Equals(new DateTime(2015, 4, 15, 17, 0, 0)));
Console.WriteLine("Task2 Duration Equals 1 day : {0} ", task2.Get(Tsk.Duration).ToString().Equals("1 day"));

// 將兩個任務鏈接在一起,它們的日期不應在手動模式下重新計算
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// 任務 2 日期沒有變化
Console.WriteLine("Task1 Start Equals Task2 Start : {0} ", task1.Get(Tsk.Start).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).Equals(task2.Get(Tsk.Finish)));
Task1.Id Equals 1 : True
Task1 OutlineLevel Equals 1 : True
Task1 Start Equals 15/04/2015 08:00 AM : True
Task1 Finish Equals 15/04/2015 05:00 PM : True
Task1 Duration Equals 1 day : True
Task2 Start Equals 15/04/2015 08:00 AM : True
Task2 Finish Equals 15/04/2015 05:00 PM : True
Task2 Duration Equals 1 day : True
Task1 Start Equals Task2 Start : True
Task1 Finish Equals Task2 Finish : True

使用 C# 的自動項目計算

我們可以將計算模式設置為自動,並按照下面給出的步驟進行驗證:

  1. 首先,創建一個 Project 類的實例。
  2. 接下來,將計算模式設置為自動。
  3. 然後,設置項目開始日期。
  4. 現在,添加新任務,例如,任務 1 和任務 2。
  5. 之後,初始化 TaskLinks 類的對象並鏈接任務。
  6. 最後,驗證重新計算的日期。

下面的代碼示例顯示瞭如何使用 C# 自動計算項目。

// 此代碼示例演示如何設置自動項目計算模式。
// 創建項目實例
Project project = new Project();

// 將計算模式設置為自動
project.CalculationMode = CalculationMode.Automatic;

// 設置項目開始日期
project.Set(Prj.StartDate, new DateTime(2015, 4, 15));

// 添加新任務
Aspose.Tasks.Task task1 = project.RootTask.Children.Add("Task 1");
Aspose.Tasks.Task task2 = project.RootTask.Children.Add("Task 2");

// 鏈接任務
TaskLink link = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);

// 驗證重新計算的日期
Console.WriteLine("Task1 Start + 1 Equals Task2 Start : {0} ", task1.Get(Tsk.Start).AddDays(1).Equals(task2.Get(Tsk.Start)));
Console.WriteLine("Task1 Finish + 1 Equals Task2 Finish : {0} ", task1.Get(Tsk.Finish).AddDays(1).Equals(task2.Get(Tsk.Finish)));
Console.WriteLine("RootTask Finish Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.RootTask.Get(Tsk.Finish)));
Console.WriteLine("Project Finish Date Equals Task2 Finish : {0} ", task2.Get(Tsk.Finish).Equals(project.Get(Prj.FinishDate)));
Task1 Start + 1 Equals Task2 Start : True
Task1 Finish + 1 Equals Task2 Finish : True
RootTask Finish Equals Task2 Finish : True
Project Finish Date Equals Task2 Finish : True

C#中沒有工程計算模式

我們可以將計算模式設置為自動,並按照下面給出的步驟進行驗證:

  1. 首先,創建一個 Project 類的實例。
  2. 接下來,將計算模式設置為無。
  3. 然後,指定項目開始日期。
  4. 接下來,添加一個新任務,例如任務 1。
  5. 然後,讀取任務屬性。
  6. 之後,以天為單位設置任務持續時間。
  7. 最後,驗證任務的開始和結束日期。

以下代碼示例顯示如何使用 C# 將項目計算設置為無。

// 此代碼示例演示如何將項目計算模式設置為無。
// 創建項目實例
Project project = new Project();

// 將計算模式設置為無
project.CalculationMode = CalculationMode.None;

// 添加新任務
Aspose.Tasks.Task task = project.RootTask.Children.Add("Task");

// 注意連id都沒有計算
Console.WriteLine("Task.Id Equals 0 : {0} ", task.Get(Tsk.Id).Equals(0));
Console.WriteLine("Task.OutlineLevel Equals 0 : {0} ", task.Get(Tsk.OutlineLevel).Equals(0));
Console.WriteLine("Task Start Equals DateTime.MinValue : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Console.WriteLine("Task Duration Equals 0 mins : {0} ", task.Get(Tsk.Duration).ToString().Equals("0 mins"));

// 設置持續時間屬性
task.Set(Tsk.Duration, project.GetDuration(2, TimeUnitType.Day));
Console.WriteLine("Task Duration Equals 2 days : {0} ", task.Get(Tsk.Duration).ToString().Equals("2 days"));
Console.WriteLine("Task Start Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Start).Equals(DateTime.MinValue));
Console.WriteLine("Task Finish Equals DateTime.MinValue  : {0} ", task.Get(Tsk.Finish).Equals(DateTime.MinValue));
Task.Id Equals 0 : True
Task.OutlineLevel Equals 0 : False
Task Start Equals DateTime.MinValue : True
Task Finish Equals DateTime.MinValue : True
Task Duration Equals 0 mins : True
Task Duration Equals 2 days : True
Task Start Equals DateTime.MinValue  : True
Task Finish Equals DateTime.MinValue  : True

獲得免費許可證

您可以 獲得免費的臨時許可證 來試用該庫,而沒有評估限制。

結論

在本文中,我們學習瞭如何以編程方式設置項目計算模式。我們還看到瞭如何使用 C# 在每種計算模式中計算依賴屬性的值。此外,您可以使用文檔了解更多關於 Aspose.Tasks for .NET API 的信息。如有任何歧義,請隨時在論壇上與我們聯繫。

也可以看看