コード例 #1
0
        private static void GetCurrentAndPrevStateIdByTimeTrackingBlock(TimeTrackingBlock block, out int curStateId, out int prevStateId)
        {
            curStateId  = -1;
            prevStateId = -1;

            StateMachineService stateMachine = block.GetService <StateMachineService>();

            if (stateMachine == null || stateMachine.StateMachine.States.Count == 0 || stateMachine.CurrentState == null)
            {
                return;
            }

            EventService eventService = block.GetService <EventService>();

            if (eventService != null)
            {
                // Detects that state is changed, find moFromStateName, toStateName
                MetaObject[] events = eventService.LoadEvents(TriggerContext.Current.TransactionId);
                StateMachineEventServiceArgs args = StateMachine.GetStateChangedEventArgs(events);
                if (args != null)
                {
                    curStateId  = StateMachineManager.GetState(TimeTrackingBlock.GetAssignedMetaClass(), args.CurrentState.Name).PrimaryKeyId.Value;
                    prevStateId = StateMachineManager.GetState(TimeTrackingBlock.GetAssignedMetaClass(), args.PrevState.Name).PrimaryKeyId.Value;
                }
            }
        }
コード例 #2
0
        public void Invoke(object Sender, object Element)
        {
            if (Element is CommandParameters)
            {
                CommandParameters   cp        = (CommandParameters)Element;
                DateTime            startDate = DateTime.Parse(cp.CommandArguments["primaryKeyId"], CultureInfo.InvariantCulture);
                TimeTrackingBlock[] mas       = TimeTrackingBlock.List(FilterElement.EqualElement("OwnerId", Mediachase.IBN.Business.Security.CurrentUser.UserID), FilterElement.EqualElement("StartDate", startDate));

                using (TransactionScope tran = DataContext.Current.BeginTransaction())
                {
                    foreach (TimeTrackingBlock ttb in mas)
                    {
                        StateMachineService sms = ((BusinessObject)ttb).GetService <StateMachineService>();

                        // process only initial state
                        if (sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0)
                        {
                            StateTransition[] availableTransitions = sms.GetNextAvailableTransitions(true);
                            if (availableTransitions.Length > 0)
                            {
                                sms.MakeTransition(availableTransitions[0].Uid);
                                ttb.Save();
                            }
                        }
                    }
                    tran.Commit();
                }

                CHelper.RequireBindGrid();
            }
        }
コード例 #3
0
        public bool IsEnable(object Sender, object Element)
        {
            if (Element is CommandParameters)
            {
                CommandParameters cp = (CommandParameters)Element;

                if (!cp.CommandArguments.ContainsKey("parentBlockId"))
                {
                    return(false);
                }

                MetaObject          ttb         = MetaObjectActivator.CreateInstance <BusinessObject>(MetaDataWrapper.ResolveMetaClassByNameOrCardName("TimeTrackingBlock"), Convert.ToInt32(cp.CommandArguments["parentBlockId"]));
                StateMachineService sms         = ((BusinessObject)ttb).GetService <StateMachineService>();
                StateTransition[]   transitions = sms.GetNextAvailableTransitions(true);

                bool retval = true;
                if (transitions.Length == 0)
                {
                    transitions = sms.GetPrevAvailableTransitions(true);
                    retval      = transitions.Length > 0;
                }
                return(retval);
            }

            return(false);
        }
コード例 #4
0
        protected async Task <Guid> PutTestStateMachine(string name, string body)
        {
            var repository = new DummyRepository <StateMachineEntity, Guid>(_storage);
            var service    = new StateMachineService(repository);

            return(await service.Put(new StateMachineInputDto()
            {
                Name = name,
                Body = body
            }));
        }
コード例 #5
0
        private static int GetFinalStateIdByTimeTrackingBlock(TimeTrackingBlock block)
        {
            StateMachineService stateMachine = block.GetService <StateMachineService>();

            if (stateMachine == null || stateMachine.StateMachine.States.Count == 0)
            {
                return(-1);
            }

            State finalState = stateMachine.StateMachine.States[stateMachine.StateMachine.States.Count - 1];

            MetaObject stateObject = StateMachineManager.GetState(TimeTrackingBlock.GetAssignedMetaClass(), finalState.Name);

            return(stateObject.PrimaryKeyId.Value);
        }
