コード例 #1
0
 public atriumDB.ProcessRow ParentProcess(atriumDB.ProcessRow pr, bool active)
 {
     if (pr.IsFirstActivityIdNull())
     {
         return(null);
     }
     else
     {
         string[] parents = pr.Thread.Split('-');
         for (int i = parents.Length - 2; i >= 0; i--)
         {
             atriumDB.ProcessRow pr1 = myProcessDT.FindByProcessId(Convert.ToInt32(parents[i]));
             if (pr1 != null)
             {
                 if (!active)
                 {
                     return(pr1);
                 }
                 else if (pr1.Active)
                 {
                     return(pr1);
                 }
             }
         }
         return(null);
     }
 }
コード例 #2
0
        public atriumDB.ProcessRow Load(int ProcessId)
        {
            atriumDB.ProcessRow pr = myProcessDT.FindByProcessId(ProcessId);
            if (pr == null)
            {
                if (myA.AtMng.AppMan.UseService)
                {
                    Fill(myA.AtMng.AppMan.AtriumX().ProcessLoad(ProcessId, myA.AtMng.AppMan.AtriumXCon));
                }
                else
                {
                    try
                    {
                        Fill(myDAL.Load(ProcessId));
                    }
                    catch (System.Runtime.Serialization.SerializationException x)
                    {
                        RecoverDAL();
                        Fill(myDAL.Load(ProcessId));
                    }
                }
                pr = myProcessDT.FindByProcessId(ProcessId);
            }

            return(pr);
        }
コード例 #3
0
        internal void CheckMove(atriumDB.ProcessRow pr)
        {
            //need to check permissions on current process
            if (!CanDelete(pr))
            {
                throw new AtriumException(Properties.Resources.YouNeedDeletePermissionOnTheProcessToMoveIt);
            }


            //don't move a create file process
            //ActivityConfig.SeriesRow sr = myA.AtMng.acMng.DB.Series.FindBySeriesId(pr.SeriesId);
            //if(!sr.AllowMove)

            //if (sr.CreatesFile)
            //    throw new AtriumException("You can't move an activity on a process that creates the file.");

            //don't move a process that is threaded - ie a child process
            //if (pr.Thread.Contains("-"))
            //    throw new AtriumException("You cannot move an activity that is on a process directly related to another process.");

            ////don't move a process that has child processes
            //foreach (atriumDB.ProcessRow prr in myA.AtMng.GetFile(pr.FileId, false).DB.Process)
            //{
            //    if (prr.Thread.StartsWith(pr.Thread) && prr.ProcessId != pr.ProcessId)
            //        throw new AtriumException("You can't move an activity that is on the process that created the file (or is a top-level process in the file.");
            //}
        }
コード例 #4
0
        //public ACEngine Add(DateTime acDate, ActivityConfig.ACSeriesRow acSeries, atriumDB.ProcessRow process, bool adHoc, atriumDB.ActivityRow prevAc, string conversationIndex)
        //{
        //    if (myACE != null)
        //        throw new AtriumException("You cannot enter more than one activity at a time on a file.");

        //    myACE = new ACEngine(FM, acDate, acSeries, process, adHoc, conversationIndex, prevAc, ConnectorType.NextStep, null, 0, ACEngine.RevType.Nothing);

        //    return myACE;

        //}

        public ACEngine Add(DateTime acDate, ActivityConfig.ACSeriesRow acSeries, atriumDB.ProcessRow process, bool adHoc, atriumDB.ActivityRow prevAc)
        {
            if (myACE != null)
            {
                throw new AtriumException("You cannot enter more than one activity at a time on a file.");
            }

            myACE = new ACEngine(FM, acDate, acSeries, process, adHoc, null, prevAc, ConnectorType.NextStep, null, 0, ACEngine.RevType.Nothing, null);
            return(myACE);
        }
コード例 #5
0
        protected override void AfterAdd(DataRow row)
        {
            atriumDB.ProcessRow dr = (atriumDB.ProcessRow)row;
            string ObjectName      = this.myProcessDT.TableName;

            dr.ProcessId = myA.AtMng.PKIDGet(ObjectName, 10);
            dr.Active    = false;
            dr.Thread    = dr.ProcessId.ToString();
            dr.Paused    = false;
        }
コード例 #6
0
        private static bool TestForProcessMatch(atriumDB.ProcessRow pr, atriumDB.ActivityRow prevAc)
        {
            bool match = true;

            if (prevAc == null)
            {
                return(match);
            }
            if (pr != null)
            {
                match = false;
                if (pr.Thread.StartsWith(prevAc.ProcessRow.Thread) | prevAc.ProcessRow.Thread.StartsWith(pr.Thread))
                {
                    match = true;
                }
            }
            return(match);
        }
