Розширені атрибути проекту

Microsoft Project має широку схему обміну даними XML, яка полегшує обмін інформацією між програмами та програмуванням з файлами проектів. Схема дозволяє додати розширені атрибути до завдань, ресурсів та завдань. Ця стаття демонструє, як працювати з розширеними атрибутами, використовуючи Aspope.tasks.

Робота з спеціальними полями за допомогою Microsoft Project

У цьому прикладі ми продемонструємо, як працювати з розширеним атрибутом проекту для асоціації інформації з завданням.

  1. У MSP перейдіть до проекту-> Спеціальні поля.
  2. Звідси виберіть завдання.
  3. Виберіть текст як тип користувальницького поля у поле Combo Type.
  4. Виберіть Text1 як користувацьке поле, з яким ви хочете працювати
  5. Використовуйте кнопку “перейменувати”, щоб перейменувати псевдонім поля, якщо він бажаний, і натисніть кнопку ОК
  6. Додайте нове завдання та вставте новий стовпець у рядок завдань із власним полем, яке ви використовували на наведеному вищезазначеному кроці

Відкрийте розширені атрибути в проекті Microsoft

Робота з спеціальними полями/розширеними атрибутами за допомогою Aspose.Tasks для C ++ API

Aspose.Tasks для C ++ API надає можливість створення нових розширених атрибутів, а також працювати з розширеними атрибутами, вже присутніми в документі. Спеціальні поля або розширені атрибути представлені за допомогою колекції ExtendedAttributes проекту в Aspose.tasks. Він містить усі розширені атрибути визначення проектного документа. Деякі відображення визначення спеціального поля MSP є, як показано на зображенні нижче.

Редагувати розширені атрибути в Microsoft Project

Створення нового розширеного атрибута та додавання його до завдання

Щоб додати новий розширений атрибут для завдання чи ресурсу, ми спочатку повинні визначити та додати визначення розширеного атрибута до колекції ExtendedAttributes. ExtendAttributeDefinition Class використовується для визначення нової розширеної відповідальності в проекті. FieldID повинен бути встановлений для належного визначення розширеного атрибута, який пов’язаний з ExtendedAttributETASK (у випадку завдання) або ExtendedAttributerSource (у випадку ресурсів). Наступний зразок коду показує, як визначити новий розширений атрибут для поля проекту Text1. Після того, як розширене визначення атрибута буде завершено, тепер ви можете створити з нього новий розширений атрибут і призначити його завданням.

 1System::SharedPtr<Project> project1 = System::MakeObject<Project>(dataDir + u"Blank2010.mpp");
 2        
 3System::SharedPtr<ExtendedAttributeDefinition> myTextAttributeDefinition = project1->get_ExtendedAttributes()->GetById((int32_t)Aspose::Tasks::ExtendedAttributeTask::Text1);
 4        
 5// If the Custom field doesn't exist in Project, create it
 6if (myTextAttributeDefinition == nullptr)
 7{
 8    myTextAttributeDefinition = ExtendedAttributeDefinition::CreateTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Text1, u"My text field");
 9    project1->get_ExtendedAttributes()->Add(myTextAttributeDefinition);
