Работа с представлениями

Чтение данных конкретного представления

Представления обеспечивают графическое представление проекта или его элементов (ресурсы, задачи и т.д.). Например, Gantt Chart наглядно показывает ход выполнения проекта и планы:

Gantt Chart в Microsoft Project

Microsoft Project позволяет пользователям настраивать различные свойства представлений, такие как стили полос, сетка, линии прогресса, информация о шкале времени и параметры страницы. Все эти свойства хранятся в файле MPP. С помощью Aspose.Tasks for .NET вы можете программно получить к ним доступ и изменять их через View class or its derived classes: GanttChartView, TaskUsageView, и ResourceUsageView.

 1Project project = new Project("New Project.mpp"); 
 2
 3GanttChartView view = project.Views.ToList()[0] as GanttChartView;
 4Console.WriteLine("Is Bar Rounding: " + view.BarRounding);
 5Console.WriteLine("Show Bar Splits? : " + view.ShowBarSplits);
 6Console.WriteLine("Show Drawings? : " + view.ShowDrawings);
 7Console.WriteLine("Roll Up Gantt Bars? " + view.RollUpGanttBars);
 8Console.WriteLine("Hide Rollup Bars When Summary Expa0nded: " + view.HideRollupBarsWhenSummaryExpanded);
 9Console.WriteLine("Bar Size: " + view.BarSize.ToString());
