Робота з WBS, пов'язаними з завданнями
Коди WBS (структура розбиття роботи), дозволяє призначити складові номери завданням відповідно до потреб вашого бізнесу. Це метод застосування індивідуальної схеми контуру до проекту. Aspose.Tasks для C ++ API підтримує цю функцію.
Робота зі структурою поломки роботи
Властивості WBS та WBSLEVEL, викриті класом TSK, використовуються для читання та запису структури роботи роботи завдань.
Перегляд проекту Microsoft WBS
Для перегляду інформації WBS в Microsoft Project:
- У формі запису завдань виберіть меню вставити, а потім стовпчик.
- Додайте стовпчик WBS.
Отримати WBS in aspose.tasks
Наступні приклади показують, як отримати значення WBS завдання за допомогою aspope.tasks.
1// Read project
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"TaskWBS.mpp");
4
5// Create a ChildTasksCollector instance
6System::SharedPtr<ChildTasksCollector> collector = System::MakeObject<ChildTasksCollector>();
7
8// Collect all the tasks from RootTask using TaskUtils
9TaskUtils::Apply(project1->get_RootTask(), collector, 0);
10
11// Parse through all the collected tasks
12
13{
14 auto tsk_enumerator = (collector->get_Tasks())->GetEnumerator();
15 decltype(tsk_enumerator->get_Current()) tsk;
16 while (tsk_enumerator->MoveNext() && (tsk = tsk_enumerator->get_Current(), true))
17 {
18 System::Console::WriteLine(tsk->Get(Tsk::WBS()));
19 System::Console::WriteLine(tsk->Get(Tsk::WBSLevel()));
20
21 // Set custom WBS
22 tsk->Set<System::String>(Tsk::WBS(), System::String(u"custom wbs") + tsk->Get(Tsk::WBS()));
23 }
24}
Adding WBS Code Definitions
Aspose.Tasks for C++ API allows adding WBS code definition for tasks to a project same as Microsoft Project.WBSCodeDefinition class exposes various properties that can be used to generate desired WBS codes in a project. The following code sample demonstrates setting up WBS code definitions in a project.
1System::SharedPtr<Project> proj = System::MakeObject<Project>();
2
3proj->set_WBSCodeDefinition(System::MakeObject<WBSCodeDefinition>());
4proj->get_WBSCodeDefinition()->set_GenerateWBSCode(true);
5proj->get_WBSCodeDefinition()->set_VerifyUniqueness(true);
6proj->get_WBSCodeDefinition()->set_CodePrefix(u"CRS-");
7
8System::SharedPtr<WBSCodeMask> mask = System::MakeObject<WBSCodeMask>();
9mask->set_Length(2);
10mask->set_Separator(u"-");
11mask->set_Sequence(Aspose::Tasks::WBSSequence::OrderedNumbers);
12proj->get_WBSCodeDefinition()->get_CodeMaskCollection()->Add(mask);
13
14mask = System::MakeObject<WBSCodeMask>();
15mask->set_Length(1);
16mask->set_Separator(u"-");
17mask->set_Sequence(Aspose::Tasks::WBSSequence::OrderedUppercaseLetters);
18proj->get_WBSCodeDefinition()->get_CodeMaskCollection()->Add(mask);
19
20System::SharedPtr<Task> tsk = proj->get_RootTask()->get_Children()->Add(u"Task 1");
21System::SharedPtr<Task> child = tsk->get_Children()->Add(u"Task 2");
22
23proj->Recalculate();
24proj->Save(dataDir + u"AddWBSCodes_out.xml", Aspose::Tasks::Saving::SaveFileFormat::XML);
Renumber WBS codes
Aspose.Tasks for C++ API is able to renumber WBS codes similar to MSP’s “Renumber” function.
1auto project = System::MakeObject<Project>(dataDir + u"RenumberExample.mpp");
2
3auto tasks = project->get_RootTask()->SelectAllChildTasks();
4
5System::Console::WriteLine(u"WBS codes before: ");
6
7// output: ""; "1"; "2"; "4"
8
9{
10 auto task_enumerator = (tasks)->GetEnumerator();
11 decltype(task_enumerator->get_Current()) task;
12 while (task_enumerator->MoveNext() && (task = task_enumerator->get_Current(), true))
13 {
14 System::Console::WriteLine(System::String(u"\"") + task->Get(Tsk::WBS()) + u"\"" + u"; ");
15 }
16}
17
18// project.RenumberWBSCode(); // this overload could have used too
19project->RenumberWBSCode([&]{ int32_t init_0[] = {1, 2, 3}; auto list_0 = System::MakeObject<System::Collections::Generic::List<int32_t>>(); list_0->AddInitializer(3, init_0); return list_0; }());
20
21System::Console::WriteLine(u"\nWBS codes after: ");
22
23// output: ""; "1"; "2"; "3"
24
25{
26 auto task_enumerator = (tasks)->GetEnumerator();
27 decltype(task_enumerator->get_Current()) task;
28 while (task_enumerator->MoveNext() && (task = task_enumerator->get_Current(), true))
29 {
30 System::Console::WriteLine(System::String(u"\"") + task->Get(Tsk::WBS()) + u"\"" + u"; ");
31 }
32}