カレンダーの操作

カレンダーの作成

Microsoft Projectのカレンダーは、作業時間と非作業時間を定義し、タスクのスケジューリングとリソースの可用性に直接影響します。Aspose.Tasks for .NETでは、3つのコンストラクタオーバーロードを提供する 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);

カレンダーの平日の定義

Calendarクラスの Daysコレクションは、作業日とそれに関連する時間範囲を表します。平日の定義は、 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では、 Projectオブジェクトを介して CalendarCollectionにアクセスすることで、既存のカレンダーを置換できます。

サポートされている基本カレンダータイプには以下があります:

以下のコードは、既存のカレンダーを削除し、コレクションに新しい標準カレンダーを追加する方法を示しています。

 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は、これを容易にする2つの静的メソッドを提供します:

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.