10Console.WriteLine("Bar Style: " + view.BarStyles.Count);
11Console.WriteLine("************************ RETREIVING BAR STYLES INFORMATION FROM THE VIEW *********************");
12int i = 0;
13foreach (GanttBarStyle barStyle in view.BarStyles)
14{
15    Console.WriteLine("Name: " + barStyle.Name);
16    Console.WriteLine("ShowFor: " + barStyle.ShowFor.ToString());
17    Console.WriteLine("Row: " + barStyle.Row);
18    Console.WriteLine("From: " + barStyle.From);
19    Console.WriteLine("To: " + barStyle.To);
20    Console.WriteLine("MiddleShape: " + barStyle.MiddleShape);
21    Console.WriteLine("MiddleShapeColor: " + barStyle.MiddleShapeColor);
22    Console.WriteLine("StartShape: " + barStyle.StartShape);
23    Console.WriteLine("EndShape: " + barStyle.EndShape);
24    Console.WriteLine("EndShapeColor: " + barStyle.EndShapeColor);
25    i++;
26}
27
28Console.WriteLine("Grid Lines Count: " + view.Gridlines.Count);
29Gridlines gridlines = view.Gridlines[0];
30Console.WriteLine("************************ RETREIVING GRID LINES PROPERTIES *********************");
31Console.WriteLine("GridLine Type: " + gridlines.Type);
32Console.WriteLine("Gridlines Internval: " + gridlines.Interval);
33Console.WriteLine("Gridlines Color: " + gridlines.NormalColor);
34Console.WriteLine("Gridlines NormalPattern: " + gridlines.NormalPattern);
35Console.WriteLine("Gridlines IntervalPattern: " + gridlines.IntervalPattern);
36Console.WriteLine("Gridlines IntervalColor: " + gridlines.IntervalColor);
37Console.WriteLine("************************ RETREIVING PROGRESS LINES PROPERTIES *********************");
38Console.WriteLine("ProgressLInes.BeginAtDate: ", view.ProgressLines.BeginAtDate);
39Console.WriteLine("ProgressLines.isBaselinePlan: " + view.ProgressLines.IsBaselinePlan);
40Console.WriteLine("ProgressLines.DisplaySelected: " + view.ProgressLines.DisplaySelected);
41Console.WriteLine("ProgressLines.SelectedDates.Count: " + view.ProgressLines.SelectedDates.Count);
42Console.WriteLine("ProgressLines.SelectedDates[0]: " + view.ProgressLines.SelectedDates[0]);
43Console.WriteLine("ProgressLines.SelectedDates[1]: " + view.ProgressLines.SelectedDates[1]);
44Console.WriteLine("ProgressLines.SelectedDates[2]: " + view.ProgressLines.SelectedDates[2]);
45Console.WriteLine("ProgressLines.DisplayAtRecurringIntervals: " + view.ProgressLines.DisplayAtRecurringIntervals);
46Console.WriteLine("ProgressLines.RecurringInterval.Interval: " + Interval.Weekly, view.ProgressLines.RecurringInterval.Interval);
47Console.WriteLine("ProgressLines.RecurringInterval.WeeklyDays.Count" + view.ProgressLines.RecurringInterval.WeeklyDays.Count);
48Console.WriteLine("Recurring Interval.WeeklyDays: " + view.ProgressLines.RecurringInterval.WeeklyDays);
49Console.WriteLine("Recurring Interval.DayType.Saturday: " + view.ProgressLines.RecurringInterval.WeeklyDays);
50Console.WriteLine("Recurring Interval.DayType.Sunday: " + view.ProgressLines.RecurringInterval.WeeklyDays);
51Console.WriteLine("ProgressLines.ShowDate: " + view.ProgressLines.ShowDate);
52Console.WriteLine("ProgressLines.ProgressPointShape: " + view.ProgressLines.ProgressPointShape.ToString());
53Console.WriteLine("ProgressLines.ProgressPointColor: " + view.ProgressLines.ProgressPointColor);
54Console.WriteLine("ProgressLines.LineColor: " + Color.Red, view.ProgressLines.LineColor);
55Console.WriteLine("ProgressLines.LinePattern: " + LinePattern.Solid, view.ProgressLines.LinePattern);
56Console.WriteLine("ProgressLines.OtherProgressPointShape: " + view.ProgressLines.OtherProgressPointShape.ToString());
57Console.WriteLine("ProgressLines.OtherProgressPointColor: " + view.ProgressLines.OtherProgressPointColor.ToString());
58Console.WriteLine("ProgressLines.OtherLineColor: " + view.ProgressLines.OtherLineColor);
59Console.WriteLine("************************ BOTTOM TIMESCALE IFORMATION ******************");
60Console.WriteLine("BottomTimescaleTier.Count:" + view.BottomTimescaleTier.Count);
61Console.WriteLine("BottomTimescaleTier.Unit:" + TimescaleUnit.Days, view.BottomTimescaleTier.Unit.ToString());
62Console.WriteLine("BottomTimescaleTier.UsesFiscalYear: " + view.BottomTimescaleTier.UsesFiscalYear);
63Console.WriteLine("BottomTimescaleTier.Alignment: " + StringAlignment.Center, view.BottomTimescaleTier.Alignment.ToString());
64Console.WriteLine("BottomTimescaleTier.ShowTicks: " + view.BottomTimescaleTier.ShowTicks.ToString());
65Console.WriteLine("BottomTimescaleTier.Label:" + DateLabel.DayDi, view.BottomTimescaleTier.Label);
66Console.WriteLine("************************ MIDDLE TIMESCALE IFORMATION ******************");
67Console.WriteLine("MiddleTimescaleTier.Count:" + view.MiddleTimescaleTier.Count);
68Console.WriteLine("MiddleTimescaleTier.Unit:" + TimescaleUnit.Days, view.MiddleTimescaleTier.Unit.ToString());
69Console.WriteLine("MiddleTimescaleTier.UsesFiscalYear: " + view.MiddleTimescaleTier.UsesFiscalYear);
70Console.WriteLine("MiddleTimescaleTier.Alignment: " + StringAlignment.Center, view.MiddleTimescaleTier.Alignment.ToString());
71Console.WriteLine("MiddleTimescaleTier.ShowTicks: " + view.MiddleTimescaleTier.ShowTicks.ToString());
72Console.WriteLine("MiddleTimescaleTier.Label:" + DateLabel.DayDi, view.MiddleTimescaleTier.Label);
73Console.WriteLine("************************ TOP TIMESCALE IFORMATION ******************");
74Console.WriteLine("TopTimescaleTier.Unit:" + TimescaleUnit.Days, view.TopTimescaleTier.Unit.ToString());
75Console.WriteLine("TopTimescaleTier.UsesFiscalYear: " + view.TopTimescaleTier.UsesFiscalYear);
76Console.WriteLine("TopTimescaleTier.Alignment: " + StringAlignment.Center, view.TopTimescaleTier.Alignment.ToString());
77Console.WriteLine("TopTimescaleTier.ShowTicks: " + view.TopTimescaleTier.ShowTicks.ToString());
78Console.WriteLine("TopTimescaleTier.Label: ", view.TopTimescaleTier.Label.ToString()); 

