Imports Microsoft.VisualBasic Imports System Imports DevExpress.Xpo Imports DevExpress.ExpressApp Imports DevExpress.Persistent.Base Imports DevExpress.Persistent.Validation Imports DevExpress.Persistent.Base.General Imports DevExpress.Xpo.Metadata Imports System.ComponentModel Imports System.Xml _ Public Class HRPersonEvent Inherits DevExpress.Persistent.BaseImpl.BaseObject Implements IEvent, IRecurrentEvent #If MediumTrust Then _ Public resourceIds As String #Else _ Private resourceIds As String #End If Private _appointmentImpl As New EventImpl _ Private recurrencePattern_Renamed As DevExpress.Persistent.BaseImpl.Event Private recurrenceInfoXml_Renamed As String Private Sub UpdateResources() Resources.SuspendChangedEvents() Try Do While Resources.Count > 0 Resources.Remove(Resources(0)) Loop If (Not String.IsNullOrEmpty(resourceIds)) Then Dim xmlDocument As New XmlDocument() xmlDocument.LoadXml(resourceIds) For Each xmlNode As XmlNode In xmlDocument.DocumentElement.ChildNodes Dim resource As HRPerson = Session.GetObjectByKey(Of HRPerson)(New Guid(xmlNode.Attributes("Value").Value)) If resource IsNot Nothing Then Resources.Add(resource) End If Next xmlNode End If Finally Resources.ResumeChangedEvents() End Try End Sub Private Sub Resources_CollectionChanged(ByVal sender As Object, ByVal e As XPCollectionChangedEventArgs) If (e.CollectionChangedType = XPCollectionChangedType.AfterAdd) OrElse (e.CollectionChangedType = XPCollectionChangedType.AfterRemove) Then UpdateResourceIds() OnChanged("ResourceId") End If End Sub Private Sub session_ObjectSaving(ByVal sender As Object, ByVal e As ObjectManipulationEventArgs) End Sub Protected Overloads Overrides Function CreateCollection(ByVal [property] As XPMemberInfo) As XPCollection Dim result As XPCollection = MyBase.CreateCollection([property]) If [property].Name = "Resources" Then AddHandler result.CollectionChanged, AddressOf Resources_CollectionChanged End If Return result End Function Public Sub New(ByVal session As Session) MyBase.New(session) AddHandler session.ObjectSaving, AddressOf session_ObjectSaving End Sub Public Overrides Sub AfterConstruction() MyBase.AfterConstruction() _appointmentImpl = New EventImpl _appointmentImpl.AfterConstruction() End Sub Public Sub UpdateResourceIds() resourceIds = "" & Constants.vbCrLf For Each resource As HRPerson In Resources resourceIds &= String.Format("" & Constants.vbCrLf, resource.Id.GetType().FullName, resource.Id) Next resource resourceIds &= "" End Sub _ Public ReadOnly Property AppointmentId() As Object Implements IEvent.AppointmentId Get Return Oid End Get End Property _ Public Property Subject() As String Implements IEvent.Subject Get Return _appointmentImpl.Subject End Get Set(ByVal value As String) _appointmentImpl.Subject = value OnChanged("Subject", Nothing, value) End Set End Property _ Public Property Description() As String Implements IEvent.Description Get Return _appointmentImpl.Description End Get Set(ByVal value As String) _appointmentImpl.Description = value OnChanged("Description") End Set End Property _ Public Property StartOn() As DateTime Implements IEvent.StartOn Get Return _appointmentImpl.StartOn End Get Set(ByVal value As DateTime) _appointmentImpl.StartOn = value OnChanged("StartOn") End Set End Property _ Public Property EndOn() As DateTime Implements IEvent.EndOn Get Return _appointmentImpl.EndOn End Get Set(ByVal value As DateTime) _appointmentImpl.EndOn = value OnChanged("EndOn") End Set End Property Public Property AllDay() As Boolean Implements IEvent.AllDay Get Return _appointmentImpl.AllDay End Get Set(ByVal value As Boolean) _appointmentImpl.AllDay = value OnChanged("AllDay") End Set End Property Public Property Location() As String Implements IEvent.Location Get Return _appointmentImpl.Location End Get Set(ByVal value As String) _appointmentImpl.Location = value OnChanged("Location") End Set End Property Public Property Label() As Integer Implements IEvent.Label Get Return _appointmentImpl.Label End Get Set(ByVal value As Integer) _appointmentImpl.Label = value OnChanged("Label") End Set End Property Public Property Status() As Integer Implements IEvent.Status Get Return _appointmentImpl.Status End Get Set(ByVal value As Integer) _appointmentImpl.Status = value OnChanged("Status") End Set End Property Public Property Type() As Integer Implements IEvent.Type Get Return _appointmentImpl.Type End Get Set(ByVal value As Integer) _appointmentImpl.Type = value OnChanged("Type") End Set End Property _ Public ReadOnly Property Resources() As XPCollection(Of HRPerson) Get Return GetCollection(Of HRPerson)("Resources") End Get End Property _ Public Property ResourceId() As String Implements IEvent.ResourceId Get If resourceIds Is Nothing Then UpdateResourceIds() End If Return resourceIds End Get Set(ByVal value As String) If resourceIds <> value Then resourceIds = value UpdateResources() End If End Set End Property _ Public Property RecurrenceInfoXml() As String Implements IRecurrentEvent.RecurrenceInfoXml Get Return recurrenceInfoXml_Renamed End Get Set(ByVal value As String) recurrenceInfoXml_Renamed = value OnChanged("RecurrenceInfoXml") End Set End Property Public Property RecurrencePattern() As IRecurrentEvent Implements IRecurrentEvent.RecurrencePattern Get Return recurrencePattern_Renamed End Get Set(ByVal value As IRecurrentEvent) recurrencePattern_Renamed = CType(value, DevExpress.Persistent.BaseImpl.Event) OnChanged("RecurrencePattern") End Set End Property _ Public ReadOnly Property IsIntervalValid() As Boolean Get Return StartOn < EndOn End Get End Property End Class