以下のコード例は、 ProjectCalendar クラスと ProjectCalendarException クラスのインスタンスを作成します。次に、プロジェクト カレンダー例外のために DateRange、DaySettings および DateRecurrence を設定します。最後に、プロジェクト カレンダー例外がプロジェクト カレンダーに追加され、プロジェクト カレンダーがプロジェクトに追加されます。
コード例には、例外が適用される日と影響を受けない日をよりはっきりと強調するためのタスクのコレクションが含まれています。
コード例を完了するには xamGantt プロジェクトが必要です。サンプルの xamGantt プロジェクトを作成するためには、 xamGantt をページに追加の指示に従ってください。次に、このトピックで示すように、ViewModel を置き換えて ViewModel クラス、ProjectViewModel
を設定します。
以下は完全なサンプル プロジェクトのプレビューです。このアプリケーションは火曜日に実行されましたが、稼働日でなければならない水曜日と木曜日が非稼働日に設定されているのが確認できます。
注:
C# の場合:
public class ProjectViewModel :
INotifyPropertyChanged
{
private Project project;
public Project Project
{
get
{
if (project == null)
{
project = GenerateExceptionCalendarProject();
}
return project;
}
}
public Project GenerateExceptionCalendarProject()
{
Project project = new Project();
ProjectCalendar projectCalendar = new ProjectCalendar() { UniqueId = "pce" };
ProjectCalendarException pce = new ProjectCalendarException();
pce.DateRange = new DateRange(DateTime.Today.AddDays(1), DateTime.Today.AddDays(7));
pce.DaySettings = new DaySettings { IsWorkday = false };
pce.Recurrence = new DateRecurrence { Count = 2, Frequency = DateRecurrenceFrequency.Daily
};
projectCalendar.Exceptions.Add(pce);
project.Calendars.Add(projectCalendar);
project.CalendarId = "pce";
project.Start = DateTime.Today;
AddSampleWorkingHours(project);
return project;
}
// これはヘルパー メソッド。10 のタスクを追加し関係を構築する
private Project AddSampleWorkingHours(Project project)
{
ProjectTask root = new ProjectTask { TaskName = "Summary",
IsManual = false };
project.RootTask.Tasks.Add(root);
for (int i = 0; i < 10; i++)
{
root.Tasks.Add(new ProjectTask
{
TaskName = String.Format("Task {0:00}", i.ToString()),
IsManual = false,
ManualDuration = ProjectDuration.FromFormatUnits(8.0, ProjectDurationFormat.Hours),
Notes = String.Format("Notes {0:00}", i.ToString())
});
}
for (int i = 1; i < 10; i++)
{
root.Tasks[i].Predecessors.Add(root.Tasks[i - 1]);
}
return project;
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string
propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs
(propertyName));
}
}
#endregion // INotifyPropertyChanged
}
Visual Basic の場合:
Public Class ProjectViewModel
Implements INotifyPropertyChanged
Private m_project As Project
Public ReadOnly Property Project() As Project
Get
If m_project Is Nothing
Then
m_project = GenerateExceptionCalendarProject()
End If
Return m_project
End Get
End Property
Public Function GenerateExceptionCalendarProject() As Project
Dim project As New Project()
Dim projectCalendar As New
ProjectCalendar() With { _
Key .UniqueId = "pce" _
}
Dim pce As New
ProjectCalendarException()
pce.DateRange = New DateRange(DateTime.Today.AddDays(1), DateTime.Today.AddDays(7))
pce.DaySettings = New DaySettings() With { _
Key .IsWorkday = False _
}
pce.Recurrence = New DateRecurrence() With { _
Key .Count = 2, _
Key .Frequency = DateRecurrenceFrequency.Daily _
}
projectCalendar.Exceptions.Add(pce)
project.Calendars.Add(projectCalendar)
project.CalendarId = "pce"
project.Start = DateTime.Today
AddSampleWorkingHours(project)
Return project
End Function
' これはヘルパー メソッド。10 のタスクを追加し関係を構築する
Private Function AddSampleWorkingHours(project As Project) As Project
Dim root As New ProjectTask()
With { _
Key .TaskName = "Summary", _
Key .IsManual = False _
}
project.RootTask.Tasks.Add(root)
Dim i As Integer = 0
While i < 10
root.Tasks.Add(New ProjectTask() With { _
Key .TaskName = [String].Format("Task {0:00}",
i.ToString()), _
Key .IsManual = False, _
Key .ManualDuration = ProjectDuration.FromFormatUnits(8.0, ProjectDurationFormat.Hours), _
Key .Notes = [String].Format("Notes {0:00}",
i.ToString()) _
})
i
End While
Dim i As Integer = 1
While i < 10
root.Tasks(i).Predecessors.Add(root.Tasks(i - 1))
i
End While
Return project
End Function
#Region "INotifyPropertyChanged"
Public Event PropertyChanged As
PropertyChangedEventHandler
Public Sub OnPropertyChanged(propertyName As String)
RaiseEvent PropertyChanged(Me, New
PropertyChangedEventArgs(propertyName))
End Sub
#End Region
End Class
このトピックについては、以下のトピックも参照してください。