В этом фрагменте кода напрямую обращаются к представлению Gantt Chart, что позволяет читать и работать с его сохранёнными свойствами, такими как шкала времени, форматирование или правила отображения.

Показ выбранных пользовательских полей в представлении Gantt Chart

К задачам в проекте можно добавить расширенные атрибуты. Иногда требуется автоматически отображать определённые пользовательские поля в представлении Gantt Chart, а не выбирать их вручную. Следующий код показывает, как настроить таблицу проекта для достижения этого.

 1Project project = new Project("New Project.mpp"); 
 2
 3// Create a new project task
 4Task task = project.RootTask.Children.Add("New Activity");
 5
 6// Define new custom attribute
 7ExtendedAttributeDefinition text1Definition = ExtendedAttributeDefinition.CreateTaskDefinition(ExtendedAttributeTask.Text1, null);
 8project.ExtendedAttributes.Add(text1Definition);
 9// Add custom text attribute to created task.
10task.ExtendedAttributes.Add(text1Definition.CreateExtendedAttribute("Activity attribute"));
11
12// Customize table by adding text attribute field
13TableField attrField = new TableField();
14attrField.Field = Field.TaskText1;
15attrField.Width = 20;
16attrField.Title = "Custom attribute";
17attrField.AlignTitle = StringAlignment.Center;
18attrField.AlignData = StringAlignment.Center;
19Table table = project.Tables.ToList()[0];
20table.TableFields.Insert(3, attrField);
21
22project.Save("ConfigureTheGantChartViewShowSelectedColumnFields_out.mpp", new MPPSaveOptions() { WriteViewData = true });

Этот подход обеспечивает появление выбранных пользовательских полей по умолчанию в экспортируемом представлении MPP.

Настройка меток уровней шкалы времени в соответствии с текущими региональными настройками

Aspose.Tasks for .NET позволяет настраивать метки уровней шкалы времени в соответствии с системными CultureInfo. DateTimeConverter делегат предоставляет контроль над тем, как даты отображаются в уровнях шкалы времени.

 1Project project = new Project("New Project.mpp");
 2
 3// Add task links
 4project.TaskLinks.Add(project.RootTask.Children.Add("Task 1"), project.RootTask.Children.Add("Task 2"));
 5
 6GanttChartView view = (GanttChartView)project.DefaultView;
 7
 8// This code is added for better visualization
 9view.MiddleTimescaleTier.Unit = TimescaleUnit.Months;
10project.Set(Prj.TimescaleStart, new DateTime(2012, 8, 6));
11
12// Customize middle tier dates
13view.MiddleTimescaleTier.DateTimeConverter =
14date => new[] { "Янв.", "Фев.", "Мар.", "Апр.", "Май", "Июнь", "Июль", "Авг.", "Сен.", "Окт.", "Ноя.", "Дек." }[date.Month - 1];
15project.Save("CustomizeTimescaleTierLabels_out.pdf", SaveFileFormat.PDF);

Этот фрагмент показывает, как динамически форматировать метки шкалы времени, обеспечивая соблюдение локализованных форматов даты в экспортируемых представлениях проекта.

Настройка параметров шкалы времени для конкретного представления

Класс TimescaleTier позволяет разработчикам задать точные настройки шкалы времени для представления проекта. Пример ниже показывает, как отрегулировать нижний и средний уровни и отобразить проект с этими настройками.

 1	Project project = new Project();
 2	GanttChartView view = (GanttChartView)project.Views.First(v => v.Name == "&Gantt Chart");
 3
 4	// Configure timescale tiers
 5	view.BottomTimescaleTier.Count = 2;
 6	view.BottomTimescaleTier.ShowTicks = false; 
 7	view.BottomTimescaleTier.Unit = TimescaleUnit.Days;
 8	view.BottomTimescaleTier.Label = DateLabel.DayDdd;
 9
