Arbeiten mit erweiterten Aufgabenattributen
Erweiterte Aufgabenattribute in Microsoft Project ermöglichen es Ihnen, benutzerdefinierte Felder zu definieren und zusätzliche Informationen zu Aufgaben zu erfassen. Aspose.Tasks for .NET unterstützt vollständig das Erstellen, Lesen und Verwalten erweiterter Attribute für Aufgaben in beiden MPP und XML Formaten für alle Versionen von Microsoft Project (2003–2019).
Was sind erweiterte Aufgabenattribute?
In Microsoft Project ist ein Extended Attribute ein benutzerdefiniertes Feld (wie z. B. Text1, Cost2, oder Flag5), das Sie verwenden können, um geschäftsspezifische Informationen zu speichern, die nicht durch Standardfelder abgedeckt werden. Diese Attribute sind äußerst nützlich für:
- Das Verfolgen zusätzlicher Metadaten zu Aufgaben (z. B. Aufgabenkategorie, Risikostufe, Budgetcode).
- Das Hinzufügen projektspezifischer Informationen, die für die Berichterstattung erforderlich sind.
- Die Durchsetzung unternehmensweiter Projektmanagement-Standards.
Aspose.Tasks stellt diese Funktionalität über zwei Hauptklassen bereit:
- ExtendedAttributeDefinition – definiert das benutzerdefinierte Feld (Name, Typ, Berechnungsregeln, Nachschlagewerte).
- ExtendedAttribute – speichert den tatsächlichen Wert dieses benutzerdefinierten Feldes für eine bestimmte Aufgabe.
Erweiterte Attribute zu einer Aufgabe hinzufügen
Um einem Aufgaben programmgesteuert ein erweitertes Attribut hinzuzufügen:
- Erstellen Sie eine
ExtendedAttributeDefinition
die den Typ des benutzerdefinierten Feldes definiert. - Erstellen Sie ein
ExtendedAttribute
Objekt basierend auf dieser Definition. - Weisen Sie das Attribut der gewünschten Aufgabe zu.
Beispiel: Hinzufügen erweiterter Attribute
1// Create new project
2Project project = new Project("New Project.mpp");
3
4// Create an Extended Attribute Definition of Text1 type
5var taskExtendedAttributeText1Definition = ExtendedAttributeDefinition.CreateTaskDefinition(CustomFieldType.Text, ExtendedAttributeTask.Text1, "Task City Name");
6
7// Add it to the project's Extended Attributes collection
8project.ExtendedAttributes.Add(taskExtendedAttributeText1Definition);
9
10// Add a task to the project
11Task task = project.RootTask.Children.Add("Task 1");
12
13// Create an Extended Attribute from the Attribute Definition
14var taskExtendedAttributeText1 = taskExtendedAttributeText1Definition.CreateExtendedAttribute();
15
16// Assign a value to the generated Extended Attribute. The type of the attribute is "Text", the "TextValue" property should be used.
17taskExtendedAttributeText1.TextValue = "London";
18
19// Add the Extended Attribute to task
20task.ExtendedAttributes.Add(taskExtendedAttributeText1);
21
22project.Save("PlainTextExtendedAttribute_out.mpp", SaveFileFormat.MPP);
23
24Project project = new Project("New Project.mpp");
25
26// Create an Extended Attribute Definition of Text2 type
27var taskExtendedAttributeText2Definition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(CustomFieldType.Text, ExtendedAttributeTask.Text2, "Task Towns Name");
28
29// Add lookup values for the extended attribute definition
30taskExtendedAttributeText2Definition.AddLookupValue(new Value { Id = 1, StringValue = "Town1", Description = "This is Town1" });
31taskExtendedAttributeText2Definition.AddLookupValue(new Value { Id = 2, StringValue = "Town2", Description = "This is Town2" });
32
33// Add it to the project's Extended Attributes collection
34project.ExtendedAttributes.Add(taskExtendedAttributeText2Definition);
35
36// Add a task to the project
37var task2 = project.RootTask.Children.Add("Task 2");
38
39// Crate an Extended Attribute from the Text2 Lookup Definition for Id 1
40var taskExtendedAttributeText2 = taskExtendedAttributeText2Definition.CreateExtendedAttribute(taskExtendedAttributeText2Definition.ValueList[1]);
41
42// Add the Extended Attribute to task
43task2.ExtendedAttributes.Add(taskExtendedAttributeText2);
44
45project.Save("TextExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
46
47Project project2 = new Project("New Project.mpp");
48
49// Create an Extended Attribute Definition of Duration2 type
50var taskExtendedAttributeDuration2Definition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(CustomFieldType.Duration, ExtendedAttributeTask.Duration2, "Some duration");
51
52// Add lookup values for extended attribute definition
53taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 2, Duration = project2.GetDuration(4, TimeUnitType.Hour), Description = "4 hours" });
54taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 3, Duration = project2.GetDuration(1, TimeUnitType.Day), Description = "1 day" });
55taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 4, Duration = project2.GetDuration(1, TimeUnitType.Hour), Description = "1 hour" });
56taskExtendedAttributeDuration2Definition.AddLookupValue(new Value { Id = 7, Duration = project2.GetDuration(10, TimeUnitType.Day), Description = "10 days" });
57
58// Add the definition to the project's Extended Attributes collection
59project2.ExtendedAttributes.Add(taskExtendedAttributeDuration2Definition);
60
61// Add a task to the project
62var task3 = project2.RootTask.Children.Add("Task 3");
63
64// Create an Extended Attribute from the Duration2 Lookup Definition for Id 3
65var taskExtendedAttributeDuration2 = taskExtendedAttributeDuration2Definition.CreateExtendedAttribute(taskExtendedAttributeDuration2Definition.ValueList[3]);
66
67// Add the Extended Attribute to task
68task3.ExtendedAttributes.Add(taskExtendedAttributeDuration2);
69
70project2.Save("DurationExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
71
72Project project3 = new Project("New Project.mpp");
73
74// Create an Extended Attribute Definition of Finish2 Type
75var taskExtendedAttributeFinish2Definition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(CustomFieldType.Finish, ExtendedAttributeTask.Finish2, "Some finish");
76
77// Add lookup values for extended attribute defintion
78taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 2, DateTimeValue = new DateTime(1984, 01, 01, 00, 00, 01), Description = "This is Value2" });
79taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 3, DateTimeValue = new DateTime(1994, 01, 01, 00, 01, 01), Description = "This is Value3" });
80taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 4, DateTimeValue = new DateTime(2009, 12, 31, 00, 00, 00), Description = "This is Value4" });
81taskExtendedAttributeFinish2Definition.AddLookupValue(new Value { Id = 7, DateTimeValue = DateTime.Now, Description = "This is Value6" });
82
83// Add the definition to the project's Extended Attributes collection
84project3.ExtendedAttributes.Add(taskExtendedAttributeFinish2Definition);
85
86// Add a task to the project
87var task4 = project3.RootTask.Children.Add("Task 4");
88
89// Create an Extended Attribute from the Finish2 Lookup Definition for Id 3
90var taskExtendedAttributeFinish2 = taskExtendedAttributeFinish2Definition.CreateExtendedAttribute(taskExtendedAttributeFinish2Definition.ValueList[3]);
91
92// Add the Extended Attribute to task
93task4.ExtendedAttributes.Add(taskExtendedAttributeFinish2);
94
95project3.Save("FinishExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
Erläuterung:
- Zuerst definieren wir ein Text benutzerdefiniertes Feld (z. B. Text1).
- Dann erstellen wir eine Instanz von
ExtendedAttribute
mit einem bestimmten Wert. - Schließlich hängen wir es an die Aufgabe an, wodurch die Speicherung benutzerdefinierter Informationen ermöglicht wird.
Lesen erweiterter Aufgabenattribute
Sobald erweiterte Attribute zugewiesen sind, können Sie sie mithilfe der ExtendedAttributes Sammlung der Task
Klasse lesen. Diese Eigenschaft liefert eine Liste von ExtendedAttribute
Objekten, die jeweils Details zu den benutzerdefinierten Feldern der Aufgabe enthalten.
Beispiel: Lesen erweiterter Attribute
1Project project = new Project("New Project.mpp");
2
3// Read extended attributes for tasks
4foreach (Task task in project.RootTask.Children)
5{
6 foreach (ExtendedAttribute ea in task.ExtendedAttributes)
7 {
8 Console.WriteLine(ea.FieldId);
9 Console.WriteLine(ea.ValueGuid);
10
11 switch (ea.AttributeDefinition.CfType)
12 {
13 case CustomFieldType.Date:
14 case CustomFieldType.Start:
15 case CustomFieldType.Finish:
16 Console.WriteLine(ea.DateValue);
17 break;
18
19 case CustomFieldType.Text:
20 Console.WriteLine(ea.TextValue);
21 break;
22
23 case CustomFieldType.Duration:
24 Console.WriteLine(ea.DurationValue.ToString());
25 break;
26
27 case CustomFieldType.Cost:
28 case CustomFieldType.Number:
29 Console.WriteLine(ea.NumericValue);
30 break;
31
32 case CustomFieldType.Flag:
33 Console.WriteLine(ea.FlagValue);
34 break;
35 }
36 }
37}
Erläuterung:
- Jede Aufgabe kann mehrere erweiterte Attribute enthalten.
- Sie können sie durchlaufen, um benutzerdefinierte Daten zu extrahieren (z. B. Textbeschriftungen, numerische Werte, Kennzeichen).
- Dies ermöglicht die Integration in Berichte, Dashboards oder die Geschäftslogik.
Wichtige Hinweise
- Erweiterte Attribute bieten Flexibilität bei der Anpassung von Projektdaten.
- Sie können definieren, zuweisen und lesen erweiterte Attribute programmgesteuert.
- Die
ExtendedAttributeDefinition
Klasse wird verwendet, um das Schema eines benutzerdefinierten Feldes zu definieren. - Die
ExtendedAttribute
Klasse speichert die tatsächlichen Werte pro Aufgabe. - Unterstützt für alle wichtigen MS Project-Versionen (MPP 2003–2019) und XML-Format.
Häufig gestellte Fragen
F: Kann ich für ein erweitertes Attribut eine Nachschlagetabelle erstellen?
- Ja. Die
ExtendedAttributeDefinition
Klasse unterstützt Nachschlagewerte, genau wie in Microsoft Project.
F: Welche Arten von erweiterten Attributen werden unterstützt?
- Text, Number, Cost, Flag, Date, Duration und Start/Finish-Felder.
F: Kann ich erweiterte Attribute nach der Erstellung einer Aufgabe ändern?
- Absolut. Sie können erweiterte Attribute jederzeit aktualisieren oder entfernen.
F: Werden erweiterte Attribute in MPP-/XML-Dateien gespeichert?
- Ja. Aspose.Tasks bewahrt erweiterte Attribute beim Speichern geänderter Projektdateien.
F: Ist diese Funktion sowohl im .NET Framework als auch in .NET Core verfügbar?
- Ja. Aspose.Tasks for .NET unterstützt beide Plattformen.