So teilen Sie Microsoft -Projektaufgaben
Manchmal ist es nicht möglich, eine geplante Aufgabe zu erledigen, und sie muss in zwei oder mehr Teile aufgeteilt werden. Aspose.Tasks FÜR C ++ API unterstützt diese Microsoft -Projektfunktion.
Aufgaben aufgeteilt
Die von der Task Klasse ausgesetzte SPLITPARTS -Eigenschaft wird verwendet, um die geteilten Teile einer Aufgabe zu bestimmen, während die von der Ressourcenassignment -Klasse aufgedeckte Splittask -Methode verwendet wird, um eine einzelne Aufgabe in mehrere Teile aufzuteilen. SplitParts gibt eine Sammlung von geteilten Teilen zurück, während die Splittask -Methode Startdatum, Enddatum und Kalenderargumente akzeptiert, um die Aufgabe zu teilen.
Aufteilen und Anzeigen von Aufgaben im Microsoft -Projekt
Um eine Aufgabe im Microsoft -Projekt aufzuteilen:
- Identifizieren Sie eine lange Aufgabe und Sie möchten teilen.
- Wählen Sie im Menü Task die Zeitplan Gruppe und klicken Sie auf TAP -Task.
- Klicken Sie auf die Position, die Sie die Aufgabe teilen möchten.
Um Split -Aufgaben in Microsoft Project zu sehen, kann man Gantt -Diagramm im Menü View auswählen. Split -Aufgaben sind durch eine gepunktete Linie verknüpft.
Erstellen und Teilen von Aufgaben
Befolgen Sie die folgenden Schritte, um eine Aufgabe zu erstellen und zu teilen:
- Erstellen Sie ein neues Projekt.
- Erstellen und weisen Sie einen neuen Kalender für das Projekt zu und weisen Sie sie zu.
- Erstellen und fügen Sie eine neue Aufgabe im Projekt hinzu.
- Erstellen und fügen Sie eine neue Ressourcenzuweisung im Projekt zu und fügen Sie sie hinzu.
- Verwenden Sie die Splittask -Methode, die von der Ressourcenassignment -Klasse aufgedeckt wurde, um die Aufgabe zu teilen.
- Schreiben Sie das neue Projekt auf die Festplatte.
Der folgende Code zeigt, wie diese Aufgaben erledigt werden können:
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)));