10	view.MiddleTimescaleTier.Count = 1;
11	view.MiddleTimescaleTier.Unit = TimescaleUnit.Weeks;
12	view.MiddleTimescaleTier.Label = DateLabel.WeekDddDd;
13
14	// Save with custom timescale settings
15	PdfSaveOptions saveOptions = new PdfSaveOptions();
16	saveOptions.ViewSettings = view;
17	saveOptions.Timescale = Timescale.DefinedInView;
18	project.Save("SetTimeScaleCount_out.pdf", saveOptions);
Это позволяет формировать отчёты проекта с такой степенью детализации времени, которая соответствует требованиям отчётности.

Поддержка форматирования текста

Форматирование текста можно применить к представлениям Gantt Chart с помощью TableTextStyle класса. Следующий код демонстрирует, как задать собственное форматирование текста:

1Project project = new Project("New Project.mpp");
2GanttChartView ganttChartView = project.Views.ToList()[0] as GanttChartView;
3if (ganttChartView != null)
4{
5    ganttChartView.TableTextStyles.Clear();
6    ganttChartView.TableTextStyles.Add(new TableTextStyle(1) { Color = Color.Red, Field = Field.TaskName });
7    ganttChartView.TableTextStyles.Add(new TableTextStyle(1) { Color = Color.Gray, Field = Field.TaskDurationText });
8    ganttChartView.TableTextStyles.Add(new TableTextStyle(2) { Color = Color.Blue, FontStyle = FontStyle.Bold | FontStyle.Italic | FontStyle.Underline });
9}

Эта функция полезна для выделения ключевых полей или улучшения читаемости экспортируемых документов проекта.

Сохранение MPP с использованием конкретного представления проекта

Aspose.Tasks позволяет сохранять файл MPP в графические форматы, используя конкретное представление, определённое в проекте. Эта функция удобна, когда существует несколько представлений, и нужно экспортировать только одно из них.

1	Project project = new Project("TestViews.mpp");
2	var view = project.Views.First(v => v.Name == "Customized Resource &Sheet");
3	view.PageInfo.PageSettings.IsPortrait = false;
4
5	PdfSaveOptions saveOptions = new PdfSaveOptions();
6	saveOptions.ViewSettings = view;
7	project.Save("output.pdf", saveOptions);
Это обеспечивает гибкость при экспорте индивидуальных представлений для разных заинтересованных лиц.

Работа со стилями полос в представлении Gantt Chart

Представление Gantt Chart поддерживает как стили полос, специфичные для задач, так и стили по категориям.
Следующий код показывает, как изменить их для лучшей визуализации.

 1	Project project = new Project("TestGanttChartView.mpp");
 2	var ganttChartView = (GanttChartView)project.Views.First(v => v.Name == "Gantt &Chart");
 3
 4	PdfSaveOptions saveOptions = new PdfSaveOptions();
 5	saveOptions.ViewSettings = ganttChartView;
 6	saveOptions.Timescale = Timescale.DefinedInView;
 7
 8	// Modify custom bar styles
 9	foreach (GanttBarStyle ganttBarStyle in ganttChartView.CustomBarStyles)
10	{
11		if (ganttBarStyle.ShowForTaskUid == 11)
12		{
13			ganttBarStyle.LeftField = Field.TaskName;
14			ganttBarStyle.InsideBarTextConverter = task => "Hours rem.: " + 
15				(int)task.Get(Tsk.RemainingWork).TimeSpan.TotalHours;
16		}
17	}
Настраивая стили полос, вы можете выделять задачи, вехи и индикаторы прогресса в экспортируемых представлениях проекта.

Заключение

Aspose.Tasks for .NET предоставляет широкие возможности для работы с представлениями проекта.

Быстрые ссылки

Часто задаваемые вопросы

В: Нужно ли устанавливать Microsoft Project, чтобы работать с представлениями?

В: Могу ли я настроить, какие поля отображаются в Gantt Chart?

В: Поддерживает ли Aspose.Tasks локализованные метки шкалы времени?

В: Возможно ли экспортировать только одно представление из файла проекта?

В: Можно ли программно настраивать стили полос в Gantt Chart?

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.