/// <summary> /// Called when the Respond method is called. /// </summary> /// <param name="context">The system context.</param> /// <param name="method">The method being called.</param> /// <param name="objectId">The id of the object.</param> /// <param name="selectedResponse">The selected response.</param> /// <returns>Any error.</returns> protected virtual ServiceResult OnRespondCalled( ISystemContext context, MethodState method, NodeId objectId, int selectedResponse) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return(error = StatusCodes.BadConditionDisabled); } if (!this.DialogState.Id.Value) { return(error = StatusCodes.BadDialogNotActive); } if (selectedResponse < 0 || selectedResponse >= this.ResponseOptionSet.Value.Length) { return(error = StatusCodes.BadDialogResponseInvalid); } if (OnRespond == null) { return(error = StatusCodes.BadNotSupported); } error = OnRespond(context, this, selectedResponse); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { if (this.AreEventsMonitored) { AuditConditionRespondEventState e = new AuditConditionRespondEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionDialogResponse", "en-US", "The Respond 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[] { selectedResponse }; ReportEvent(context, e); } } return(error); }
/// <summary> /// Called when the Respond method is called. /// </summary> /// <param name="context">The system context.</param> /// <param name="method">The method being called.</param> /// <param name="objectId">The id of the object.</param> /// <param name="selectedResponse">The selected response.</param> /// <returns>Any error.</returns> protected virtual ServiceResult OnRespondCalled( ISystemContext context, MethodState method, NodeId objectId, int selectedResponse) { ServiceResult error = null; try { if (!this.EnabledState.Id.Value) { return error = StatusCodes.BadConditionDisabled; } if (!this.DialogState.Id.Value) { return error = StatusCodes.BadDialogNotActive; } if (selectedResponse < 0 || selectedResponse >= this.ResponseOptionSet.Value.Length) { return error = StatusCodes.BadDialogResponseInvalid; } if (OnRespond == null) { return error = StatusCodes.BadNotSupported; } error = OnRespond(context, this, selectedResponse); // report a state change event. if (ServiceResult.IsGood(error)) { ReportStateChange(context, false); } } finally { if (this.AreEventsMonitored) { AuditConditionRespondEventState e = new AuditConditionRespondEventState(null); TranslationInfo info = new TranslationInfo( "AuditConditionDialogResponse", "en-US", "The Respond 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[] { selectedResponse }; ReportEvent(context, e); } } return error; }