Comment diviser les tâches du projet Microsoft

Parfois, il n’est pas possible de terminer une tâche comme prévu et il doit être divisé en deux pièces ou plus. Aspose.Tasks pour l’API C ++ prend en charge cette fonctionnalité Microsoft Project.

Tâches de division

La propriété SplitParts exposée par la classe Tâche est utilisée pour déterminer les parties divisées d’une tâche tandis que la méthode SplitTask exposée par la classe de réaction de ressources est utilisée pour diviser une seule tâche en plusieurs parties. SplitParts renvoie une collection de pièces divisées tandis que la méthode SplitTask accepte la date de début, la date de fin et les arguments de calendrier pour diviser la tâche.

Les tâches de fractionnement et de visualisation dans Microsoft Project

Pour diviser une tâche dans le projet Microsoft:

  1. Identifiez une longue tâche et vous souhaitez diviser.
  2. Dans le menu Tâche, sélectionnez le groupe Schedule et cliquez sur Tâche de séparation.
  3. Cliquez sur la position que vous souhaitez diviser la tâche.

Pour voir les tâches divisées dans Microsoft Project, on peut sélectionner Gantt Chart dans le menu View. Les tâches divisées sont liées par une ligne pointillée.

Tâche de création et de division

Pour créer et diviser une tâche, suivez ces étapes:

  1. Créer un nouveau projet.
  2. Créez et affectez un nouveau calendrier pour le projet.
  3. Créez et ajoutez une nouvelle tâche dans le projet.
  4. Créez et ajoutez une nouvelle affectation de ressources dans le projet.
  5. Utilisez la méthode SplitTask exposée par la classe ResourceSignment pour diviser la tâche.
  6. Écrivez le nouveau projet sur le disque.

Le code suivant montre comment accomplir ces tâches:

 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.