コード例 #6
0
        public void SetUp()
        {
            _stateMachineService = new StateMachineService(string.Empty,
                                                           new[] { "Entropy.SimpleStateMachine.Tests" },
                                                           new[] { GetType().Assembly });

            _domainContextRepository = MockRepository.GenerateMock <IDomainContextRepository>();
            _workflowPersister       = MockRepository.GenerateMock <IWorkflowPersister>();

            _workflowService = new WorkflowService(_stateMachineService,
                                                   _workflowPersister,
                                                   _domainContextRepository);

            _userStateChangedCount = 0;
        }
コード例 #7
0
        private void BindData()
        {
            if (BlockId > 0)
            {
                TimeTrackingBlock   ttb             = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), BlockId);
                StateMachineService sms             = ttb.GetService <StateMachineService>();
                StateTransition[]   nextTransitions = sms.GetNextAvailableTransitions();
                StateTransition[]   prevTransitions = sms.GetPrevAvailableTransitions();

                ttbTitle.Text        = ttb.Title;
                TTBlockComment.Value = string.Empty;

                BindTransitions(nextTransitions, prevTransitions);
            }
        }
コード例 #8
0
        public bool IsEnable(object Sender, object Element)
        {
            if (Element is CommandParameters)
            {
                CommandParameters cp = (CommandParameters)Element;

                if (!cp.CommandArguments.ContainsKey("parentBlockId"))
                {
                    return(false);
                }

                TimeTrackingBlock   ttb         = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(MetaDataWrapper.ResolveMetaClassByNameOrCardName("TimeTrackingBlock"), Convert.ToInt32(cp.CommandArguments["parentBlockId"].ToString(), CultureInfo.InvariantCulture));
                StateMachineService sms         = ttb.GetService <StateMachineService>();
                StateTransition[]   transitions = sms.GetNextAvailableTransitions(true);

                bool isInitialState = sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0;

                return(transitions.Length > 0 && isInitialState);
            }

            return(false);
        }
コード例 #9
0
ファイル: QuickAddHandler.cs プロジェクト: alex765022/IBN
        public bool IsEnable(object Sender, object Element)
        {
            if (Element is CommandParameters)
            {
                CommandParameters cp = (CommandParameters)Element;

                if (!cp.CommandArguments.ContainsKey("parentBlockId"))
                {
                    return(false);
                }

                MetaObject          ttb = MetaObjectActivator.CreateInstance <BusinessObject>(MetaDataWrapper.ResolveMetaClassByNameOrCardName("TimeTrackingBlock"), Convert.ToInt32(cp.CommandArguments["parentBlockId"]));
                StateMachineService sms = ((BusinessObject)ttb).GetService <StateMachineService>();

                bool canWrite       = TimeTrackingBlock.CheckUserRight((Mediachase.IbnNext.TimeTracking.TimeTrackingBlock)ttb, Security.RightWrite);
                bool isInitialState = sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0;

                return(canWrite && isInitialState);
            }

            return(false);
        }
コード例 #10
0
        private void btnComplete_Click(object sender, EventArgs e)
        {
            try
            {
                btnComplete.Enabled = false;
                StateMachineService stateMachineService = SampleWorkflowRuntime.Current.GetService <StateMachineService>();
                stateMachineService.OnCompleted(_workflowInstance.InstanceId);
                SampleWorkflowRuntime.Current.RunWorkflow(_workflowInstance.InstanceId);
                btnCreate.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unexpected error: {0}", ex.ToString());

                btnCreate.Enabled   = false;
                btnComplete.Enabled = true;
            }



            btnComplete.Enabled = false;
            btnCreate.Enabled   = true;
        }
