Создание файлов MS Project на C++

MS Project — это широко используемое программное обеспечение для управления проектами, которое помогает менеджерам эффективно управлять своими проектами. Это позволяет создавать задачи, добавлять ресурсы, распределять задачи по ресурсам, отслеживать ход выполнения и управлять операциями, связанными с бюджетом. В этой статье вы узнаете, как внедрить действия по управлению проектами в ваши приложения C++ без MS Project. С помощью примеров кода вы узнаете, как программно создавать файлы MS Project (.mpp/.xml), добавлять задачи, ресурсы и календари с помощью C++. Кроме того, также будет продемонстрировано назначение задач ресурсам в проекте.

C++ API управления файлами MS Project

Aspose.Tasks for C++ — это API управления проектами C++, который позволяет программно создавать, манипулировать, экспортировать и преобразовывать файлы MS Project. API предоставляет вам полный набор функций для создания проектов, задач, ресурсов, календарей и выполнения других действий по управлению проектами без MS Project. Вы можете загрузить полный пакет API здесь или установить его с помощью NuGet.

Создайте файлы проекта MS (.mpp) с помощью C++

Давайте сначала начнем с создания пустого проекта. Ниже приведены шаги по созданию файла MS Project (.mpp) с нуля с помощью Aspose.Tasks для C++.

В следующем примере кода показано, как создать MPP-файл MS Project с помощью C++.

// Создать проект
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, чтобы добавить задачи. Ниже приведены шаги по созданию и добавлению задач или подзадач в проект.

В следующем примере кода показано, как создавать и добавлять задачи в проект с помощью 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++

Ресурсы — это объекты, которые должны завершить проект. Обычно людей называют ресурсами проекта. Ниже приведены шаги по созданию и добавлению ресурсов в проект.

В следующем примере кода показано, как добавить ресурс в проект с помощью 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);

Подробнее о расширенных функциях, связанных с ресурсами.

Назначьте задачу проекта ресурсу с помощью С++

После того как вы создали задачи и ресурсы, следующим шагом будет назначение каждой задачи ресурсу, отвечающему за ее выполнение. Ниже приведены шаги для назначения задачи ресурсу.

  • Создайте новый проект или загрузите его из файла .mpp, используя класс Project.
  • Добавьте новые задачи и ресурсы, если проект пуст.
  • Получите доступ к нужной задаче и ресурсу в объект 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 Project. Aspose.Tasks for C++ упростил создание календаря для проекта. Ниже приведены шаги по созданию календаря, добавлению дней недели и указанию рабочего времени.

  • Создайте новый проект или загрузите его из файла .mpp, используя класс Project.
  • Добавьте календарь в проект с помощью Project->getCalendars()->Add(u"Calendar1") и сохраните возвращенное значение в объекте Calendar.
  • Добавьте рабочие дни в календарь с помощью метода Calendar->getWeekDays()->Add().
  • Сохраните проект.

Вы также можете установить рабочее время для дня недели в календаре. Для этого вы можете выполнить следующие шаги после добавления рабочих дней.

В следующем примере кода показано, как создать календарь в проекте с помощью 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);

Подробнее о расширенных функциях, связанных с календарями.

Вывод

В этой статье вы узнали, как создавать файлы MS Project и сохранять их в формате .mpp или .xml с помощью C++. Кроме того, вы узнали, как программно добавлять задачи, ресурсы, назначения ресурсов и календари в проект. Вы также можете изучить документацию для расширенных функций Aspose.Tasks for C++, чтобы еще больше расширить возможности управления проектами в ваших приложениях.

Смотрите также