Работа с Extended Attributes проекта

Microsoft Project предоставляет расширяемую XML-схему данных которая обеспечивает беспрепятственный обмен данными между приложениями и предоставляет мощные возможности для настройки информации о проекте. Одна из её наиболее гибких функций — Extended Attributes, которые позволяют пользователям добавлять пользовательские поля к задачам, ресурсам и назначениям. Эти пользовательские поля часто используются для хранения бизнес-специфичных метаданных, таких как коды затрат, категории риска, состояния утверждения или любой другой классификации, необходимой организации. С помощью Aspose.Tasks for .NET, разработчики могут программно create, read, update, and save extended attributes не требуя установки Microsoft Project. Это позволяет автоматизировать рабочие процессы, обогащать данные проекта пользовательской информацией и интегрировать файлы Microsoft Project в более широкие корпоративные системы.

Работа с пользовательскими полями в Microsoft Project

В этом примере мы покажем, как работать с Text1 extended attribute проекта для привязки информации к задаче.

  1. В MSP перейдите в Project → Custom Fields.
  2. Отсюда выберите Task.
  3. Выберите Text в качестве типа Custom Field из комбобокса Type.
  4. Выберите Text1 как пользовательское поле, с которым вы хотите работать.
  5. Используйте кнопку Rename чтобы при необходимости изменить псевдоним поля, затем нажмите OK.
  6. Добавьте новую задачу и вставьте новый столбец в строку задачи с пользовательским полем.

open extended attributes in Microsoft Project

Работа с Custom Fields/Extended Attributes с помощью Aspose.Tasks for .NET

Aspose.Tasks for .NET API предоставляет возможность создавать новые extended attributes, а также работать с Extended attributes, уже присутствующими в документе. Пользовательские поля или Extended Attributes представлены коллекцией ExtendedAttributes проекта в Aspose.Tasks. Она содержит все определения extended attributes документа проекта. Некоторые соответствия определения MSP Custom Field показаны на изображении ниже.

переключение extended attributes в Microsoft Project

Создание нового Extended Attribute и добавление его к задаче

Чтобы добавить новый extended attribute для задачи или ресурса, сначала необходимо определить и добавить определение extended attribute в коллекцию ExtendedAttributes. ExtendedAttributeDefinition класс используется для определения нового ExtendedAttribute в проекте. Для корректного определения Extended attribute необходимо задать FieldId, который связан с ExtendedAttributeTask (в случае задачи) или ExtendedAttributeResource (в случае ресурса). Пример кода ниже показывает, как определить новый 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 поддерживает обновление данных extended attribute в файле Microsoft Project MPP и сохранение его.

Пример кода ниже добавляет новые extended attributes типа Resource и Task типов в исходный файл MPP. Последовательность действий:

  1. Создайте экземпляр Project Reader.
  2. Загрузите исходный MPP файл.
  3. Определите новый extended attribute и обновите его значения.
  4. Сохраните проект с помощью Project Writer.

Следующий пример показывает настройку extended attributes для ресурса.

  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-системы и другие приложения без ручного вмешательства.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.