コード例 #11
0
        protected override void OnSaving()
        {
            // Call Base Method => Call Service PreSaveMethod
            base.OnSaving();

            if (this.Properties.Contains("IsRejected") &&
                this.IsServiceActivated <StateMachineService>())
            {
                StateMachineService stateMachine = this.GetService <StateMachineService>();

                if (stateMachine != null &&
                    this.Properties["mc_StateId"].IsChanged)
                {
                    // Get Name
                    string oldState = (string)this.Properties["mc_State"].OriginalValue;
                    string newState = (string)this.Properties["mc_State"].Value;

                    // Get State Machine Index
                    int oldStateIndex = stateMachine.StateMachine.GetStateIndex(oldState);
                    int newStateIndex = stateMachine.StateMachine.GetStateIndex(newState);

                    // Update IsRejectedState state field.
                    this.Properties["IsRejected"].Value = (oldStateIndex > newStateIndex);
                }
            }

            // OZ: Clean up from HttpContext
            if (this.PrimaryKeyId.HasValue)
            {
                ClearUserRight(this.PrimaryKeyId.Value, Security.RightRead);
                ClearUserRight(this.PrimaryKeyId.Value, Security.RightWrite);
            }

            string cacheKey = this.ToString() + "_" + Security.CurrentUserId.ToString() + "_AllowedRights";

            DataContext.Current.Cache.Remove(cacheKey);
        }
コード例 #12
0
        public void Invoke(object Sender, object Element)
        {
            if (Element is CommandParameters)
            {
                CommandParameters cp = (CommandParameters)Element;

                string[] elems = null;
                if (cp.CommandArguments.ContainsKey("GridId"))
                {
                    elems = MetaGridServer.GetCheckedCollection(((CommandManager)Sender).Page, cp.CommandArguments["GridId"]);
                }

                List <int> ttbIds = new List <int>();

                //fix by DV: 2008-05-14
                //Esli vyzyvaetsa s grida (iconka v otklonennih listah), to primitiv v gride ustanovit etot flag
                //i togda ID budet bratsa iz parametrov, v protivnom sluchae ID - beretsa iz checkboxes
                if (!cp.CommandArguments.ContainsKey("callFromGrid"))
                {
                    foreach (string elem in elems)
                    {
                        string type = MetaViewGroupUtil.GetMetaTypeFromUniqueKey(elem);                        // elem.Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries)[1];
                        if (type == MetaViewGroupUtil.keyValueNotDefined)
                        {
                            continue;
                        }

                        int id = Convert.ToInt32(MetaViewGroupUtil.GetIdFromUniqueKey(elem), CultureInfo.InvariantCulture);                         //Convert.ToInt32(elem.Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries)[0], CultureInfo.InvariantCulture);


                        if (type == TimeTrackingEntry.GetAssignedMetaClass().Name)
                        {
                            //TimeTrackingEntry tte = MetaObjectActivator.CreateInstance<TimeTrackingEntry>(TimeTrackingEntry.GetAssignedMetaClass(), id);

                            //if (!ttbIds.Contains(tte.ParentBlockId))
                            //    ttbIds.Add(tte.ParentBlockId);
                        }
                        else
                        {
                            if (!ttbIds.Contains(id))
                            {
                                ttbIds.Add(id);
                            }
                        }
                    }
                }
                else
                {
                    ttbIds.Add(Convert.ToInt32(MetaViewGroupUtil.GetIdFromUniqueKey(cp.CommandArguments["primaryKeyId"]), CultureInfo.InvariantCulture));
                }

                using (TransactionScope tran = DataContext.Current.BeginTransaction())
                {
                    foreach (int ttbId in ttbIds)
                    {
                        TimeTrackingBlock ttb = MetaObjectActivator.CreateInstance <TimeTrackingBlock>(TimeTrackingBlock.GetAssignedMetaClass(), ttbId);

                        StateMachineService sms = ((BusinessObject)ttb).GetService <StateMachineService>();

                        // process only initial state
                        if (sms.StateMachine.GetStateIndex(sms.CurrentState.Name) == 0)
                        {
                            StateTransition[] availableTransitions = sms.GetNextAvailableTransitions(true);
                            if (availableTransitions.Length > 0)
                            {
                                sms.MakeTransition(availableTransitions[0].Uid);
                                ttb.Save();
                            }
                        }
                    }
                    tran.Commit();
                }
            }
        }
コード例 #13
0
 private void button4_Click(object sender, EventArgs e)
 {
     StateMachineService.RemoveStateMachine(LatestMachine);
 }
コード例 #14
0
 private void button1_Click(object sender, EventArgs e)
 {
     LatestMachine = StateMachineService.AddStateMachine();
 }
コード例 #15
0
 public Form1()
 {
     InitializeComponent();
     LatestMachine = StateMachineService.AddStateMachine();
 }