Attributs prolongés d'un projet
Microsoft Project dispose d’un vaste schéma d’interchange de données XML qui facilite l’échange d’informations entre les applications et la programmation avec des fichiers de projet. Le schéma vous permet d’ajouter des attributs étendus aux tâches, aux ressources et aux affectations. Cet article montre comment travailler avec des attributs étendus en utilisant Aspose.Tasks.
Travailler avec des champs personnalisés à l’aide du projet Microsoft
Dans cet exemple, nous montrerons comment travailler avec Text1 Extended Attribut d’un projet pour associer les informations à une tâche.
- Dans MSP, accédez à Project-> Fields personnalisés.
- De là, sélectionnez la tâche.
- Sélectionnez le texte en tant que type de champ personnalisé dans la boîte combinée de type.
- Sélectionnez Text1 comme champ personnalisé avec lequel vous souhaitez travailler
- Utilisez le bouton “Renommer” pour renommer l’alias du champ si elle est souhaitée et appuyez sur le bouton OK
- Ajoutez une nouvelle tâche et insérez une nouvelle colonne à la ligne de tâche avec le champ personnalisé que vous avez utilisé dans l’étape ci-dessus
Travailler avec des champs personnalisés / attributs étendus en utilisant Aspose.Tasks pour l’API C ++
Aspose.Tasks pour l’API C ++ offre la capacité de créer de nouveaux attributs étendus ainsi que de travailler avec des attributs étendus déjà présents dans un document. Les champs personnalisés ou les attributs étendus sont représentés par la collection ExtendAttributes d’un projet dans Aspose.Tasks. Il contient toute la définition des attributs étendus d’un document de projet. Certains des mappages de la définition du champ personnalisé MSP sont comme indiqué dans l’image ci-dessous.
Création d’un nouvel attribut étendu et l’ajout à la tâche
Pour ajouter un nouvel attribut étendu pour la tâche ou la ressource, nous devons d’abord définir et ajouter la définition d’attribut étendu à la collection ExtendAttributes. La classe EXTENDATTRIBLIBEDEFINITION est utilisée pour définir un nouveau protedAttribute dans un projet. Le FieldID doit être défini pour la définition appropriée d’un attribut étendu qui est lié à ExtendedAttributeTask (en cas de tâche) ou ExtendedAttributeResource (en cas de ressource). L’exemple de code suivant montre comment définir un nouvel attribut étendu pour le champ de projet text1. Une fois la définition d’attribut étendue terminée, vous pouvez désormais créer un nouvel attribut étendu et l’attribuer à une tâche.
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);