/// <summary> /// Updates an audit event after the method is invoked. /// </summary> protected override void UpdateAuditEvent( ISystemContext context, MethodState causeMethod, uint causeId, AuditUpdateStateEventState e, ServiceResult result) { base.UpdateAuditEvent( context, causeMethod, causeId, e, result); // update program specific event fields. if (ServiceResult.IsGood(result)) { ProgramTransitionAuditEventState e2 = e as ProgramTransitionAuditEventState; if (e2 != null) { e2.SetChildValue(context, BrowseNames.Transition, LastTransition, false); } } }
/// <summary> /// Updates an audit event after the method is invoked. /// </summary> protected virtual void UpdateAuditEvent( ISystemContext context, MethodState causeMethod, IList <object> inputArguments, uint causeId, AuditUpdateStateEventState e, ServiceResult result) { TranslationInfo info = new TranslationInfo( "StateTransition", "en-US", "The {1} method called was on the {0} state machine.", this.GetDisplayPath(3, '.'), causeMethod.DisplayName); e.Initialize( context, this, EventSeverity.Medium, new LocalizedText(info), ServiceResult.IsGood(result), DateTime.UtcNow); e.SetChildValue(context, BrowseNames.SourceNode, NodeId, false); e.SetChildValue(context, BrowseNames.SourceName, $"Method/{causeMethod.BrowseName.Name}", false); e.SetChildValue(context, BrowseNames.LocalTime, Utils.GetTimeZoneInfo(), false); // AuditUpdateMethodStateEventType properties e.SetChildValue(context, BrowseNames.MethodId, causeMethod.NodeId, false); e.SetChildValue(context, BrowseNames.InputArguments, inputArguments, false); // AuditUpdateStateEventType properties e.SetChildValue(context, BrowseNames.OldStateId, LastState, false); e.SetChildValue(context, BrowseNames.NewStateId, CurrentState, false); }
/// <summary> /// Updates an audit event after the method is invoked. /// </summary> protected virtual void UpdateAuditEvent( ISystemContext context, MethodState causeMethod, uint causeId, AuditUpdateStateEventState e, ServiceResult result) { TranslationInfo info = new TranslationInfo( "StateTransition", "en-US", "The {1} method called was on the {0} state machine.", this.GetDisplayPath(3, '.'), causeMethod.DisplayName); e.Initialize( context, this, EventSeverity.Medium, new LocalizedText(info), ServiceResult.IsGood(result), DateTime.UtcNow); e.MethodId = new PropertyState <NodeId>(e); e.MethodId.Value = causeMethod.NodeId; e.SetChildValue(context, BrowseNames.OldStateId, LastState, false); e.SetChildValue(context, BrowseNames.NewStateId, CurrentState, false); }
/// <summary> /// Invokes the specified cause. /// </summary> public virtual ServiceResult DoCause( ISystemContext context, MethodState causeMethod, uint causeId, IList <object> inputArguments, IList <object> outputArguments) { ServiceResult result = null; try { // get the transition. uint transitionId = GetTransitionForCause(context, causeId); if (transitionId == 0) { return(StatusCodes.BadNotSupported); } // check access rights. result = InvokeCallback( OnCheckUserPermission, context, this, transitionId, causeId, inputArguments, outputArguments); if (ServiceResult.IsBad(result)) { return(result); } // do the transition. result = DoTransition(context, transitionId, causeId, inputArguments, outputArguments); if (ServiceResult.IsBad(result)) { return(result); } // report any changes to state machine. ClearChangeMasks(context, true); } finally { // report the event. if (this.AreEventsMonitored) { AuditUpdateStateEventState e = CreateAuditEvent(context, causeMethod, causeId); UpdateAuditEvent(context, causeMethod, causeId, e, result); ReportEvent(context, e); } } return(result); }
/// <summary> /// Updates an audit event after the method is invoked. /// </summary> protected virtual void UpdateAuditEvent( ISystemContext context, MethodState causeMethod, uint causeId, AuditUpdateStateEventState e, ServiceResult result) { TranslationInfo info = new TranslationInfo( "StateTransition", "en-US", "The {1} method called was on the {0} state machine.", this.GetDisplayPath(3, '.'), causeMethod.DisplayName); e.Initialize( context, this, EventSeverity.Medium, new LocalizedText(info), ServiceResult.IsGood(result), DateTime.UtcNow); e.MethodId = new PropertyState<NodeId>(e); e.MethodId.Value = causeMethod.NodeId; e.SetChildValue(context, BrowseNames.OldStateId, LastState, false); e.SetChildValue(context, BrowseNames.NewStateId, CurrentState, false); }