Travailler avec des attributs de tâche étendus
Dans Microsoft Project, un attribut de tâche étendu est un élément utilisé pour capturer des données pour un champ de tâche personnalisé. Aspose.Tasks peut récupérer des informations d’attribut étendues pour toutes les versions du projet Microsoft: 2003, 2007, 2010 et 2013.
Ajouter des informations d’attribut étendues pour une tâche
La création d’un attribut étendu nécessite les étapes suivantes:
- Créer des prolongations d’extension
- Créer un Attribut extending à partir de la définition à l’étape précédente
- Ajoutez le prolongation étendue créée à la tâche
1// The path to the documents directory.
2String dataDir = Utils.getDataDir(AddTaskExtendedAttributes.class);
3
4// Create new project
5Project project = new Project(dataDir + "project.mpp");
6
7//1. Adding Plain Text Attribute
8
9//Create an Extended Attribute Definition of Text1 type
10ExtendedAttributeDefinition taskExtendedAttributeText1Definition = ExtendedAttributeDefinition.createTaskDefinition(CustomFieldType.Text, ExtendedAttributeTask.Text1, "Task City Name");
11
12//Add it to the project's Extended Attributes collection
13project.getExtendedAttributes().add(taskExtendedAttributeText1Definition);
14
15//Add a task to the project
16Task task = project.getRootTask().getChildren().add("Task 1");
17
18//Create an Extended Attribute from the Attribute Definition
19ExtendedAttribute taskExtendedAttributeText1 = taskExtendedAttributeText1Definition.createExtendedAttribute();
20
21//Assign a value to the generated Extended Attribute
22taskExtendedAttributeText1.setTextValue("London");
23
24//Add the Extended Attribute to task
25task.getExtendedAttributes().add(taskExtendedAttributeText1);
26
27project.save(dataDir + "PlainTextExtendedAttribute_out.mpp", SaveFileFormat.MPP);
28
29//2. Adding Text Attribute with Lookup option
30Project project1 = new Project(dataDir + "project.mpp");
31
32//Create an Extended Attribute Definition of Text2 type
33ExtendedAttributeDefinition taskExtendedAttributeText2Definition = ExtendedAttributeDefinition.createLookupTaskDefinition(CustomFieldType.Text, ExtendedAttributeTask.Text2, "Task Towns Name");
34
35//Add lookup values for the extended attribute definition
36Value val = new Value();
37val.setId(1);
38val.setStringValue("Town1");
39val.setDescription("This is Town1");
40taskExtendedAttributeText2Definition.addLookupValue(val);
41
42val = new Value();
43val.setId(2);
44val.setStringValue("Town2");
45val.setDescription("This is Town2");
46taskExtendedAttributeText2Definition.addLookupValue(val);
47
48//Add it to the porject's Extended Attributes collection
49project1.getExtendedAttributes().add(taskExtendedAttributeText2Definition);
50
51//Add a task to the project
52Task task2 = project1.getRootTask().getChildren().add("Task 2");
53
54//Crate an Extended Attribute from the Text2 Lookup Definition for Id 1
55ExtendedAttribute taskExtendedAttributeText2 = taskExtendedAttributeText2Definition.createExtendedAttribute(taskExtendedAttributeText2Definition.getValueList().get(1));
56
57//Add the Extended Attribute to task
58task2.getExtendedAttributes().add(taskExtendedAttributeText2);
59
60project1.save(dataDir + "TextExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
61
62//3. Adding Duration Attribute with Lookup option
63
64Project project2 = new Project(dataDir + "project.mpp");
65
66//Create an Extended Attribute Definition of Duration2 type
67ExtendedAttributeDefinition taskExtendedAttributeDuration2Definition = ExtendedAttributeDefinition.createLookupTaskDefinition(CustomFieldType.Duration, ExtendedAttributeTask.Duration2, "Some duration");
68
69//Add lookup values for extended attribute definition
70val = new Value();
71val.setId(2);
72val.setDuration(project2.getDuration(4, TimeUnitType.Hour));
73val.setDescription("4 hours");
74taskExtendedAttributeDuration2Definition.addLookupValue(val);
75
76
77val = new Value();
78val.setId(3);
79val.setDuration(project2.getDuration(8, TimeUnitType.Day));
80val.setDescription("1 day");
81taskExtendedAttributeDuration2Definition.addLookupValue(val);
82
83val = new Value();
84val.setId(4);
85val.setDuration(project2.getDuration(1, TimeUnitType.Hour));
86val.setDescription("1 hour");
87taskExtendedAttributeDuration2Definition.addLookupValue(val);
88
89val = new Value();
90val.setId(7);
91val.setDuration(project2.getDuration(10, TimeUnitType.Day));
92val.setDescription("10 days");
93taskExtendedAttributeDuration2Definition.addLookupValue(val);
94
95//Add the definition to the project's Extended Attributes collection
96project2.getExtendedAttributes().add(taskExtendedAttributeDuration2Definition);
97
98//Add a task to the project
99Task task3 = project2.getRootTask().getChildren().add("Task 3");
100
101//Create an Extended Attribute from the Duration2 Lookup Definition for Id 3
102ExtendedAttribute taskExtendedAttributeDuration2 = taskExtendedAttributeDuration2Definition.createExtendedAttribute(taskExtendedAttributeDuration2Definition.getValueList().get(3));
103
104//Add the Extended Attribute to task
105task3.getExtendedAttributes().add(taskExtendedAttributeDuration2);
106
107project2.save(dataDir + "DurationExtendedAttributeWithLookup_out.mpp", SaveFileFormat.MPP);
Reading Extended Task Attributes
The ExtendedAttribute property exposed by the Task class is used to manage a task’s extended attributes. This property reads and writes an ArrayList of ExtendedAttribute objects to deal with a task’s extended attributes. The ExtendedAttribute object further exposes the relevant properties.
The following example shows how to view a task’s extended attributes with Aspose.Tasks.
1// The path to the documents directory.
2String dataDir = Utils.getDataDir(ExtendedTaskAttributes.class);
3
4Project project = new Project(dataDir + "Input.mpp");
5
6for (Task tsk:project.getRootTask().getChildren())
7{
8 for (ExtendedAttribute ea:tsk.getExtendedAttributes())
9 {
10 System.out.println(ea.getFieldId());
11 System.out.println(ea.getValueGuid());
12
13 switch (ea.getAttributeDefinition().getCfType())
14 {
15 case CustomFieldType.Date:
16 case CustomFieldType.Start:
17 case CustomFieldType.Finish:
18 System.out.println(ea.getDateValue());
19 break;
20
21 case CustomFieldType.Text:
22 System.out.println(ea.getTextValue());
23 break;
24
25 case CustomFieldType.Duration:
26 System.out.println(ea.getDurationValue().toString());
27 break;
28
29 case CustomFieldType.Cost:
30 case CustomFieldType.Number:
31 System.out.println(ea.getNumericValue());
32 break;
33
34 case CustomFieldType.Flag:
35 System.out.println(ea.getFlagValue());
36 break;
37 }
38 }
39}