Opc.Ua.FiniteStateMachineState.DoCause C# (CSharp) Method

DoCause() public method

Invokes the specified cause.
public DoCause ( ISystemContext context, MethodState causeMethod, uint causeId, IList inputArguments, IList outputArguments ) : ServiceResult
context ISystemContext
causeMethod MethodState
causeId uint
inputArguments IList
outputArguments IList
return ServiceResult
        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;    
        }