Робота з Extended Attributes проекту
Microsoft Project надає розширювану XML-схему даних яка забезпечує плавний обмін даними між додатками та пропонує потужні можливості для налаштування інформації про проект. Однією з найбільш гнучких її функцій є Extended Attributes, які дозволяють користувачам додавати користувацькі поля до завдань, ресурсів та призначень. Ці користувацькі поля часто використовуються для збереження бізнес-специфічних метаданих, таких як коди витрат, категорії ризиків, стани затвердження або будь-яка інша класифікація, необхідна організації. Разом з Aspose.Tasks for .NET, розробники можуть програмно створювати, читати, оновлювати та зберігати Extended Attributes без необхідності встановлення Microsoft Project. Це дає змогу автоматизувати робочі процеси, збагачувати дані про проект користувацькою інформацією та інтегрувати файли Microsoft Project у ширші корпоративні системи.
Робота з користувацькими полями у Microsoft Project
У цьому прикладі ми покажемо, як працювати з Text1 extended attribute проекту для прив’язування інформації до завдання.
- У MSP, перейдіть до Project → Custom Fields.
- Звідси виберіть Task.
- Виберіть Text як Custom Field Type у Type Combo Box.
- Виберіть Text1 як користувацьке поле, з яким потрібно працювати.
- Використайте кнопку Rename для зміни псевдоніма поля за потреби, потім натисніть OK.
- Додайте нове завдання й вставте стовпець у рядок завдання з цим користувацьким полем.
Робота з Custom Fields/Extended Attributes за допомогою Aspose.Tasks for .NET
Aspose.Tasks for .NET API надає можливість створювати нові Extended attributes, а також працювати з Extended attributes, які вже присутні в документі. Користувацькі поля або Extended Attributes представлені колекцією ExtendedAttributes проекту в Aspose.Tasks. Вона містить усі визначення розширених атрибутів документа проекту. Деякі зі співвідношень визначення MSP Custom Field наведені на зображенні нижче.
Створення нового розширеного атрибуту та додавання його до завдання
Щоб додати новий розширений атрибут для завдання або ресурсу, спочатку потрібно визначити та додати визначення розширеного атрибуту до колекції ExtendedAttributes. ExtendedAttributeDefinition клас використовується для визначення нового ExtendedAttribute у проекті. Для правильного визначення Extended attribute слід встановити FieldId, ExtendedAttributeTask (у випадку Task) або ExtendedAttributeResource (у випадку Resource). Наведений приклад коду показує, як визначити новий Extended Attribute для поля Text1 у проекті. Після завершення визначення Extended Attribute ви можете створити новий Extended Attribute на його основі та присвоїти його завданню.
1Project project = new Project("New Project.mpp");
2
3ExtendedAttributeDefinition myTextAttributeDefinition = project.ExtendedAttributes.GetById((int)ExtendedAttributeTask.Text1);
4
5// If the Custom field doesn't exist in Project, create it
6if (myTextAttributeDefinition == null)
7{
8 myTextAttributeDefinition = ExtendedAttributeDefinition.CreateTaskDefinition(ExtendedAttributeTask.Text1, "My text field");
9 project.ExtendedAttributes.Add(myTextAttributeDefinition);
10}
11
12// Generate Extended Attribute from definition
13ExtendedAttribute text1TaskAttribute = myTextAttributeDefinition.CreateExtendedAttribute();
14
15text1TaskAttribute.TextValue = "Text attribute value";
16
17// Add extended attribute to task
18Task task = project.RootTask.Children.Add("Task 1");
19task.ExtendedAttributes.Add(text1TaskAttribute);
20
21project.Save("CreateExtendedAttributes_out.mpp", SaveFileFormat.MPP);
Запис оновлених визначень і значень Extended Attribute у MPP
Aspose.Tasks for .NET підтримує оновлення даних розширених атрибутів у файлі Microsoft Project MPP та їх збереження.
Приклад коду нижче додає нові розширені атрибути типу Resource та Task до вихідного файлу MPP. Кроки, що виконуються під час цієї операції, такі:
- Створіть екземпляр Project Reader.
- Завантажте вихідний MPP файл.
- Визначте новий розширений атрибут і оновіть його значення.
- Збережіть проект за допомогою Project Writer.
Наступний приклад показує встановлення розширених атрибутів ресурсу.
1Project project = new Project("New Project.mpp");
2
3// Add new text3 extended attribute with lookup and one lookup value
4ExtendedAttributeDefinition taskTextAttributeDefinition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(ExtendedAttributeTask.Text3, "New text3 attribute");
5taskTextAttributeDefinition.ElementType = ElementType.Task;
6project.ExtendedAttributes.Add(taskTextAttributeDefinition);
7
8Value textVal = new Value();
9textVal.Id = 1;
10textVal.Description = "Text value descr";
11textVal.Val = "Text value1";
12
13taskTextAttributeDefinition.AddLookupValue(textVal);
14
15// Add new cost1 extended attribute with lookup and two cost values
16ExtendedAttributeDefinition taskCostAttributeDefinition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(ExtendedAttributeTask.Cost1, "New cost1 attribute");
17project.ExtendedAttributes.Add(taskCostAttributeDefinition);
18
19Value costVal1 = new Value();
20costVal1.Id = 2;
21costVal1.Description = "Cost value 1 descr";
22costVal1.Val = "99900";
23
24Value costVal2 = new Value();
25costVal2.Id = 3;
26costVal2.Description = "Cost value 2 descr";
27costVal2.Val = "11100";
28
29taskCostAttributeDefinition.AddLookupValue(costVal1);
30taskCostAttributeDefinition.AddLookupValue(costVal2);
31
32// Add new task and assign attribute lookup value.
33Task task = project.RootTask.Children.Add("New task");
34
35ExtendedAttribute taskAttr = taskCostAttributeDefinition.CreateExtendedAttribute(costVal1);
36task.ExtendedAttributes.Add(taskAttr);
37
38ExtendedAttributeDefinition taskStartAttributeDefinition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(ExtendedAttributeTask.Start7, "New start 7 attribute");
39
40Value startVal = new Value();
41startVal.Id = 4;
42startVal.DateTimeValue = DateTime.Now;
43startVal.Description = "Start 7 value description";
44
45taskStartAttributeDefinition.AddLookupValue(startVal);
46
47project.ExtendedAttributes.Add(taskStartAttributeDefinition);
48
49ExtendedAttributeDefinition taskFinishAttributeDefinition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(ExtendedAttributeTask.Finish4, "New finish 4 attribute");
50
51Value finishVal = new Value();
52finishVal.Id = 5;
53finishVal.DateTimeValue = DateTime.Now;
54finishVal.Description = "Finish 4 value description";
55
56taskFinishAttributeDefinition.ValueList.Add(finishVal);
57
58project.ExtendedAttributes.Add(taskFinishAttributeDefinition);
59
60ExtendedAttributeDefinition numberAttributeDefinition = ExtendedAttributeDefinition.CreateLookupTaskDefinition(ExtendedAttributeTask.Number20, "New number attribute");
61
62Value val1 = new Value();
63val1.Id = 6;
64val1.Val = "1";
65val1.Description = "Number 1 value";
66Value val2 = new Value();
67val2.Id = 7;
68val2.Val = "2";
69val2.Description = "Number 2 value";
70Value val3 = new Value();
71val2.Id = 8;
72val3.Val = "3";
73val3.Description = "Number 3 value";
74
75numberAttributeDefinition.AddLookupValue(val1);
76numberAttributeDefinition.AddLookupValue(val2);
77numberAttributeDefinition.AddLookupValue(val3);
78
79project.ExtendedAttributes.Add(numberAttributeDefinition);
80
81ExtendedAttributeDefinition resourceStartAttributeDefinition = ExtendedAttributeDefinition.CreateLookupResourceDefinition(ExtendedAttributeResource.Start5, "New start5 attribute");
82
83Value startVal2 = new Value();
84startVal2.Id = 9;
85startVal2.DateTimeValue = DateTime.Now;
86startVal2.Description = "this is start5 value descr";
87
88resourceStartAttributeDefinition.AddLookupValue(startVal2);
89
90project.ExtendedAttributes.Add(resourceStartAttributeDefinition);
91
92// Define a duration attribute without lookup.
93ExtendedAttributeDefinition taskDurationAttributeDefinition = ExtendedAttributeDefinition.CreateTaskDefinition(ExtendedAttributeTask.Duration1, "New Duration");
94project.ExtendedAttributes.Add(taskDurationAttributeDefinition);
95
96// Add new task and assign duration value to the previously defined duration attribute.
97Task timeTask = project.RootTask.Children.Add("New task");
98
99ExtendedAttribute durationExtendedAttribute = taskDurationAttributeDefinition.CreateExtendedAttribute();
100
101durationExtendedAttribute.DurationValue = project.GetDuration(3.0, TimeUnitType.Hour);
102timeTask.ExtendedAttributes.Add(durationExtendedAttribute);
103
104MPPSaveOptions mppSaveOptions = new MPPSaveOptions();
105mppSaveOptions.WriteViewData = true;
106
107project.Save("WriteUpdatedExtendedAttributeDefinitions_out.mpp", mppSaveOptions);
Extended Attributes є критично важливою можливістю для організацій, які потребують користувацьких метаданих проекту за межами вбудованих полів Microsoft Project. Вони забезпечують гнучкість для адаптації файлів проекту до конкретних бізнес-потреб — від відстеження фінансових ідентифікаторів до фіксації затверджень у робочих процесах. Використовуючи Aspose.Tasks for .NET, розробники можуть повністю автоматизувати створення та управління Extended Attributes, забезпечуючи послідовну, надійну та відповідну стандартам обробку даних у межах корпоративних систем. Ця можливість допомагає командам інтегрувати дані Microsoft Project у конвеєри звітності, ERP-системи та інші застосунки без ручного втручання.