Travailler avec les calendriers
Créer un calendrier
Les calendriers dans Microsoft Project définissent les heures ouvrables et non ouvrables, influençant directement la planification des tâches et la disponibilité des ressources. Dans Aspose.Tasks for .NET, les calendriers peuvent être créés à l’aide de la classe
Calendar
, qui fournit trois surcharges de constructeur :
Calendar()
– Initialise un calendrier par défaut.Calendar(int id)
– Initialise un calendrier avec un ID spécifique.Calendar(string name)
– Initialise un calendrier avec un nom spécifié.
L’exemple de code suivant montre comment instancier des calendriers avec chaque constructeur. Une fois créés, les calendriers peuvent être visualisés dans Microsoft Project via Projet > Informations sur le projet.
Informations sur le projet affichant les calendriers
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);
Définir les jours de la semaine pour un calendrier
La collection
Days
de la classe Calendar
représente les jours ouvrables et leurs plages horaires associées. Les jours de la semaine sont définis à l’aide des classes
WeekDay
et
WorkingTime
.
Les développeurs peuvent utiliser CreateDefaultWorkingDay()
pour initialiser les heures standard d’un jour donné, ou définir des intervalles personnalisés via les propriétés FromTime
et ToTime
.
L’exemple ci-dessous définit les lundis à jeudis comme jours ouvrables par défaut, et le vendredi avec des heures personnalisées. Pour vérifier le résultat dans Microsoft Project, allez à Outils > Modifier les horaires de travail.
Définir les jours de semaine dans 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);
Remplacer un calendrier
Les calendriers de base servent de modèles pour la planification des ressources et des tâches. Aspose.Tasks permet de remplacer un calendrier existant en accédant à la
CalendarCollection
via l’objet
Project
.
Les types de calendrier de base pris en charge incluent :
- Standard : lundi–vendredi, 08:00–17:00.
- 24 heures : utilisé pour des horaires de travail en continu.
- Équipe de nuit : du lundi soir au samedi matin, 23:00–08:00.
Le code ci-dessous montre comment supprimer un calendrier existant et en ajouter un nouveau de type standard à la collection.
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);
Créer un calendrier standard
Un calendrier standard définit les jours et heures ouvrables par défaut utilisés couramment dans la planification de projets. Aspose.Tasks fournit deux méthodes statiques pour faciliter cela :
MakeStandardCalendar()
– Crée un nouveau calendrier avec une configuration standard.MakeStandardCalendar(Calendar cal)
– Convertit un calendrier existant en standard.
Pour inspecter le résultat dans Microsoft Project, utilisez Outils > Modifier les horaires de travail.
La boîte de dialogue d’informations sur les horaires de travail montre le calendrier standard utilisé par le projet
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);
Écrire les données de calendrier mises à jour dans un fichier MPP
Aspose.Tasks permet de mettre à jour les définitions de calendriers et de les enregistrer dans un fichier MPP. Le processus implique :
- Chargement du fichier MPP existant.
- Modification de la collection de calendriers (ajout, mise à jour).
- Enregistrement du projet mis à jour sur le disque.
L’exemple suivant montre comment ajouter un nouveau calendrier et l’enregistrer dans le fichier MPP source.
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);