Як розділити завдання проекту Microsoft

Іноді неможливо виконати завдання, як було заплановано, і його потрібно розділити на дві або більше частин. Aspose.Tasks для C ++ API підтримує цю функцію проекту Microsoft.

Завдання розщеплення

Властивість SplitParts, викрита класом завдання, використовується для визначення розділених частин завдання, тоді як метод Splittask, викритий класом ресурсів, використовується для розділення одного завдання на кілька частин. SplitParts повертає колекцію розділених деталей, тоді як метод Splittask приймає дату початку, дату закінчення та аргументи календаря для розділення завдання.

Завдання розщеплення та перегляду в Microsoft Project

Розділити завдання в проекті Microsoft:

  1. Визначте довге завдання, і ви хочете розділити.
  2. У меню завдання виберіть групу **** та натисніть розділити завдання.
  3. Клацніть на положенні, яке потрібно розділити завдання.

Щоб побачити розділені завдання в Microsoft Project One, можна вибрати gantt Chart у меню Переглянути. Розбиті завдання пов’язані пунктирною лінією.

Створення та розщеплення завдання

Щоб створити та розділити завдання, виконайте ці кроки:

  1. Створити новий проект.
  2. Створіть та призначити новий календар для проекту.
  3. Створіть і додайте нове завдання в проекті.
  4. Створіть і додайте нове завдання ресурсів у проекті.
  5. Використовуйте метод Splittask, викритий класом ResourceasSignment, щоб розділити завдання.
  6. Напишіть новий проект на диск.

Наступний код показує, як виконати ці завдання:

 1// Create new project
 2System::SharedPtr<Project> splitTaskProject = System::MakeObject<Project>();
 3    
 4// Get a standard calendar
 5System::SharedPtr<Calendar> calendar = splitTaskProject->Get<System::SharedPtr<Calendar>>(Prj::Calendar());
 6    
 7// Set project's calendar settings
 8splitTaskProject->Set(Prj::StartDate(), System::DateTime(2000, 3, 15, 8, 0, 0));
 9splitTaskProject->Set(Prj::FinishDate(), System::DateTime(2000, 4, 21, 17, 0, 0));
10    
11// Add a new task to root task
12System::SharedPtr<Task> rootTask = splitTaskProject->get_RootTask();
13rootTask->Set<System::String>(Tsk::Name(), u"Root");
14System::SharedPtr<Task> taskToSplit = rootTask->get_Children()->Add(u"Task1");
15taskToSplit->Set<Duration>(Tsk::Duration(), splitTaskProject->GetDuration(3));
16    
17// Create a new resource assignment and generate timephased data
18System::SharedPtr<ResourceAssignment> splitResourceAssignment = splitTaskProject->get_ResourceAssignments()->Add(taskToSplit, nullptr);
19splitResourceAssignment->TimephasedDataFromTaskDuration(calendar);
20    
21// Split the task into 3 parts.
22// Provide start date and finish date arguments to SplitTask method which will be used for split
23splitResourceAssignment->SplitTask(System::DateTime(2000, 3, 16, 8, 0, 0), System::DateTime(2000, 3, 16, 17, 0, 0), calendar);
24splitResourceAssignment->SplitTask(System::DateTime(2000, 3, 18, 8, 0, 0), System::DateTime(2000, 3, 18, 17, 0, 0), calendar);
25splitResourceAssignment->Set<WorkContourType>(Asn::WorkContour(), Aspose::Tasks::WorkContourType::Contoured);
26    
27// Save the Project
28System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
29splitTaskProject->Save(dataDir + u"CreateSplitTasks_out.xml", Aspose::Tasks::Saving::SaveFileFormat::XML);

Viewing Split Tasks with Aspose.Tasks

The following example shows how to identify split tasks and printing their details to a console window.

 1// Create project instance
 2System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
 3System::SharedPtr<Project> project1 = System::MakeObject<Project>(dataDir + u"ViewSplitTasks.mpp");
 4    
 5// Access task 
 6System::SharedPtr<Task> splitTask = project1->get_RootTask()->get_Children()->GetById(4);
 7    
 8// Display split parts of task
 9System::SharedPtr<SplitPartCollection> collection = splitTask->get_SplitParts();
10    
11{
12    auto splitPart_enumerator = (collection)->GetEnumerator();
13    decltype(splitPart_enumerator->get_Current()) splitPart;
14    while (splitPart_enumerator->MoveNext() && (splitPart = splitPart_enumerator->get_Current(), true))
15    {
16        System::Console::WriteLine(System::String(u"Index: ") + splitPart->get_Index() + u"\nStart: " + splitPart->get_Start() + u"\nFinish: " + splitPart->get_Finish() + u"\n");
17    }
18}

Calculating a Split Task’s Finish Date

The following code example calculates finish date for a split task.

 1// Read project            
 2System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
 3System::String projectName = u"SplitTaskFinishDate.mpp";
 4System::SharedPtr<Project> project = System::MakeObject<Project>(dataDir + projectName);
 5    
 6// Find a split task
 7System::SharedPtr<Task> splitTask = project->get_RootTask()->get_Children()->GetByUid(4);
 8    
 9// Find the project calendar
10System::SharedPtr<Calendar> calendar = project->Get<System::SharedPtr<Calendar>>(Prj::Calendar());
11    
12// Calculate task's finish date with different durations
13System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 8 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(8, 0, 0)));
14System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 16 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(16, 0, 0)));
15System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 24 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(24, 0, 0)));
16System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 28 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(28, 0, 0)));
17System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 32 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(32, 0, 0)));
18System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 46 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(46, 0, 0)));
19System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 61 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(61, 0, 0)));
20System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 75 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(75, 0, 0)));
21System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 80 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(80, 0, 0)));
22System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 120 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(120, 0, 0)));
23System::Console::WriteLine(System::String(u"Start Date: ") + splitTask->Get<System::DateTime>(Tsk::Start()).ToShortDateString() + u"\n+ Duration 150 hours\nFinish Date: " + calendar->GetTaskFinishDateFromDuration(splitTask, System::TimeSpan(150, 0, 0)));
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.