Вспомогательные возможности Aspose.Tasks for .NET
При работе с файлами Microsoft Project разработчикам часто требуется не только создание задач и ресурсов. Им необходим доступ к вспомогательным данным проекта таких как фильтры, таблицы, группы, встроенные объекты и даже диагностические инструменты для обработки ошибок. Aspose.Tasks for .NET предоставляет набор вспомогательных функций которые делают рабочие процессы управления проектами более мощными и гибкими. Они включают возможности, такие как вычисление критического пути проекта, обработка исключений при записи задач, получение определений фильтров и групп, извлечение встроенных объектов и многое другое. В совокупности эти функции помогают разработчикам расширять функциональность проекта, повышать точность отчетности и плавно интегрировать файлы Microsoft Project с другими системами.
Расчет критического пути
Критический путь — это задачи (или задача), которые в конечном итоге определяют, когда завершится ваш проект. Отслеживание критического пути и ресурсов, назначенных на эти задачи, помогает своевременно завершать проект. Microsoft Project вычисляет критический путь на основе задач, не имеющих резерва времени, имеющих конкретные временные ограничения (начать в указанную дату, закончить в указанную дату, как можно раньше или как можно позже) либо имеющих дату окончания, совпадающую или более позднюю, чем у проекта. Aspose.Tasks позволяет вычислять критический путь.
Класс Project предоставляет CriticalPath свойство, которое используется для получения коллекции задач, составляющих критический путь проекта. Приведенный ниже фрагмент кода вычисляет и отображает задачи в критическом пути.
1Project project = new Project("New Project.mpp");
2project.CalculationMode = CalculationMode.Automatic;
3
4Task subtask1 = project.RootTask.Children.Add("1");
5Task subtask2 = project.RootTask.Children.Add("2");
6Task subtask3 = project.RootTask.Children.Add("3");
7project.TaskLinks.Add(subtask1, subtask2, TaskLinkType.FinishToStart);
8
9// Display the critical path now
10foreach (Task task in project.CriticalPath)
11{
12 Console.WriteLine(task.Get(Tsk.Name));
13}
Отображение TaskWritingException
Проект состоит из множества задач, и Aspose.Tasks for .NET API позволяет добавлять, удалять и обновлять информацию о задачах. Если при записи задач возникает проблема, используйте TasksWritingException для их перехвата.
Aspose.Tasks for .NET поддерживает вывод сообщения при возникновении исключения при записи задачи. Для этого используется TaskWritingException, аналогично тому, как применяется TaskReadingException.
Сообщение журнала содержится в публичном свойстве TasksWritingException.LogText, как показано в следующем примере кода.
1try
2{
3 Project project = new Project("New Project.mpp");
4 Console.Write("This example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
5 project.Save("output.mpp", SaveFileFormat.MPP);
6}
7catch (TasksWritingException ex)
8{
9 Console.WriteLine(ex.LogText);
10}
11catch (NotSupportedException ex)
12{
13 Console.WriteLine(ex.Message + "\nThis example will only work if you apply a valid Aspose License. You can purchase full license or get 30 day temporary license from http://www.aspose.com/purchase/default.aspx.");
14}
Работа с данными фильтров в файлах MPP
Aspose.Tasks позволяет разработчикам читать информацию о фильтрах, примененных к данным файлов MPP. В этой статье показано, как получить данные об определениях фильтров и критериях фильтров из файла Microsoft Project MPP.
Чтение данных об определениях фильтров
Определения фильтров в Microsoft Project описывают структуру фильтров — например их названия, типы и поля, к которым они применяются. С помощью Aspose.Tasks for .NET вы можете программно получить доступ к этим определениям фильтров и исследовать, как фильтры настроены в файле MPP.
1// Instantiate project and access task filters
2Project project = new Project("ReadFilterDefinitionData.mpp");
3List<Filter> taskFilters = project.TaskFilters.ToList();
4Console.WriteLine("Task Filters Count: " + taskFilters.Count);
5Console.WriteLine("All Tasks: " + taskFilters[0].Name);
6Console.WriteLine("Task Item: " + taskFilters[0].FilterType);
7Console.WriteLine("Task Filters Show In Menu: " + taskFilters[0].ShowInMenu);
8Console.WriteLine("Task filter ShowRelatedSummaryRows: " + taskFilters[0].ShowRelatedSummaryRows);
9
10// Access resource filters
11List<Filter> filters = project.ResourceFilters.ToList();
12Console.WriteLine("Project.ResourceFilters count: " + filters.Count);
13Console.WriteLine("Resource Filter Item Type: Item.ResourceType: " + filters[0].FilterType);
14Console.WriteLine("Resource filter ShowInMenu" + filters[0].ShowInMenu);
15Console.WriteLine("Resource filter ShowRelatedSummaryRows: " + filters[0].ShowRelatedSummaryRows);
Чтение данных критериев фильтра
Если определения описывают структуру фильтра, то критерии фильтра задают точные условия, применяемые к данным проекта (например, задачи с определенными датами или ресурсами). Aspose.Tasks позволяет читать эти критерии из файла MPP, что особенно полезно при воспроизведении или анализе пользовательских представлений, используемых в Microsoft Project.
1Project project = new Project("New Project.mpp");
2
3Filter filter = project.TaskFilters.ToList()[1];
4Console.WriteLine(filter.Criteria.CriteriaRows.Count);
5Console.WriteLine(filter.Criteria.Operation.ToString());
6
7FilterCriteria criteria1 = filter.Criteria.CriteriaRows[0];
8Console.WriteLine(criteria1.Test.ToString());
9Console.WriteLine(criteria1.Field.ToString());
10Console.WriteLine(criteria1.Values[0].ToString());
11
12FilterCriteria criteria2 = filter.Criteria.CriteriaRows[1];
13Console.WriteLine(criteria2.Operation.ToString());
14Console.WriteLine(criteria2.CriteriaRows.Count);
15
16FilterCriteria criteria21 = criteria2.CriteriaRows[0];
17Console.WriteLine(criteria21.Test.ToString());
18Console.WriteLine(criteria21.Field.ToString());
19Console.WriteLine(criteria21.Values[0].ToString());
20
21FilterCriteria criteria22 = criteria2.CriteriaRows[1];
22Console.WriteLine(criteria22.Test.ToString());
23Console.WriteLine(criteria22.Field.ToString());
24Console.WriteLine(criteria22.Values[0].ToString());
25Console.WriteLine(filter.Criteria);
Чтение данных определений групп
Файл данных Microsoft Project может содержать данные, организованные в группы. Aspose.Tasks for .NET предоставляет возможность читать данные определений групп, как показано в примере ниже.
1Project project = new Project("New Project.mpp");
2
3Console.WriteLine("Task Groups Count: " + project.TaskGroups.Count);
4
5Group taskGroup = project.TaskGroups.ToList()[1];
6Console.WriteLine("Group Name:", taskGroup.Name);
7Console.WriteLine("Group Criteria count: " + taskGroup.GroupCriteria.Count);
8Console.WriteLine("************* Retrieving Task Group's Criterion information *************");
9
10GroupCriterion criterion = taskGroup.GroupCriteria.ToList()[0];
11Console.WriteLine("Criterion Field: " + criterion.Field.ToString());
12Console.WriteLine("Criterion GroupOn: " + criterion.GroupOn.ToString());
13Console.WriteLine("Criterion Cell Color: " + criterion.CellColor);
14Console.WriteLine("Criterion Pattern: " + criterion.Pattern.ToString());
15
16if (taskGroup == criterion.ParentGroup)
17{
18 Console.WriteLine("Parent Group is equal to task Group.");
19}
20
21Console.WriteLine("*********** Retrieving Criterion's Font Information ***********");
22Console.WriteLine("Font Name: " + criterion.Font.Name);
23Console.WriteLine("Font Size: " + criterion.Font.Size);
24Console.WriteLine("Font Style: " + criterion.Font.Style);
25Console.WriteLine("Ascending/Descending: " + criterion.Ascending);
Чтение данных таблицы из файла MPP
Aspose.Tasks for .NET API поддерживает чтение данных таблиц из файлов данных Microsoft Project. Project.Tables реализует интерфейс ICollection для обеспечения доступа к данным таблиц в файле MPP. Функция поддерживается для всех версий файлов данных Microsoft Project, включая MPP 2003, 2007, 2010 и 2013.
Приведенный ниже пример показывает, как получить данные таблицы из файла Microsoft Project MPP. Здесь демонстрируются значения свойств таблицы, такие как ширина, заголовок, выравнивание заголовка и выравнивание данных.
1Project project = new Project("New Project.mpp");
2
3// Access table
4Table task1 = project.Tables.ToList()[0];
5Console.WriteLine("Table Fields Count" + task1.TableFields.Count);
6
7// Display all table fields information
8foreach (TableField tableField in task1.TableFields)
9{
10 Console.WriteLine("Field width: " + tableField.Width);
11 Console.WriteLine("Field Title: " + tableField.Title);
12 Console.WriteLine("Field Title Alignment: " + tableField.AlignTitle.ToString());
13 Console.WriteLine("Field Align Data: " + tableField.AlignData.ToString());
14}
Извлечение встроенных объектов из формы задачи или обзора
Файлы данных Microsoft Project (MPP/XML) могут содержать встроенные объекты, такие как документы, листы Excel, PDF, изображения и т.д. в представлениях задач или ресурсов. Aspose.Tasks for .NET API предоставляет возможность извлечения этих объектов из представления задач или ресурсов проекта, как показано в приведенных ниже темах.
Извлечение встроенных объектов
Встроенные объекты (те, которые были созданы из файла путем выбора пути к файлу) упакованы в OLE Package внутри файла MPP. Для извлечения исходного файла можно использовать свойства Content и FullPath экземпляра класса OleObject.
1Project project = new Project("ExtractEmbeddedObjects.mpp");
2OleObject ole = project.OleObjects.ToList()[0];
3// We have to check this property because it can be null if the embedded object was created inside the ms project application Or, alternatively, you can use this check: if (ole.FileFormat == "Package")
4if (!string.IsNullOrEmpty(ole.FullPath))
5{
6 using (FileStream stream = new FileStream("out.ole", FileMode.Create))
7 {
8 stream.Write(ole.Content, 0, ole.Content.Length);
9 }
10}
Встроенные объекты, созданные внутри приложения Microsoft Project, можно извлечь следующим образом:
1IDictionary<string, string> fileFormatExt = new Dictionary<string, string>();
2fileFormatExt.Add("RTF", "_rtfFile_out.rtf");
3fileFormatExt.Add("MSWordDoc", "_wordFile_out.docx");
4fileFormatExt.Add("ExcelML12", "_excelFile_out.xlsx");
5Project project = new Project("New Project.mpp");
6foreach (OleObject oleObject in project.OleObjects)
7{
8 if (!string.IsNullOrEmpty(oleObject.FileFormat) && fileFormatExt.ContainsKey(oleObject.FileFormat))
9 {
10 using (FileStream stream = new FileStream("EmbeddedContent_" + fileFormatExt[oleObject.FileFormat], FileMode.Create))
11 {
12 stream.Write(oleObject.Content, 0, oleObject.Content.Length);
13 }
14 }
15}
Вспомогательные функции в Aspose.Tasks for .NET предоставляют разработчикам полный набор инструментов для работы с деталями проекта, выходящими за рамки простого управления задачами или ресурсами. От определения критического пути и устранения проблем при операциях с задачами до получения фильтров, групп и таблиц, и даже извлечения встроенного содержимого — эти возможности обеспечивают разработчикам полный контроль над жизненным циклом данных проекта. Интегрируя эти вспомогательные функции в рабочие процессы, команды могут добиться лучшего мониторинга, более чистого обмена данными и более глубокой автоматизации, что в конечном итоге повышает эффективность управления проектом.