MS Project 是一款广泛使用的项目管理软件,可帮助管理人员有效地管理项目。它允许创建任务、添加资源、将任务分配给资源、监控进度以及管理与预算相关的操作。在本文中,您将学习如何在没有 MS Project 的情况下将项目管理活动嵌入到您的 C++ 应用程序中。在代码示例的帮助下,您将学习如何使用 C++ 以编程方式创建 MS Project 文件 (.mpp/.xml)、添加任务、资源和日历。此外,还将演示项目中资源的任务分配。
- C++ MS 项目文件操作 API
- 使用 C++ 从头开始创建 MS 项目文件
- 使用 C++ 将任务添加到项目
- 使用 C++ 将资源添加到项目
- 使用 C++ 将项目的任务分配给资源
- 使用 C++ 在项目中添加日历
C++ MS 项目文件操作 API
Aspose.Tasks for C++ 是一个 C++ 项目管理 API,可让您以编程方式创建、操作、导出和转换 MS Project 文件。 API 为您提供了一套完整的功能,可以在没有 MS Project 的情况下创建项目、任务、资源、日历和执行其他项目管理活动。您可以从 此处 下载 API 的完整包或使用 NuGet 安装它。
使用 C++ 创建 MS 项目文件 (.mpp)
让我们首先创建一个空项目。以下是使用 Aspose.Tasks for C++ 从头开始创建 MS Project (.mpp) 文件的步骤。
- 创建 Project 类的对象。
- 设置项目的属性。
- 使用 Project->Save(u"project.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP) 方法将项目保存为 .mpp 文件。
以下代码示例展示了如何使用 C++ 创建 MS Project 的 .mpp 文件。
// 创建项目
System::SharedPtr<Project> project = System::MakeObject<Project>();
// 设置项目信息
project->Set<System::String>(Prj::Author(), u"Author");
project->Set<System::String>(Prj::LastAuthor(), u"Last Author");
project->Set<int32_t>(Prj::Revision(), 15);
project->Set<System::String>(Prj::Keywords(), u"MSP Aspose");
project->Set<System::String>(Prj::Comments(), u"Comments");
// 将项目另存为 .mpp 文件
project->Save(u"project.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);
使用 C++ 将任务添加到项目
创建项目后,您可以继续向其中添加任务。您可以创建一个新项目或加载现有的 MS Project 文件来添加任务。以下是创建任务或子任务并将其添加到项目的步骤。
- 使用 Project 类创建一个新项目或从 .mpp 文件加载它。
- 使用 Project->getRootTask()->getChildren()->Add(u"Summary1") 方法将任务添加到项目中,并将新创建的任务存储到 Task 对象中。
- (可选)使用 Task->getChildren()->Add(u"Subtask1") 方法将子任务添加到新创建的任务中。
- 使用 Project->Save(u"project.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP) 方法将项目保存为 .mpp 文件。
以下代码示例展示了如何使用 C++ 创建任务并将其添加到项目中。
// 创建项目实例
System::SharedPtr<Project> project = System::MakeObject<Project>(u"project.mpp");
// 添加任务、子任务并保存项目
System::SharedPtr<Task> task = project->get_RootTask()->get_Children()->Add(u"Summary1");
task->Set(Tsk::Start(), project->get_RootTask()->Get<System::DateTime>(Tsk::Start()).AddDays(1));
task->Set<System::String>(Tsk::Name(), u"new name");
System::SharedPtr<Task> subtask = task->get_Children()->Add(u"Subtask1");
// 保存项目
project->Save(dataDir + u"CreateTasks_out.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);
阅读更多 关于与任务相关的扩展功能。
使用 C++ 将资源添加到项目
资源是应该完成项目的实体。通常,人被称为项目的资源。以下是创建资源并将其添加到项目的步骤。
- 使用 Project 类创建一个新项目或从 .mpp 文件加载它。
- 使用 Project->getResources()->Add(u"Rsc") 方法添加新资源。
- 使用 Project->Save(u"project.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP) 方法保存项目。
以下代码示例展示了如何使用 C++ 在项目中添加资源。
// 创建项目实例
System::SharedPtr<Project> project = System::MakeObject<Project>();
// 添加资源
System::SharedPtr<Resource> rsc1 = project->get_Resources()->Add(u"Rsc");
// 设置资源属性,资源属性由静态类Rsc表示
rsc1->Set<System::Decimal>(Rsc::StandardRate(), static_cast<System::Decimal>(15));
rsc1->Set<System::Decimal>(Rsc::OvertimeRate(), static_cast<System::Decimal>(20));
// 将项目另存为 XML
project->Save(u"CreateResources_out.xml", Aspose::Tasks::Saving::SaveFileFormat::XML);
阅读更多 关于与资源相关的扩展功能。
使用 C++ 将项目的任务分配给资源
创建任务和资源后,下一步是将每个任务分配给负责完成任务的资源。以下是将任务分配给资源的步骤。
- 使用 Project 类创建一个新项目或从 .mpp 文件加载它。
- 如果项目为空,请添加新任务和资源。
- 将所需的任务和资源分别访问到 Task 和 Resource 对象中。
- 使用 Project->getResourceAssignments()->Add(Task, Resource) 方法将任务分配给资源。
- 使用 Project.Save() 方法保存项目。
以下代码示例演示如何使用 C++ 将任务分配给项目中的资源。
// 创建空项目
System::SharedPtr<Project> project1 = System::MakeObject<Project>();
// 添加新任务和资源
System::SharedPtr<Task> task1 = project1->get_RootTask()->get_Children()->Add(u"Task");
System::SharedPtr<Resource> rsc1 = project1->get_Resources()->Add(u"Rsc");
// 分配资源所需的任务
System::SharedPtr<ResourceAssignment> assn = project1->get_ResourceAssignments()->Add(task1, rsc1);
使用 C++ 在项目中添加日历
日历用于为 MS 项目中的项目创建时间表。 Aspose.Tasks for C++ 让为项目创建日历变得非常简单。以下是创建日历、添加工作日和指定工作时间的步骤。
- 使用 Project 类创建一个新项目或从 .mpp 文件加载它。
- 使用 Project->getCalendars()->Add(u"Calendar1") 将日历添加到项目中,并将返回的值存储在 Calendar 对象中。
- 使用 Calendar->getWeekDays()->Add() 方法将工作日添加到日历中。
- 保存项目。
您还可以在日历中设置工作日的工作时间。为此,您可以在添加工作日后按照以下步骤操作。
- 创建一个 WeekDay 类的对象。
- 创建一个 WorkingTime 类的对象。
- 使用 WorkingTime->setFromTime() 和 WorkingTime->setToTime() 方法设置时间。
- 使用 WeekDay->getWorkingTimes()->Add(WorkingTime) 方法将工作时间添加到工作日。
- 使用 Calendar->getWeekDays()->Add(WeekDay) 方法将工作日添加到日历中。
- 保存项目。
以下代码示例展示了如何使用 C++ 在项目中创建日历。
// 创建项目实例
System::SharedPtr<Project> project = System::MakeObject<Project>();
// 定义日历
System::SharedPtr<Aspose::Tasks::Calendar> cal = project->get_Calendars()->Add(u"Calendar1");
// 使用默认时间添加周一至周四的工作日
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Monday));
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Tuesday));
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Wednesday));
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Thursday));
cal->get_WeekDays()->Add(System::MakeObject<WeekDay>(Aspose::Tasks::DayType::Saturday));
cal->get_WeekDays()->Add(System::MakeObject<WeekDay>(Aspose::Tasks::DayType::Sunday));
// 将星期五设为短工作日
System::SharedPtr<WeekDay> myWeekDay = System::MakeObject<WeekDay>(Aspose::Tasks::DayType::Friday);
// 设置工作时间。只有 DateTime 的时间部分很重要
System::SharedPtr<WorkingTime> wt1 = System::MakeObject<WorkingTime>();
wt1->set_FromTime(System::DateTime(1, 1, 1, 9, 0, 0, 0));
wt1->set_ToTime(System::DateTime(1, 1, 1, 12, 0, 0, 0));
System::SharedPtr<WorkingTime> wt2 = System::MakeObject<WorkingTime>();
wt2->set_FromTime(System::DateTime(1, 1, 1, 13, 0, 0, 0));
wt2->set_ToTime(System::DateTime(1, 1, 1, 16, 0, 0, 0));
myWeekDay->get_WorkingTimes()->Add(wt1);
myWeekDay->get_WorkingTimes()->Add(wt2);
myWeekDay->set_DayWorking(true);
cal->get_WeekDays()->Add(myWeekDay);
// 保存项目
System::String dataDir = Examples::CPP::RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
project->Save(u"Project_DefineCalendarWeekdays_out.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);
阅读更多 关于与日历相关的扩展功能。
结论
在本文中,您学习了如何使用 C++ 创建 MS Project 文件并将它们保存为 .mpp 或 .xml。此外,您还学习了如何以编程方式在项目中添加任务、资源、资源分配和日历。您还可以浏览 文档 以了解 Aspose.Tasks for C++ 的扩展功能,以进一步增强应用程序中的项目管理功能。