/// <summary> /// Handles the Unshelve method. /// </summary> protected virtual ServiceResult OnUnshelve( ISystemContext context, MethodState method, IList <object> inputArguments, IList <object> outputArguments) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return(error = StatusCodes.BadConditionDisabled); } if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_Unshelve, false)) { return(error = StatusCodes.BadConditionNotShelved); } if (OnShelve == null) { return(error = StatusCodes.BadNotSupported); } error = OnShelve(context, this, false, false, 0); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { // raise the audit event. if (this.AreEventsMonitored) { AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionUnshelve", "en-US", "The Unshelve method was called."); e.Initialize( context, this, EventSeverity.Low, new LocalizedText(info), ServiceResult.IsGood(error), DateTime.UtcNow); e.SourceName.Value = "Attribute/Call"; e.MethodId = new PropertyState <NodeId>(e); e.MethodId.Value = method.NodeId; ReportEvent(context, e); } } return(error); }
/// <summary> /// Handles the TimedShelve method. /// </summary> protected virtual ServiceResult OnTimedShelve( ISystemContext context, MethodState method, NodeId objectId, double shelvingTime) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return(error = StatusCodes.BadConditionDisabled); } if (shelvingTime <= 0 || (this.MaxTimeShelved != null && shelvingTime > this.MaxTimeShelved.Value)) { return(error = StatusCodes.BadShelvingTimeOutOfRange); } if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_TimedShelve, false)) { return(error = StatusCodes.BadConditionAlreadyShelved); } if (OnShelve == null) { return(error = StatusCodes.BadNotSupported); } error = OnShelve(context, this, true, false, shelvingTime); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { if (this.AreEventsMonitored) { AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionTimedShelve", "en-US", "The TimedShelve method was called."); e.Initialize( context, this, EventSeverity.Low, new LocalizedText(info), ServiceResult.IsGood(error), DateTime.UtcNow); e.SourceName.Value = "Attribute/Call"; e.MethodId = new PropertyState <NodeId>(e); e.MethodId.Value = method.NodeId; e.InputArguments = new PropertyState <object[]>(e); e.InputArguments.Value = new object[] { shelvingTime }; ReportEvent(context, e); } } return(error); }
/// <summary> /// Handles the TimedShelve method. /// </summary> protected virtual ServiceResult OnTimedShelve( ISystemContext context, MethodState method, NodeId objectId, double shelvingTime) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return error = StatusCodes.BadConditionDisabled; } if (shelvingTime <= 0 || (this.MaxTimeShelved != null && shelvingTime > this.MaxTimeShelved.Value)) { return error = StatusCodes.BadShelvingTimeOutOfRange; } if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_TimedShelve, false)) { return error = StatusCodes.BadConditionAlreadyShelved; } if (OnShelve == null) { return error = StatusCodes.BadNotSupported; } error = OnShelve(context, this, true, false, shelvingTime); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { if (this.AreEventsMonitored) { AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionTimedShelve", "en-US", "The TimedShelve method was called."); e.Initialize( context, this, EventSeverity.Low, new LocalizedText(info), ServiceResult.IsGood(error), DateTime.UtcNow); e.SourceName.Value = "Attribute/Call"; e.MethodId = new PropertyState<NodeId>(e); e.MethodId.Value = method.NodeId; e.InputArguments = new PropertyState<object[]>(e); e.InputArguments.Value = new object[] { shelvingTime }; ReportEvent(context, e); } } return error; }
/// <summary> /// Handles the Unshelve method. /// </summary> protected virtual ServiceResult OnUnshelve( ISystemContext context, MethodState method, IList<object> inputArguments, IList<object> outputArguments) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return error = StatusCodes.BadConditionDisabled; } if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_Unshelve, false)) { return error = StatusCodes.BadConditionNotShelved; } if (OnShelve == null) { return error = StatusCodes.BadNotSupported; } error = OnShelve(context, this, false, false, 0); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { // raise the audit event. if (this.AreEventsMonitored) { AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionUnshelve", "en-US", "The Unshelve method was called."); e.Initialize( context, this, EventSeverity.Low, new LocalizedText(info), ServiceResult.IsGood(error), DateTime.UtcNow); e.SourceName.Value = "Attribute/Call"; e.MethodId = new PropertyState<NodeId>(e); e.MethodId.Value = method.NodeId; ReportEvent(context, e); } } return error; }
/// <summary> /// Handles the OneShotShelve method. /// </summary> protected virtual ServiceResult OnOneShotShelve( ISystemContext context, MethodState method, IList <object> inputArguments, IList <object> outputArguments) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return(error = StatusCodes.BadConditionDisabled); } if (!this.ShelvingState.IsCausePermitted(context, Methods.ShelvedStateMachineType_OneShotShelve, false)) { return(error = StatusCodes.BadConditionAlreadyShelved); } if (OnShelve == null) { return(error = StatusCodes.BadNotSupported); } error = OnShelve(context, this, true, true, 0); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { if (this.AreEventsMonitored) { AuditConditionShelvingEventState e = new AuditConditionShelvingEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionOneShotShelve", "en-US", "The OneShotShelve method was called."); e.Initialize( context, this, EventSeverity.Low, new LocalizedText(info), ServiceResult.IsGood(error), DateTime.UtcNow); e.SetChildValue(context, BrowseNames.SourceNode, NodeId, false); e.SetChildValue(context, BrowseNames.SourceName, "Method/OneShotShelve", false); e.SetChildValue(context, BrowseNames.MethodId, method.NodeId, false); e.SetChildValue(context, BrowseNames.ShelvingTime, null, false); ReportEvent(context, e); } } return(error); }