Робота з календарями
Створення календаря
Календарі в Microsoft Project визначають робочий та неробочий час, безпосередньо впливаючи на планування завдань та доступність ресурсів. В Aspose.Tasks для .NET календарі можна створювати за допомогою класу
Calendar
, який надає три перевантаження конструктора:
Calendar()
– Ініціалізує календар за замовчуванням.Calendar(int id)
– Ініціалізує календар з певним ID.Calendar(string name)
– Ініціалізує календар із зазначеною назвою.
Наступний зразок коду демонструє, як створювати календарі за допомогою кожного конструктора. Після створення календарі можна переглянути в 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
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
.
Підтримувані типи базових календарів включають:
- Стандартний: понеділок–п’ятниця, 08:00–17:00.
- 24 години: використовується для безперервних робочих графіків.
- Нічна зміна: з понеділка ввечері до суботи вранці, 23:00–08:00.
Код нижче демонструє, як видалити існуючий календар та додати новий стандартний календар до колекції.
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 надає два статичні методи для полегшення цього:
MakeStandardCalendar()
– Створює новий календар зі стандартною конфігурацією.MakeStandardCalendar(Calendar cal)
– Перетворює існуючий календар на стандартний.
Щоб перевірити результат у 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. Процес включає:
- Завантаження існуючого файлу MPP.
- Модифікацію колекції календарів (додавання, оновлення).
- Збереження оновленого проекту назад на диск.
Наступний приклад демонструє додавання нового календаря та запис його назад у вихідний файл 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);