Erweiterte Attribute eines Projekts
Microsoft Project verfügt über ein umfangreiches XML -Daten -Interchange -Schema, das den Austausch von Informationen zwischen Anwendungen und Programmieren mit Projektdateien erleichtert. Mit dem Schema können Sie Aufgaben, Ressourcen und Aufgaben erweiterte Attribute hinzufügen. Dieser Artikel zeigt, wie man mit erweiterten Attributen mit Aspose.Tasks arbeitet.
Arbeiten mit benutzerdefinierten Feldern mit Microsoft Project
In diesem Beispiel werden wir demonstrieren, wie mit Text1 erweitertes Attribut eines Projekts für die Verbindung der Informationen mit einer Aufgabe funktioniert.
- Gehen Sie in MSP zu Projekt-> benutzerdefinierte Felder.
- Wählen Sie hier die Aufgabe aus.
- Wählen Sie Text als benutzerdefiniertes Feldtyp aus dem Kombinationstyp Typ.
- Wählen Sie Text1 als benutzerdefiniertes Feld, mit dem Sie arbeiten möchten
- Verwenden Sie die Schaltfläche “Umbenennen”, um den Alias des Feldes umzubenennen, wenn es gewünscht ist, und drücken Sie die OK -Taste
- Fügen Sie eine neue Aufgabe hinzu und fügen Sie eine neue Spalte in die Task -Zeile mit dem benutzerdefinierten Feld hinzu, das Sie im obigen Schritt verwendet haben
Arbeiten mit benutzerdefinierten Feldern/erweiterten Attributen mit Aspose.Tasks für c ++ api
Aspose.TasksS FÜR C ++ API bietet die Fähigkeit, neue erweiterte Attribute zu erstellen und mit erweiterten Attributen zu arbeiten, die bereits in einem Dokument vorhanden sind. Benutzerdefinierte Felder oder erweiterte Attribute werden durch die Erfassung eines Projekts in Aspose.Tasks dargestellt. Es enthält alle erweiterten Attribute Definition eines Projektdokuments. Einige der Zuordnungen der msp -benutzerdefinierten Felddefinition sind wie im folgenden Bild gezeigt.
Erstellen eines neuen erweiterten Attributs und Hinzufügen zu Aufgabe
Um ein neues erweitertes Attribut für Aufgabe oder Ressource hinzuzufügen, müssen wir zunächst die erweiterte Attributdefinition zur Erfassung von ExtendedAttributes definieren und hinzufügen. Die ExtendedAttributeDeFinition -Klasse wird verwendet, um eine neue ExtendedAttribute in einem Projekt zu definieren. Das FieldID muss für die ordnungsgemäße Definition eines erweiterten Attributs festgelegt werden, das mit ExtendedAttribUTETASK (im Falle von Aufgabe) oder ExtendedAttributeresource (im Fall von Ressource) verknüpft ist. Der folgende Beispielcode zeigt, wie ein neues erweitertes Attribut für Text1 -Projektfeld definiert wird. Sobald die erweiterte Attributdefinition abgeschlossen ist, können Sie nun ein neues erweitertes Attribut daraus erstellen und einer Aufgabe zuweisen.
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:
- Create an instance of Project Reader.
- Read the source MPP file.
- Define a new extended attribute and update its values.
- 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);