Microsoftプロジェクトタスクを分割する方法

スケジュールどおりにタスクを完了することができず、2つ以上の部分に分割する必要がある場合があります。 C ++ APIのAspose.Tasksは、このMicrosoftプロジェクト機能をサポートしています。

タスクの分割

タスククラスによって公開されたsplitpartsプロパティは、タスクの分割部分を決定するために使用されますが、ResourceasSignmentクラスによって公開されるSplittaskメソッドは、単一のタスクを複数の部分に分割するために使用されます。 SplitPartsはスプリットパーツのコレクションを返しますが、Splittaskメソッドは開始日、終了日、カレンダーの引数を受け入れてタスクを分割します。

Microsoftプロジェクトの分割と表示タスク

Microsoftプロジェクトでタスクを分割するには:

  1. 長いタスクを特定すると、分割します。
  2. タスクメニューで、スケジュールグループを選択し、[タスクを分割] **をクリックします。
  3. タスクを分割する位置をクリックします。

Microsoft Projectの分割タスクを確認するには、ViewメニューでGantt Chartを選択できます。分割タスクは、点線の線でリンクされています。

タスクの作成と分割

タスクを作成して分割するには、次の手順に従います。

  1. 新しいプロジェクトを作成します。
  2. プロジェクトの新しいカレンダーを作成して割り当てます。
  3. プロジェクトに新しいタスクを作成して追加します。
  4. プロジェクトに新しいリソース割り当てを作成して追加します。
  5. ResourceAsSignmentクラスによって公開されたSplittaskメソッドを使用して、タスクを分割します。
  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.