Microsoft 프로젝트 작업을 분할하는 방법
Contents
[
Hide
Show
]때로는 예정대로 작업을 완료 할 수 없으며 둘 이상의 부품으로 분할해야합니다. C ++ API 용 Tasks는이 Microsoft 프로젝트 기능을 지원합니다.
작업 분할
task 클래스에 노출 된 SplitParts 속성은 작업의 분할 부분을 결정하는 데 사용되는 반면 ResourceAssignment 클래스에 의해 노출 된 Splittask 메소드는 단일 작업을 여러 부분으로 분할하는 데 사용됩니다. SplitParts는 분할 부품 모음을 반환하는 반면 Splittask 메서드는 시작 날짜, 마감 날짜 및 캘린더 인수를 수락하여 작업을 분할합니다.
Microsoft Project의 분할 및보기 작업
Microsoft Project에서 작업을 분할하려면 :
- 긴 작업을 식별하고 나누고 싶습니다.
- 작업 메뉴에서 스케줄 그룹을 선택하고 스플릿 작업을 클릭하십시오.
- 작업을 분할하려는 위치를 클릭하십시오.
Microsoft 프로젝트에서 분할 작업을 보려면 view 메뉴에서 Gantt 차트를 선택할 수 있습니다. 분할 작업은 점선으로 연결됩니다.
작업 작성 및 분할
작업을 작성하고 분할하려면 다음을 수행하십시오.
- 새 프로젝트를 만듭니다.
- 프로젝트의 새 캘린더를 작성하고 할당하십시오.
- 프로젝트에서 새로운 작업을 작성하고 추가하십시오.
- 프로젝트에서 새로운 리소스 할당을 작성하고 추가하십시오.
- ResourceAssignment 클래스에서 노출 된 Splittask 메소드를 사용하여 작업을 분할하십시오.
- 새 프로젝트를 디스크에 작성하십시오.
다음 코드는 이러한 작업을 수행하는 방법을 보여줍니다.
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)));