Робота з календарями

Створення календаря

Календарі в Microsoft Project визначають робочий та неробочий час, безпосередньо впливаючи на планування завдань та доступність ресурсів. В Aspose.Tasks для .NET календарі можна створювати за допомогою класу Calendar, який надає три перевантаження конструктора:

Наступний зразок коду демонструє, як створювати календарі за допомогою кожного конструктора. Після створення календарі можна переглянути в Microsoft Project, перейшовши до Проект > Інформація про проект.

Інформація про проект, що показує календарі

перевірка доступних календарів у Microsoft Project

1// Create a project instance
2Project project = new Project();
3
4// New calendar can be added to a project's calendar collection using the collection's Add method.
5Calendar cal1 = project.Calendars.Add("New Info");
6Calendar cal2 = project.Calendars.Add("no name");
7Calendar cal3 = project.Calendars.Add("cal3");
8
9project.Save("CreatingCalendar_out.Xml", SaveFileFormat.XML);

Визначення днів тижня для календаря

Колекція Days класу Calendar представляє робочі дні та їх пов’язані часові діапазони. Визначення днів тижня моделюються через класи WeekDay та WorkingTime.

Розробники можуть використовувати CreateDefaultWorkingDay() для ініціалізації стандартних годин для певного дня тижня або встановлювати користувацькі робочі інтервали через властивості FromTime та ToTime.

Зразок нижче визначає понеділок-четвер як стандартні робочі дні, а п’ятницю з користувацькими робочими годинами. Щоб перевірити результат у Microsoft Project, перейдіть до Інструменти > Змінити робочий час.

Визначення днів тижня в Microsoft Project

додавання днів тижня в календарі Microsoft Project

 1// This example shows how Aspose.Tasks API can be used to define a new Calendar, add week days to it and define working times for days
 2// Create a project instance
 3Project project = new Project();
 4
 5// Define Calendar
 6Calendar cal = project.Calendars.Add("Calendar1");
 7
 8// Add working days monday through thursday with default timings
 9cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Monday));
10cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Tuesday));
11cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Wednesday));
12cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Thursday));
13cal.WeekDays.Add(new WeekDay(DayType.Saturday));
14cal.WeekDays.Add(new WeekDay(DayType.Sunday));
15
16// Set friday as short working day
17WeekDay myWeekDay = new WeekDay(DayType.Friday);
18
19// Sets working time. Only time part of DateTime is important
20WorkingTime wt1 = new WorkingTime();
21wt1.FromTime = new DateTime(1, 1, 1, 9, 0, 0, 0);
22wt1.ToTime = new DateTime(1, 1, 1, 12, 0, 0, 0);
23WorkingTime wt2 = new WorkingTime();
24wt2.FromTime = new DateTime(1, 1, 1, 13, 0, 0, 0);
25wt2.ToTime = new DateTime(1, 1, 1, 16, 0, 0, 0);
26myWeekDay.WorkingTimes.Add(wt1);
27myWeekDay.WorkingTimes.Add(wt2);
28myWeekDay.DayWorking = true;
29cal.WeekDays.Add(myWeekDay);
30
31project.Save("Project_DefineCalendarWeekdays_out.xml", SaveFileFormat.XML);

Заміна календаря

Базові календарі служать шаблонами для планування ресурсів та завдань. Aspose.Tasks дозволяє замінювати існуючий календар, звертаючись до CalendarCollection через об’єкт Project.

Підтримувані типи базових календарів включають:

Код нижче демонструє, як видалити існуючий календар та додати новий стандартний календар до колекції.

 1// Create project
 2Project project = new Project("New Project.mpp");
 3
 4// Access project calendars
 5CalendarCollection calColl = project.Calendars;
 6foreach (Calendar myCalendar in calColl)
 7{
 8    if (myCalendar.Name == "TestCalendar")
 9    {
10        // Remove calendar
11        calColl.Remove(myCalendar);
12    }
13}
14
15// Add new calendar
16Calendar newCalendar = calColl.Add("TestCalendar");
17project.Save("ReplaceCalendar_out.mpp", SaveFileFormat.MPP);

Створення стандартного календаря

Стандартний календар визначає стандартні робочі дні та години, які зазвичай використовуються в графіках проектів. Aspose.Tasks надає два статичні методи для полегшення цього:

Щоб перевірити результат у Microsoft Project, використовуйте Інструменти > Змінити робочий час.

Діалог інформації про зміну робочого часу показує стандартний календар, який використовується проектом

редагування робочого часу календаря в Microsoft Project

1// Create a project instance
2Project project = new Project();
3
4// Define Calendar and make it standard
5Calendar cal1 = project.Calendars.Add("My Cal");
6Calendar.MakeStandardCalendar(cal1);
7
8project.Save("Project_MakeStandardCalendar_out.xml", SaveFileFormat.XML);

Запис оновлених даних календаря в MPP

Aspose.Tasks дозволяє оновлювати визначення календарів та зберігати їх назад у файл MPP. Процес включає:

  1. Завантаження існуючого файлу MPP.
  2. Модифікацію колекції календарів (додавання, оновлення).
  3. Збереження оновленого проекту назад на диск.

Наступний приклад демонструє додавання нового календаря та запис його назад у вихідний файл MPP.

 1Project project = new Project("New Project.mpp");
 2Calendar cal = project.Calendars.GetByUid(3);
 3
 4// Update the calendar information
 5Calendar.MakeStandardCalendar(cal);
 6cal.Name = "Test calendar";
 7CalendarException exc = new CalendarException();
 8exc.FromDate = DateTime.Now;
 9exc.ToDate = DateTime.Now.AddDays(2);
10exc.DayWorking = true;
11
12WorkingTime wt1 = new WorkingTime();
13wt1.FromTime = new DateTime(10, 1, 1, 9, 0, 0);
14wt1.ToTime = new DateTime(10, 1, 1, 13, 0, 0);
15
16WorkingTime wt2 = new WorkingTime();
17wt2.FromTime = new DateTime(10, 1, 1, 14, 0, 0);
18wt2.ToTime = new DateTime(10, 1, 1, 19, 0, 0);
19
20WorkingTime wt3 = new WorkingTime();
21wt3.FromTime = new DateTime(10, 1, 1, 20, 0, 0);
22wt3.ToTime = new DateTime(10, 1, 1, 21, 0, 0);
23
24exc.WorkingTimes.Add(wt1);
25exc.WorkingTimes.Add(wt2);
26exc.WorkingTimes.Add(wt3);
27cal.Exceptions.Add(exc);
28
29CalendarException exc2 = new CalendarException();
30exc2.FromDate = DateTime.Now.AddDays(7);
31exc2.ToDate = exc2.FromDate;
32exc2.DayWorking = false;
33cal.Exceptions.Add(exc2);
34
35project.Set(Prj.Calendar, cal);
36
37project.Save("WriteUpdatedCalendarDataToMPP_out.mpp", SaveFileFormat.MPP);
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.