コード例 #7
0
 internal void CompleteAllOnProcess(atriumDB.ProcessRow pr1, int procid)
 {
     AllowEdit = true;
     foreach (atriumDB.ProcessRow pr in myA.DB.Process.Select("ProcessId=" + pr1.ProcessId.ToString() + " or Thread like '" + pr1.Thread + "-%' or '" + pr1.Thread + "' like Thread+'%' "))
     {
         if (pr.ProcessId != procid)
         {
             foreach (atriumDB.ActivityRow ar in pr.GetActivityRows())
             {
                 foreach (atriumDB.ActivityBFRow abr in ar.GetActivityBFRows())
                 {
                     if (abr.Completed == false && abr.ACBFId != USERBFID)
                     {
                         abr.Completed = true;
                     }
                 }
             }
         }
     }
     AllowEdit = false;
 }
コード例 #8
0
 public void SetActive(atriumDB.ProcessRow pr)
 {
     foreach (atriumDB.ActivityRow ar in pr.GetActivityRows())
     {
         foreach (atriumDB.ActivityBFRow abr in ar.GetActivityBFRows())
         {
             if (!abr.Completed & !(abr.ACBFId == ActivityBFBE.USERBFID | abr.isMail))
             {
                 if (!pr.Active)
                 {
                     pr.Active = true;
                 }
                 return;
             }
         }
     }
     if (pr.Active)
     {
         pr.Active = false;
     }
 }
コード例 #9
0
        public ACEngine Add(DateTime acDate, ActivityConfig.ACSeriesRow acSeries, atriumDB.ProcessRow process, bool adHoc, atriumDB.ActivityRow prevAc, ConnectorType action, Stack <ParentChildStep> _flowQ, int revId, ACEngine.RevType revType, string conversationIndex, DataRow contextRow)
        {
            //if (_flowQ != null)
            //    flowQ = _flowQ;
            if (myACE != null)
            {
                throw new AtriumException("You cannot enter more than one activity at a time on a file.");
            }

            ConnectorType ct;

            if (action == ConnectorType.Reply | action == ConnectorType.ReplyAll | action == ConnectorType.Forward)
            {
                ct = action;
            }
            else
            {
                ct = ConnectorType.NextStep;
            }
            myACE = new ACEngine(FM, acDate, acSeries, process, adHoc, conversationIndex, prevAc, ct, _flowQ, revId, revType, contextRow);
            return(myACE);
        }
コード例 #10
0
        //not used CJW 2014-2-19
        //public Dictionary<int, CurrentFlow> NextSteps(atriumDB.ActivityRow ar)
        //{
        //    currentFlows = new Dictionary<int, CurrentFlow>();

        //    atriumDB.ProcessRow pr = ar.ProcessRow;

        //    CurrentFlow ap = NextSteps(pr);

        //    if (ap.NextSteps.Count > 0)
        //        currentFlows.Add(pr.ProcessId, ap);

        //    return currentFlows;
        //}

        private CurrentFlow NextSteps(atriumDB.ProcessRow pr)
        {
            flowQ = null;
            fileProcesses.Clear();
            activeProcesses.Clear();
            foreach (atriumDB.ProcessRow pr1 in myFM.CurrentFile.GetProcessRows())
            {
                fileProcesses.Add(pr1.ProcessId, pr1.SeriesId);
                if (pr1.Active)
                {
                    activeProcesses.Add(pr1.ProcessId, pr1.SeriesId);
                }
            }

            if (pr == null)
            {
                throw new Exception("Activity process is null.  Contact the system administrator");
            }

            CurrentFlow ap;

            if (!pr.Active)//& currentFlows.Count>0
            {
                atriumDB.ProcessRow prparent = FM.GetProcess().ParentProcess(pr, true);
                if (prparent == null)
                {
                    ap         = new CurrentFlow();
                    ap.Process = pr;
                }
                else
                {
                    ap = currentFlows[prparent.ProcessId];
                }
            }
            else
            {
                ap         = new CurrentFlow();
                ap.Process = pr;
            }
            topAP     = ap;
            currentAP = ap;

            foreach (atriumDB.ActivityRow ar in pr.GetActivityRows())
            {
                ActivityConfig.ACSeriesRow asr = myFM.AtMng.acMng.DB.ACSeries.FindByACSeriesId(ar.ACSeriesId);
                NextSteps(currentAP, asr, ar);

                /*
                 * foreach (ActivityConfig.ACDependencyRow acdr in asr.GetACDependencyRowsByPreviousSteps())
                 * {
                 *  //do not remove step if it was enabled
                 *  if (!acdr.Enable & ap.NextSteps.Contains(acdr.ACSeriesRowByPreviousSteps))
                 *      ap.NextSteps.Remove(acdr.ACSeriesRowByPreviousSteps);
                 * }
                 */
            }

            //a bit of a kluge
            //check for branch only and remove
            int removeid = 0;

            foreach (NextStep ns in ap.NextSteps.Values)
            {
                if (ns.acs.StepType == (int)StepType.Branch && ns.Children.NextSteps.Count == 0)
                {
                    removeid = ns.acs.ACSeriesId;
                }
            }
            if (removeid != 0)
            {
                ap.NextSteps.Remove(removeid);
            }

            return(ap);
        }
