Utilisation des attributs de tâche étendus
Attributs de tâche étendus dans Microsoft Project vous permettent de définir des champs personnalisés et de capturer des informations supplémentaires sur les tâches. Aspose.Tasks for .NET prend en charge la création, la lecture et la gestion des attributs étendus des tâches dans les deux MPP et XML formats pour toutes les versions de Microsoft Project (2003–2019).
Que sont les attributs de tâche étendus ?
Dans Microsoft Project, un Extended Attribute est un champ personnalisé (tel que Text1, Cost2, ou Flag5) que vous pouvez utiliser pour stocker des informations métier spécifiques non couvertes par les champs standard. Ces attributs sont extrêmement utiles pour :
- Suivi de métadonnées supplémentaires sur les tâches (par ex., catégorie de tâche, niveau de risque, code budgétaire).
- Ajout d’informations spécifiques au projet nécessaires pour les rapports.
- Application de normes de gestion de projet à l’échelle de l’entreprise.
Aspose.Tasks expose cette fonctionnalité via deux classes principales :
- ExtendedAttributeDefinition – définit le champ personnalisé (nom, type, règles de calcul, valeurs de recherche).
- ExtendedAttribute – stocke la valeur réelle de ce champ personnalisé pour une tâche spécifique.
Ajouter des informations d’attribut étendu à une tâche
Pour ajouter un attribut étendu à une tâche par programmation :
- Créez un
ExtendedAttributeDefinition
qui définit le type de champ personnalisé. - Créez un
ExtendedAttribute
objet basé sur cette définition. - Assignez l’attribut à la tâche souhaitée.
Exemple : ajout d’attributs étendus
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);
Explication :
- Tout d’abord, nous définissons un Text champ personnalisé (par ex., Text1).
- Ensuite, nous créons une instance de
ExtendedAttribute
avec une valeur spécifique. - Enfin, nous l’attachons à la tâche, permettant de stocker des informations personnalisées.
Lecture des attributs de tâche étendus
Une fois les attributs étendus affectés, vous pouvez les lire en utilisant la ExtendedAttributes collection de la Task
classe. Cette propriété renvoie une liste de ExtendedAttribute
objets, chacun contenant des détails sur les champs personnalisés de la tâche.
Exemple : lecture des attributs étendus
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}
Explication :
- Chaque tâche peut contenir plusieurs attributs étendus.
- Vous pouvez les parcourir pour extraire des données personnalisées (par ex., étiquettes textuelles, valeurs numériques, indicateurs).
- Cela permet l’intégration avec les rapports, les tableaux de bord ou la logique métier.
Points clés
- Les attributs étendus offrent une flexibilité pour personnaliser les données du projet.
- Vous pouvez définir, affecter et lire les attributs étendus par programmation.
- La
ExtendedAttributeDefinition
classe est utilisée pour définir le schéma d’un champ personnalisé. - La
ExtendedAttribute
classe stocke les valeurs réelles par tâche. - Pris en charge pour toutes les principales versions de MS Project (MPP 2003–2019) et format XML.
Foire aux questions
Q : Puis-je créer une table de recherche pour un attribut étendu ?
- Oui. La
ExtendedAttributeDefinition
classe prend en charge les valeurs de recherche, comme dans Microsoft Project.
Q : Quels types d’attributs étendus sont pris en charge ?
- Text, Number, Cost, Flag, Date, Duration, and Start/Finish fields.
Q : Puis-je modifier les attributs étendus après la création de la tâche ?
- Absolument. Vous pouvez mettre à jour ou supprimer les attributs étendus à tout moment.
Q : Les attributs étendus sont-ils enregistrés dans les fichiers MPP/XML ?
- Oui. Aspose.Tasks préserve les attributs étendus lors de l’enregistrement des fichiers de projet modifiés.
Q : Cette fonctionnalité est-elle disponible à la fois dans .NET Framework et .NET Core ?
- Oui. Aspose.Tasks for .NET prend en charge les deux plateformes.