使用 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 的信息。如有任何歧义,请随时在 论坛 上与我们联系。

也可以看看