10}
11        
12// Generate Extended Attribute from definition
13System::SharedPtr<ExtendedAttribute> text1TaskAttribute = myTextAttributeDefinition->CreateExtendedAttribute();
14        
15text1TaskAttribute->set_TextValue(u"Text attribute value");
16        
17// Add extended attribute to task
18System::SharedPtr<Task> tsk = project1->get_RootTask()->get_Children()->Add(u"Task 1");
19tsk->get_ExtendedAttributes()->Add(text1TaskAttribute);
20        
21project1->Save(dataDir + u"CreateExtendedAttributes_out.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);

Writing Updated Extended Attribute Definitions and Values to MPP

Aspose.Tasks for C++ API supports updating extended attribute data in a Microsoft Project MPP file and save it back.

The code example given below demonstrates how to add new extended attributes of the Resource and Task types to the source MPP file. The steps involved in this activity are:

  1. Create an instance of Project Reader.
  2. Read the source MPP file.
  3. Define a new extended attribute and update its values.
  4. Save the project using the Project Writer.

The following example shows setting the extended attributes of a resource.

  1System::SharedPtr<Project> project = System::MakeObject<Project>(dataDir + u"WriteUpdatedExtendedAttributeDefinitions.mpp");
  2        
  3        
  4// C# preprocessor directive: #region task attributes
  5        
  6        
  7// Add new text3 extended attribute with lookup and one lookup value
  8System::SharedPtr<ExtendedAttributeDefinition> taskTextAttributeDefinition = ExtendedAttributeDefinition::CreateLookupTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Text3, u"New text3 attribute");
  9taskTextAttributeDefinition->set_ElementType(Aspose::Tasks::ElementType::Task);
 10project->get_ExtendedAttributes()->Add(taskTextAttributeDefinition);
 11        
 12System::SharedPtr<Value> textVal = System::MakeObject<Value>();
 13textVal->set_Id(1);
 14textVal->set_Description(u"Text value descr");
 15textVal->set_Val(u"Text value1");
 16        
 17taskTextAttributeDefinition->AddLookupValue(textVal);
 18        
 19// Add new cost1 extended attribute with lookup and two cost values
 20System::SharedPtr<ExtendedAttributeDefinition> taskCostAttributeDefinition = ExtendedAttributeDefinition::CreateLookupTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Cost1, u"New cost1 attribute");
 21project->get_ExtendedAttributes()->Add(taskCostAttributeDefinition);
 22        
 23System::SharedPtr<Value> costVal1 = System::MakeObject<Value>();
 24costVal1->set_Id(2);
 25costVal1->set_Description(u"Cost value 1 descr");
 26costVal1->set_Val(u"99900");
 27        
 28System::SharedPtr<Value> costVal2 = System::MakeObject<Value>();
 29costVal2->set_Id(3);
 30costVal2->set_Description(u"Cost value 2 descr");
 31costVal2->set_Val(u"11100");
 32        
 33taskCostAttributeDefinition->AddLookupValue(costVal1);
 34taskCostAttributeDefinition->AddLookupValue(costVal2);
 35        
 36// Add new task and assign attribute lookup value.
 37System::SharedPtr<Task> task = project->get_RootTask()->get_Children()->Add(u"New task");
 38        
 39System::SharedPtr<ExtendedAttribute> taskAttr = taskCostAttributeDefinition->CreateExtendedAttribute(costVal1);
 40task->get_ExtendedAttributes()->Add(taskAttr);
 41        
 42System::SharedPtr<ExtendedAttributeDefinition> taskStartAttributeDefinition = ExtendedAttributeDefinition::CreateLookupTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Start7, u"New start 7 attribute");
 43        
 44System::SharedPtr<Value> startVal = System::MakeObject<Value>();
 45startVal->set_Id(4);
 46startVal->set_DateTimeValue(System::DateTime::get_Now());
 47startVal->set_Description(u"Start 7 value description");
 48        
 49taskStartAttributeDefinition->AddLookupValue(startVal);
 50        
 51project->get_ExtendedAttributes()->Add(taskStartAttributeDefinition);
 52        
 53System::SharedPtr<ExtendedAttributeDefinition> taskFinishAttributeDefinition = ExtendedAttributeDefinition::CreateLookupTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Finish4, u"New finish 4 attribute");
 54        
 55System::SharedPtr<Value> finishVal = System::MakeObject<Value>();
 56finishVal->set_Id(5);
 57finishVal->set_DateTimeValue(System::DateTime::get_Now());
 58finishVal->set_Description(u"Finish 4 value description");
 59        
 60taskFinishAttributeDefinition->get_ValueList()->Add(finishVal);
 61        
 62project->get_ExtendedAttributes()->Add(taskFinishAttributeDefinition);
 63        
 64System::SharedPtr<ExtendedAttributeDefinition> numberAttributeDefinition = ExtendedAttributeDefinition::CreateLookupTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Number20, u"New number attribute");
 65        
 66System::SharedPtr<Value> val1 = System::MakeObject<Value>();
 67val1->set_Id(6);
 68val1->set_Val(u"1");
 69val1->set_Description(u"Number 1 value");
 70System::SharedPtr<Value> val2 = System::MakeObject<Value>();
 71val2->set_Id(7);
 72val2->set_Val(u"2");
 73val2->set_Description(u"Number 2 value");
 74System::SharedPtr<Value> val3 = System::MakeObject<Value>();
 75val2->set_Id(8);
 76val3->set_Val(u"3");
 77val3->set_Description(u"Number 3 value");
 78        
 79numberAttributeDefinition->AddLookupValue(val1);
 80numberAttributeDefinition->AddLookupValue(val2);
 81numberAttributeDefinition->AddLookupValue(val3);
 82        
 83project->get_ExtendedAttributes()->Add(numberAttributeDefinition);
 84        
 85        
 86// C# preprocessor directive: #endregion
 87        
 88        
 89System::SharedPtr<ExtendedAttributeDefinition> rscStartAttributeDefinition = ExtendedAttributeDefinition::CreateLookupResourceDefinition(Aspose::Tasks::ExtendedAttributeResource::Start5, u"New start5 attribute");
 90        
 91System::SharedPtr<Value> startVal2 = System::MakeObject<Value>();
 92startVal2->set_Id(9);
 93startVal2->set_DateTimeValue(System::DateTime::get_Now());
 94startVal2->set_Description(u"this is start5 value descr");
 95        
 96rscStartAttributeDefinition->AddLookupValue(startVal2);
 97        
 98project->get_ExtendedAttributes()->Add(rscStartAttributeDefinition);
 99        
100// Define a duration attribute without lookup.
101System::SharedPtr<ExtendedAttributeDefinition> taskDurationAttributeDefinition = ExtendedAttributeDefinition::CreateTaskDefinition(Aspose::Tasks::ExtendedAttributeTask::Duration1, u"New Duration");
102project->get_ExtendedAttributes()->Add(taskDurationAttributeDefinition);
103        
104// Add new task and assign duration value to the previously defined duration attribute.
105System::SharedPtr<Task> timeTask = project->get_RootTask()->get_Children()->Add(u"New task");
106        
107System::SharedPtr<ExtendedAttribute> durationExtendedAttribute = taskDurationAttributeDefinition->CreateExtendedAttribute();
108        
109durationExtendedAttribute->set_DurationValue(project->GetDuration(3.0, Aspose::Tasks::TimeUnitType::Hour));
110timeTask->get_ExtendedAttributes()->Add(durationExtendedAttribute);
111        
112System::SharedPtr<MPPSaveOptions> mppSaveOptions = System::MakeObject<MPPSaveOptions>();
113mppSaveOptions->set_WriteViewData(true);
114        
115// Save the project as MPP project file
116project->Save(dataDir + u"WriteUpdatedExtendedAttributeDefinitions_out.mpp", mppSaveOptions);
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.