コード例 #11
0
        public void CreateAC(int acseriesId, DateTime acDate, string ctxTable, int ctxId, int revId, ACEngine.RevType revType)
        {
            //get context process
            atriumDB.ProcessRow pr = null;
            if (ctxTable != null)
            {
                foreach (atriumDB.ProcessContextRow pcr in FM.DB.ProcessContext)
                {
                    if (pcr.LinkTable == ctxTable && pcr.LinkId == ctxId)
                    {
                        pr = pcr.ProcessRow;
                        break;
                    }
                }
            }
            ActivityConfig.ACSeriesRow acsr = FM.AtMng.acMng.DB.ACSeries.FindByACSeriesId(acseriesId);

            AcSeriesOKToAdd.Clear();
            Dictionary <int, atriumBE.CurrentFlow> activeProcesses = this.Workflow.NextSteps();

            Workflow.EnabledProcesses();
            Workflow.AvailableProcesses();

            if (AcSeriesOKToAdd.Contains(acsr))
            {
                //atriumDB.ActivityRow prevAc = null;
                NextStep ns = null;
                foreach (atriumBE.CurrentFlow ap in activeProcesses.Values)
                {
                    ns = LoadNextSteps(acseriesId, ap);
                    //test for process match
                    if (ns != null)
                    {
                        bool match = TestForProcessMatch(pr, ns.prevAc);

                        if (ns != null && ns.prevAc != null && match)
                        {
                            break;
                        }
                    }
                }

                if (ns == null || ns.prevAc == null)
                {
                    activeProcesses = this.Workflow.EnabledProcesses();
                    foreach (atriumBE.CurrentFlow ap in activeProcesses.Values)
                    {
                        ns = LoadNextSteps(acseriesId, ap);
                        if (ns != null)
                        {
                            bool match = TestForProcessMatch(pr, ns.prevAc);
                            if (ns != null && ns.prevAc != null && match)
                            {
                                break;
                            }
                        }
                    }
                }

                this.DoAutoAC(ns, acsr, revId, revType, acDate);
            }
            else
            {
                throw new AtriumException("You cannot perform this activity on this file");
            }
        }
コード例 #12
0
        internal void DoACAllSteps(atriumDB.ActivityRow prevAC, ActivityConfig.ACSeriesRow asr, int revId, ACEngine.RevType revType, DateTime acDate, out ACEngine ace, out atriumDB.ActivityRow newAC, Stack <ParentChildStep> _flowQ, string conversationIndex)
        {
            atriumDB.ProcessRow pr = null;
            if (prevAC != null)
            {
                pr = prevAC.ProcessRow;
            }
            ace     = Add(acDate, asr, pr, false, prevAC, ConnectorType.NextStep, _flowQ, revId, revType, conversationIndex, null);
            ace.ctx = ctx;

            newAC = ace.NewActivity;
            if (ace.HasRel0)
            {
                ace.DoStep(ACEngine.Step.RelatedFields0, true);
            }
            if (ace.HasRel1)
            {
                ace.DoStep(ACEngine.Step.RelatedFields1, true);
            }
            if (ace.HasRel2)
            {
                ace.DoStep(ACEngine.Step.RelatedFields2, true);
            }
            if (ace.HasRel3)
            {
                ace.DoStep(ACEngine.Step.RelatedFields3, true);
            }
            if (ace.HasRel4)
            {
                ace.DoStep(ACEngine.Step.RelatedFields4, true);
            }
            if (ace.HasRel5)
            {
                ace.DoStep(ACEngine.Step.RelatedFields5, true);
            }
            if (ace.HasRel6)
            {
                ace.DoStep(ACEngine.Step.RelatedFields6, true);
            }
            if (ace.HasRel7)
            {
                ace.DoStep(ACEngine.Step.RelatedFields7, true);
            }
            if (ace.HasRel8)
            {
                ace.DoStep(ACEngine.Step.RelatedFields8, true);
            }
            if (ace.HasRel9)
            {
                ace.DoStep(ACEngine.Step.RelatedFields9, true);
            }
            if (ace.HasTimeline)
            {
                ace.DoStep(ACEngine.Step.Timeline, true);
            }

            if (ace.HasDoc & !SkipDoc)
            {
                docDB.DocumentRow dr = (docDB.DocumentRow)ace.relTables["Document0"][0].Row;

                //if (TemplateCode != null) //only set the template if it is provided
                //    dr.templateCode = TemplateCode;

                ace.DocumentDefaults(revId != 0);
                // if (dr.DocContentRow == null)
                //FM.GetDocMng().GetDocContent().Load(dr.DocRefId, dr.CurrentVersion);

                Doc0 = dr.DocContentRow.ContentsAsText;
            }
            else
            {
                ace.FM.GetDocMng().DB.RejectChanges();
                ace.relTables.Remove("Document0");

                ace.NewActivity.SetDocIdNull();
            }
            if (ace.HasBilling)
            {
                ace.DoStep(ACEngine.Step.Billing, true);
            }
        }
コード例 #13
0
        /// <summary>
        /// Moves a process to another file
        /// </summary>
        /// <param name="pr">process to move</param>
        /// <param name="toFile">Target file</param>
        private void Move(atriumDB.ProcessRow pr, int toFileId, atriumDB.ActivityRow splitOn)
        {
            FileManager toFM = myA.AtMng.GetFile(toFileId);

            //need to check permissions on target file
            if (!toFM.GetProcess().CanAdd(toFM.CurrentFile))
            {
                throw new AtriumException(Properties.Resources.YouNeedAddProcessPermissionOnTheDestinationFile);
            }


            CheckMove(pr);

            //this needs to be here
            myA.GetActivity().LoadByProcessId(pr.ProcessId);

            //sort activities by thread
            atriumDB.ActivityRow[] ars   = (atriumDB.ActivityRow[])myA.DB.Activity.Select("processid=" + pr.ProcessId.ToString(), "ConversationIndex");
            atriumDB.ProcessRow    newPr = null;
            int  oldFileid = pr.FileId;
            bool moveProc  = false;

            if (splitOn != null && ars.Length > 1 && ars[0].ActivityId != splitOn.ActivityId)
            {
                //create new process for split thread
                newPr = (atriumDB.ProcessRow)Add(myA.CurrentFile);

                newPr.Active = pr.Active;
                //newPr.CurrentStep = pr.CurrentStep;
                newPr.NameE    = pr.NameE;
                newPr.NameF    = pr.NameF;
                newPr.SeriesId = pr.SeriesId;
                //newPr.Thread = pr.Thread;
            }
            else
            {
                pr.FileId = toFileId;

                pr.Thread = pr.ProcessId.ToString();
                moveProc  = true;
                foreach (atriumDB.ProcessContextRow pcr in pr.GetProcessContextRows())
                {
                    pcr.FileId = toFileId;
                }
            }

            //move all activties on process
            foreach (atriumDB.ActivityRow par in pr.GetActivityRows())
            {
                if (splitOn == null || par.ConversationIndex.CompareTo(splitOn.ConversationIndex) >= 0)
                {
                    myA.GetActivity()._Move(par, toFileId);

                    if (newPr != null)
                    {
                        par.ProcessId = newPr.ProcessId;
                    }
                }
            }

            if (moveProc)
            {
                FileManager         fmOld = myA.AtMng.GetFile(oldFileid);
                atriumDB.ProcessRow prOld = fmOld.DB.Process.FindByProcessId(pr.ProcessId);
                if (prOld != null)
                {
                    prOld.Delete();
                    prOld.AcceptChanges();
                }
            }
        }
コード例 #14
0
 internal atriumDB.ProcessRow[] FindAllProcess(atriumDB.ProcessRow pr1, int currentProcid)
 {
     return((atriumDB.ProcessRow[])myA.DB.Process.Select("(ProcessId=" + pr1.ProcessId.ToString() + " or Thread like '" + pr1.Thread + "-%') and processid<>" + currentProcid.ToString()));
 }