public string GetWorkItemDisplayText(SysWorkItem wi, SysProcessInstance pi, SysActivityInstance ai)
        {
            string str6;

            try
            {
                SysActivity activity = ai.Activity;
                if (activity == null)
                {
                    throw new ApplicationException(string.Format("活动实例:{0}找不到对应活动", ai.ActivityInstanceId));
                }
                SysProcess process = pi.Process;
                if (process == null)
                {
                    throw new ApplicationException(string.Format("活动:{0}找不到对应流程", activity.ActivityId));
                }
                string activityName = activity.ActivityName;
                string processName  = process.ProcessName;
                if (process.ProcessCategory == 2)
                {
                    return(string.Format("[{0}][{1}]{2}", processName, activityName, pi.FormInstance.FormTitle));
                }
                EntityCache cache             = new EntityCache(this._manager);
                SysEntity   processEntity     = process.ProcessEntity;
                string      objectDisplayName = cache.GetObjectDisplayName(processEntity, wi.RelativeObjectId.Value);
                str6 = string.Format("[{0}][{1}]{2}", processName, activityName, objectDisplayName);
            }
            catch (Exception exception)
            {
                throw exception;
            }
            return(str6);
        }
Beispiel #2
0
        public List <SysActivity> GetNextActivityList(string processName)
        {
            List <SysActivity> list2;

            try
            {
                List <SysActivity> list         = new List <SysActivity>();
                SysProcess         processCache = this._processCache.GetProcessCache(processName);
                if (processCache == null)
                {
                    throw new ApplicationException(string.Format("流程名称[{0}]不正确", processName));
                }
                SysActivity activity = processCache.Activities.FirstOrDefault <SysActivity>(p => p.ActivityType == 1);
                if (activity != null)
                {
                    list = (from p in activity.FromTransitions select p.PostActivity).ToList <SysActivity>();
                }
                list2 = list;
            }
            catch (Exception exception)
            {
                AppLogHelper.Error(string.Format("GetNextActivityList,processName=[{0}]失败", processName), exception);
                throw exception;
            }
            return(list2);
        }
Beispiel #3
0
        public int StartProcess(string processName, int startUserId, int relativeObjectId)
        {
            int num2;

            try
            {
                int num;
                ProcessInstanceCacheFactory runtimeContext = new ProcessInstanceCacheFactory(this._context);
                SysProcess    processCache = runtimeContext.PCacheFactory.GetProcessCache(processName);
                ProcessEngine engine       = new ProcessEngine(runtimeContext, processCache);
                if (processCache.ProcessCategory == 2)
                {
                    num = engine.StartFormProcess(startUserId, relativeObjectId);
                }
                else
                {
                    num = engine.StartProcess(startUserId, relativeObjectId);
                }
                num2 = num;
            }
            catch (Exception exception)
            {
                AppLogHelper.Error(string.Format("启动流程[{0}], obj={1}失败", processName, relativeObjectId), exception);
                throw exception;
            }
            return(num2);
        }
        private SysProcessInstance LoadProcessInstance(int processInstanceId)
        {
            SysProcessInstance pi = this._context.FindById <SysProcessInstance>(new object[] { processInstanceId });

            if (pi == null)
            {
                throw new ApplicationException("流程实例ID不正确");
            }
            if (pi.FormInstanceId.HasValue)
            {
                pi.FormInstance = this._context.FindById <SysFormInstance>(new object[] { pi.FormInstanceId });
                if (pi.FormInstance == null)
                {
                    throw new ApplicationException("流程实例关联表单实例不存在");
                }
            }
            SysProcess processCache = this._processCache.GetProcessCache(pi.ProcessId.Value);

            pi.Process = processCache;
            string condition = string.Format("ProcessInstanceId = {0}", pi.ProcessInstanceId);

            pi.ActivityInstances = this._context.Where <SysActivityInstance>(condition, new DbParameter[0]);
            foreach (SysActivityInstance instance2 in pi.ActivityInstances)
            {
                this.LoadActivityInstance(instance2, pi, processCache);
            }
            return(pi);
        }
Beispiel #5
0
        private List <SysEvent> parseSequence(EventContext[] any)
        {
            List <SysEvent> sequence = new List <SysEvent>();

            foreach (EventContext i in any)
            {
                if (i.process() != null)
                {
                    // event is process such as proc()
                    SysProcess proc = (SysProcess)VisitProcess(i.process());
                    sequence.Add(proc);
                }
                else if (i.channel() != null)
                {
                    // event is channel input or output
                    SysChannel channel = null;
                    if ((i.channel().channelOutput() != null) &&
                        (i.channel().channelOutput().ID() != null))
                    {
                        channel = new SysChannel(i.channel().ID().GetText(), SysChannel.Type.Output);
                        channel.Parameters.Add(i.channel().channelOutput().ID().GetText());
                    }
                    else if ((i.channel().channelInput() != null) &&
                             (i.channel().channelInput().ID() != null))
                    {
                        channel = new SysChannel(i.channel().ID().GetText(), SysChannel.Type.Input);
                        channel.Parameters.Add(i.channel().channelInput().ID().GetText());
                    }
                    sequence.Add(channel);
                }
            }
            return(sequence);
        }
        /// <summary>
        /// 初始化
        /// </summary>
        private void Initialize()
        {
            long?id = QueryString <long?>("id");

            SysProcess process = this.DataHelper.FindById <SysProcess>(id);

            if (process != null)
            {
                this.ProcessId = id.Value;
                if (!string.IsNullOrEmpty(process.ProcessName))
                {
                    if (!string.IsNullOrEmpty(process.ProcessVersion))
                    {
                        BindAndValidateData(process);
                    }
                    else
                    {
                        AddError(new Exception("流程版本内部错误,请重建流程"));
                    }
                }
                else
                {
                    AddError(new Exception("流程名称为空,请返回第一步配置"));
                }
            }
            else
            {
                AddError(new Exception("流程不存在"));
            }
            this.btnPublish.Visible = errorList.Count == 0;

            this.gcError.DataSource = errorList;
            this.gcError.DataBind();
        }
        public override void Execute(Queue <WorkflowMessage> queue)
        {
            this.JustCompleteCurrentAI();
            SysActivity activity = this.AI.Activity;
            SysProcess  process  = activity.Process;

            if (activity.ActivityType == 3)
            {
                this.CompleteNormalActivity(queue, process, activity);
            }
            else if (activity.ActivityType == 1)
            {
                this.CompleteStartActivity(queue, process, activity);
            }
            else if (activity.ActivityType == 2)
            {
                this.CompleteDecisionActivity(queue, process, activity);
            }
            else if (activity.ActivityType == 4)
            {
                this.CompleteEndActivity(queue, process, activity);
            }
            else
            {
                if (activity.ActivityType != 6)
                {
                    throw new ApplicationException("未知的活动类型");
                }
                this.CompleteApproveActivity(queue, process, activity);
            }
        }
        private void CompleteNormalActivity(Queue <WorkflowMessage> queue, SysProcess process, SysActivity activity)
        {
            if (activity.ExecType == 0)
            {
                new ActivityRemindHandler(base.PICacheFactory, base.PI, this.AI, ActivityRemindUseTimeType.ActivityEnd, null, null).Execute();
            }
            List <SysTransition> trans = process.Transitions.Where <SysTransition>(delegate(SysTransition t) {
                long?preActivityId = t.PreActivityId;
                long activityId    = activity.ActivityId;
                return((preActivityId.GetValueOrDefault() == activityId) && preActivityId.HasValue);
            }).ToList <SysTransition>();

            if (trans.Count <= 0)
            {
                throw new ApplicationException("没有后续的转换条件");
            }
            SysTransition nextTransition = this.GetNextTransition(trans);

            if (nextTransition == null)
            {
                throw new ApplicationException("所有后续连接线均不满足条件,流程无法继续");
            }
            SysActivityInstance ai   = this.CreatePostAcitivtyInstance(base.PI, nextTransition);
            WorkflowMessage     item = base.Engine.NewActivityInstanceCreatedMessage(ai);

            queue.Enqueue(item);
        }
        /// <summary>
        /// 初始化
        /// </summary>
        private void Initialize()
        {
            long?id = QueryString <long?>("id");

            SysProcess process = this.DataHelper.FindById <SysProcess>(id);

            if (process != null)
            {
                this.ProcessId           = id.Value;
                this.lblProcessName.Text = process.ProcessName;
                SysEntity processEntity = GetEntity(process.EntityId);
                if (processEntity == null)
                {
                    throw new Exception("流程实体为空");
                }
                this.lblProcessEntity.Text = processEntity.DisplayText;

                //hc.Text用于回发
                //hc.Value记录当前选中的活动,由前台选中某活动,或调用后台SelectActivity方法更新
                this.hc.Text     = this.ClientScript.GetPostBackEventReference(this.hc, "select");
                this.hcSave.Text = this.ClientScript.GetPostBackEventReference(this.hc, "partSave");


                AddHiddenAndFirstActivity();
                BindDropDown();
            }
            else
            {
                throw new Exception("参数不正确");
            }
        }
Beispiel #10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                //加载数据
                if (!string.IsNullOrEmpty(Request.QueryString["id"]))
                {
                    long ProcessId = long.Parse(Request.QueryString["id"]);
                    using (BizDataContext context = new BizDataContext())
                    {
                        SysProcess process = context.FindById <SysProcess>(ProcessId);
                        if (process != null)
                        {
                            this.lblProcessName.Text        = process.ProcessName;
                            this.lblProcessDescription.Text = process.ProcessDescription;
                            this.lblStatus.Text             = EnumHelper.GetDescription(typeof(ProcessState), process.ProcessStatus.Value);

                            this.gcProcessProxy.DataSource = context.Where <SysProcessProxy>(p => p.ProcessId == ProcessId).ToList();
                            this.gcProcessProxy.DataBind();
                        }
                    }
                    this.btnAdd.PostBackUrl = "~/SystemManagement/ProcessProxyAdd.aspx?ProcessId=" + Request.QueryString["id"];
                }
            }
        }
        /// <summary>
        /// 初始化
        /// </summary>
        private void Initialize()
        {
            long?id = QueryString <long?>("id");

            SysProcess process = this.DataHelper.FindById <SysProcess>(id);

            if (process != null && process.FormId != null)
            {
                this.ProcessId = id.Value;
                this.FormId    = process.FormId.Value;

                //hc.Text用于回发
                //hc.Value记录当前选中的活动,由前台选中某活动,或调用后台SelectActivity方法更新
                this.hc.Text = this.ClientScript.GetPostBackEventReference(this.hc, "select");

                //选中第一个活动
                var a = this.DataHelper.Set <SysActivity>()
                        .Where(p => p.ProcessId == this.ProcessId && p.ActivityType == (int)ActivityType.Approve)
                        .OrderBy(p => p.DisplayOrder).FirstOrDefault();
                SelectActivity(a);
            }
            else
            {
                throw new Exception("参数不正确");
            }
        }
Beispiel #12
0
 internal ProcessEngine(ProcessInstanceCacheFactory runtimeContext, SysProcess process)
 {
     this._context        = runtimeContext.Context;
     this._process        = process;
     this._piCacheFactory = runtimeContext;
     this._manager        = this._piCacheFactory.Manager;
     this._pi             = null;
 }
        private void LoadProcessParticipant(SysProcessParticipant pp, SysProcess p)
        {
            pp.Process           = p;
            pp.Param_Participant = p.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(i => i.ParticipantId == pp.Param_ParticipantId);
            string condition = string.Format("participantId = {0}", pp.ParticipantId);

            pp.ActivityParticipants = this._context.Where <SysActivityParticipant>(condition, new DbParameter[0]);
        }
        public override object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai)
        {
            SysProcess process = pi.Process;

            if (process.ProcessEntity == null)
            {
                throw new ApplicationException("流程实体为空");
            }
            SysOneMoreRelation relation = expr.Relation;

            if (relation == null)
            {
                throw new ApplicationException("表达式的关系为空");
            }
            if (!relation.ChildEntityId.HasValue)
            {
                throw new ApplicationException("表达式的子实体为空");
            }
            if (!process.EntityId.HasValue)
            {
                throw new ApplicationException("流程的实体为空");
            }
            if (expr.Relation.ChildEntityId.Value != process.EntityId.Value)
            {
                throw new ApplicationException("不正确的关系");
            }
            if (!relation.ParentEntityId.HasValue)
            {
                throw new ApplicationException("关系的父实体为空");
            }
            if (!relation.ChildFieldId.HasValue)
            {
                throw new ApplicationException("关系的ChildFieldId为空");
            }
            long local1 = relation.ChildFieldId.Value;

            if (relation.ChildField == null)
            {
                throw new ApplicationException("关系的对应字段为空");
            }
            SysEntity  processEntity = pi.Process.ProcessEntity;
            int        objectId      = pi.ObjectId;
            EntityData data          = cache.GetObject(processEntity, objectId);
            SysEntity  parentEntity  = relation.ParentEntity;

            if (data.ContainsKey(relation.ChildField.FieldName))
            {
                int num2 = Convert.ToInt32(data[relation.ChildField.FieldName]);
                if (num2 != 0)
                {
                    object obj2 = cache.GetObject(parentEntity, num2)[expr.Field.FieldName];
                    expr_cache.Add(expr, obj2);
                    return(obj2);
                }
            }
            throw new ApplicationException(string.Format("计算表达式时需要字段{0},但其未赋值或为空", relation.ChildField.FieldName));
        }
        private SysProcess GetStartUsedProcessByName(string processName)
        {
            SysProcess process = this._context.FirstOrDefault <SysProcess>(i => (i.ProcessName == processName) && (i.ProcessStatus == 1));

            if (process == null)
            {
                throw new ApplicationException(string.Format("找不到名称为[{0}]的已启用流程", processName));
            }
            return(process);
        }
        private SysProcess LoadProcess(long processId)
        {
            SysProcess p = this._context.FindById <SysProcess>(new object[] { processId });

            if (p == null)
            {
                throw new ApplicationException("流程ID不正确");
            }
            if (p.EntityId.HasValue)
            {
                p.ProcessEntity = this.GetEntityCache(p.EntityId.Value);
            }
            if (p.ActivityEntityId.HasValue)
            {
                p.ActivityEntity = this.GetEntityCache(p.ActivityEntityId.Value);
            }
            if (p.FormId.HasValue)
            {
                p.Form = this._context.FindById <SysForm>(new object[] { p.FormId });
            }
            string condition = string.Format("processId = {0}", processId);

            p.Activities          = this._context.Where <SysActivity>(condition, new DbParameter[0]);
            p.ProcessProxies      = this._context.Where <SysProcessProxy>(condition, new DbParameter[0]);
            p.ProcessParticipants = this._context.Where <SysProcessParticipant>(condition, new DbParameter[0]);
            p.ProcessReminds      = this._context.Where <SysProcessRemind>(condition, new DbParameter[0]);
            p.Expressions         = this._context.Where <SysExpression>(condition, new DbParameter[0]);
            p.Transitions         = this._context.Where <SysTransition>(condition, new DbParameter[0]);
            foreach (SysActivity activity in p.Activities)
            {
                this.LoadActivity(activity, p);
            }
            foreach (SysProcessProxy proxy in p.ProcessProxies)
            {
                proxy.Process = p;
            }
            foreach (SysProcessParticipant participant in p.ProcessParticipants)
            {
                this.LoadProcessParticipant(participant, p);
            }
            foreach (SysProcessRemind remind in p.ProcessReminds)
            {
                this.LoadProcessRemind(remind, p);
            }
            foreach (SysExpression expression in p.Expressions)
            {
                this.LoadExpression(expression, p);
            }
            foreach (SysTransition transition in p.Transitions)
            {
                LoadTransition(transition, p);
            }
            return(p);
        }
Beispiel #17
0
 internal ProcessEngine(ProcessInstanceCacheFactory runtimeContext, SysProcessInstance processInstance)
 {
     if (processInstance.Process == null)
     {
         processInstance.Process = runtimeContext.PCacheFactory.GetProcessCache(processInstance.ProcessId.Value);
     }
     this._context        = runtimeContext.Context;
     this._process        = processInstance.Process;
     this._piCacheFactory = runtimeContext;
     this._manager        = this._piCacheFactory.Manager;
     this._pi             = processInstance;
 }
Beispiel #18
0
        public int StartProcessAsync(string processName, int startUserId, int relativeObjectId, List <IApproveUser> nextApproveUserList)
        {
            SysProcess processCache = this._processCache.GetProcessCache(processName);

            if (processCache == null)
            {
                string errorInfo = string.Format("未找到流程name={0}", processName);
                AppLogHelper.Error(startUserId, errorInfo, relativeObjectId.ToString());
                throw new ApplicationException(errorInfo);
            }
            return(this.StartProcessAsync(processCache, startUserId, relativeObjectId, nextApproveUserList));
        }
 private static void LoadTransition(SysTransition t, SysProcess p)
 {
     t.Process      = p;
     t.PreActivity  = p.Activities.FirstOrDefault <SysActivity>(i => i.ActivityId == t.PreActivityId);
     t.PostActivity = p.Activities.FirstOrDefault <SysActivity>(i => i.ActivityId == t.PostActivityId);
     t.Expression   = p.Expressions.FirstOrDefault <SysExpression>(i => i.ExpressionId == t.ExpressionId);
     t.Expressions  = p.Expressions.Where <SysExpression>(delegate(SysExpression i) {
         long?transitionId = i.TransitionId;
         long num          = t.TransitionId;
         return((transitionId.GetValueOrDefault() == num) && transitionId.HasValue);
     }).ToList <SysExpression>();
 }
Beispiel #20
0
        private int StartProcessAsync(SysProcess process, int startUserId, int relativeObjectId, List <IApproveUser> nextApproveUserList)
        {
            int num3;

            try
            {
                int num = this._context.GetNextIdentity_Int(false);
                SysProcessInstance instance = new SysProcessInstance {
                    StartTime         = new DateTime?(DateTime.Now),
                    InstanceStatus    = 0,
                    ObjectId          = relativeObjectId,
                    ProcessId         = new long?(process.ProcessId),
                    ProcessInstanceId = num,
                    StartUserId       = new int?(startUserId)
                };
                if (process.ProcessCategory == 2)
                {
                    instance.FormInstanceId = new int?(relativeObjectId);
                    T_User user = this._context.FindById <T_User>(new object[] { startUserId });
                    if (user != null)
                    {
                        T_Department department = this._context.FindById <T_Department>(new object[] { user.Department_ID });
                        if (department != null)
                        {
                            instance.StartDeptId = new int?(department.Department_ID);
                        }
                    }
                }
                int num2 = this._context.GetNextIdentity_Int(false);
                SysWorkflowMessage msg = new SysWorkflowMessage {
                    ProcessId         = process.ProcessId,
                    ProcessInstanceId = num,
                    CreateTime        = DateTime.Now,
                    MessageId         = num2,
                    MessageType       = WorkflowMessageTypeEnum.StartingProcess,
                    OperationUserId   = startUserId,
                    State             = SysWorkflowMessageStateEnum.Inited
                };
                if ((nextApproveUserList != null) && (nextApproveUserList.Count > 0))
                {
                    msg.NextApproveUserList.AddRange(nextApproveUserList);
                }
                this.SaveWorkflowMessage(msg);
                this._context.Insert(instance);
                num3 = num;
            }
            catch (Exception exception)
            {
                AppLogHelper.Error(startUserId, exception, "启动流程[{0}]失败, 流程id={1}, 对象id={2}", new object[] { process.ProcessId, process.ProcessName, relativeObjectId });
                throw;
            }
            return(num3);
        }
Beispiel #21
0
        public int StartProcessAsync(long processId, int startUserId, int relativeObjectId)
        {
            SysProcess processCache = this._processCache.GetProcessCache(processId);

            if (processCache == null)
            {
                string errorInfo = string.Format("未找到流程,id={0}", processId);
                AppLogHelper.Error(startUserId, errorInfo, relativeObjectId.ToString());
                throw new ApplicationException(errorInfo);
            }
            return(this.StartProcessAsync(processCache, startUserId, relativeObjectId, null));
        }
 private void LoadExpression(SysExpression e, SysProcess p)
 {
     e.Process  = p;
     e.Activity = p.Activities.FirstOrDefault <SysActivity>(i => i.ActivityId == e.ActivityId);
     if (e.FieldId.HasValue)
     {
         e.Field = this.GetFieldCache(e.FieldId.Value);
     }
     if (e.RelationId.HasValue)
     {
         e.Relation = this.GetRelationCache(e.RelationId.Value);
     }
 }
        public override object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai)
        {
            SysProcess process        = pi.Process;
            SysEntity  activityEntity = process.ActivityEntity;

            if (activityEntity == null)
            {
                throw new ApplicationException("活动实体为空");
            }
            SysOneMoreRelation relation = expr.Relation;

            if (relation == null)
            {
                throw new ApplicationException("表达式的关系为空");
            }
            if (!relation.ChildEntityId.HasValue)
            {
                throw new ApplicationException("表达式的子实体为空");
            }
            if (!process.ActivityEntityId.HasValue)
            {
                throw new ApplicationException("活动的实体为空");
            }
            if (expr.Relation.ChildEntityId.Value != process.ActivityEntityId.Value)
            {
                throw new ApplicationException("不正确的关系");
            }
            if (!relation.ParentEntityId.HasValue)
            {
                throw new ApplicationException("关系的父实体为空");
            }
            if (!relation.ChildFieldId.HasValue)
            {
                throw new ApplicationException("关系的ChildFieldId为空");
            }
            long local1 = relation.ChildFieldId.Value;

            if (relation.ChildField == null)
            {
                throw new ApplicationException("关系的对应字段为空");
            }
            int        activityInstanceId = ai.ActivityInstanceId;
            EntityData data         = cache.GetObject(activityEntity, activityInstanceId);
            SysEntity  parentEntity = relation.ParentEntity;
            int        num2         = Convert.ToInt32(data[relation.ChildField.FieldName]);
            object     obj2         = cache.GetObject(parentEntity, num2)[expr.Field.FieldName];

            expr_cache.Add(expr, obj2);
            return(obj2);
        }
Beispiel #24
0
        /// <summary>
        /// 初始化
        /// </summary>
        private void Initialize()
        {
            var formList = this.DataHelper.Set <SysForm>().Where(p => p.State == (int)FormState.StartUsed).ToList();

            this.ddlForm.DataSource = formList;
            this.ddlForm.DataBind();

            long?id = QueryString <long?>("id");

            if (id == null)
            {
                this.txtProcessName.SetValue(null);
                this.ddlForm.SetValue(null);

                this.ProcessId = this.DataHelper.GetNextIdentity();
            }
            else
            {
                SysProcess process = this.DataHelper.FindById <SysProcess>(id);
                if (process != null)
                {
                    //不是“新增”状态,需要复制一份
                    if (process.ProcessStatus != (int)ProcessState.Created)
                    {
                        FormProcessPublishHelper helper = new FormProcessPublishHelper(process);
                        SysProcess newProcess           = helper.CopyProcess();

                        this.ProcessId           = newProcess.ProcessId;
                        this.txtProcessName.Text = newProcess.ProcessName;
                        this.ddlForm.SetValue(newProcess.FormId);
                    }
                    else
                    {
                        this.ProcessId           = id.Value;
                        this.txtProcessName.Text = process.ProcessName;
                        this.ddlForm.SetValue(process.FormId);
                    }
                }
                else
                {
                    throw new Exception("参数不正确");
                }
            }

            this.hc.Value = this.ProcessId.ToString();
            this.hc.Text  = this.ClientScript.GetPostBackEventReference(this.hc, "refresh");

            BindGrid();
            BindDropDown();
        }
 /// <summary>
 /// 启用活动
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void btnStart_Click(object sender, EventArgs e)
 {
     try
     {
         long?      processId            = (sender as LinkButton).CommandArgument.ToLongNullable();
         SysProcess process              = this.DataHelper.FindById <SysProcess>(processId);
         FormProcessPublishHelper helper = new FormProcessPublishHelper(process);
         helper.StartProcess();
         BindGrid();
     }
     catch (Exception ex)
     {
         this.AjaxAlert(ex);
     }
 }
        /// <summary>
        /// 发布
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnPublish_Click(object sender, EventArgs e)
        {
            try
            {
                SysProcess process = this.DataHelper.FindById <SysProcess>(this.ProcessId);
                FormProcessPublishHelper helper = new FormProcessPublishHelper(process);
                helper.Publish();

                this.AjaxAlertAndRedirect("发布成功", "FormProcessQuery.aspx");
            }
            catch (Exception ex)
            {
                this.AjaxAlertAndEnableButton(ex);
            }
        }
Beispiel #27
0
        public int StartProcess(string processName, int startUserId, int relativeObjectId, List <IApproveUser> nextApproveUserList)
        {
            int num2;

            try
            {
                ProcessInstanceCacheFactory runtimeContext = new ProcessInstanceCacheFactory(this._context);
                SysProcess processCache = runtimeContext.PCacheFactory.GetProcessCache(processName);
                num2 = new ProcessEngine(runtimeContext, processCache).StartProcess(startUserId, relativeObjectId, nextApproveUserList);
            }
            catch (Exception exception)
            {
                AppLogHelper.Error(string.Format("启动流程[{0}], obj={1}失败", processName, relativeObjectId), exception);
                throw exception;
            }
            return(num2);
        }
        public SysProcess GetProcessCacheByActivity(long activityId, out SysActivity activity)
        {
            Func <SysActivity, bool> predicate = null;
            SysActivity activity2 = this._context.FindById <SysActivity>(new object[] { activityId });

            if ((activity2 == null) || !activity2.ProcessId.HasValue)
            {
                throw new ApplicationException("活动ID不正确");
            }
            SysProcess processCache = this.GetProcessCache(activity2.ProcessId.Value);

            if (predicate == null)
            {
                predicate = p => p.ActivityId == activityId;
            }
            activity = processCache.Activities.FirstOrDefault <SysActivity>(predicate);
            return(processCache);
        }
 private void ExecuteForAuto(SysActivity activity, SysProcess process)
 {
     foreach (SysActivityOperation operation in
              (from a in activity.ActivityOperations.Where <SysActivityOperation>(delegate(SysActivityOperation p)
     {
         long?activityId = p.ActivityId;
         long num = activity.ActivityId;
         return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
     })
               orderby a.OperationId
               select a).ToList <SysActivityOperation>())
     {
         if (operation.OperationType != 2)
         {
             throw new ApplicationException("目前只支持Python脚本");
         }
         base.Manager.ExecutePython(base.PI, operation.JScriptText);
     }
 }
        public override void Execute(Queue <WorkflowMessage> queue)
        {
            SysActivity activity = this.AI.Activity;
            SysProcess  process  = activity.Process;

            if (((activity.ActivityType == 3) || (activity.ActivityType == 1)) || (activity.ActivityType == 6))
            {
                if (activity.ExecType == 0)
                {
                    new ActivityRemindHandler(base.PICacheFactory, base.PI, this.AI, ActivityRemindUseTimeType.ActivityStart, null, null).Execute();
                    this.ExecuteForManual(activity, process, queue);
                }
                else
                {
                    if (activity.ExecType != 1)
                    {
                        throw new ApplicationException("未知的活动执行类型");
                    }
                    base.Manager.ExecutePython(base.PI, activity.JScriptText);
                    this.ExecuteForAuto(activity, process);
                    WorkflowMessage item = base.Engine.NewCompleteActivityMessage(this.AI);
                    queue.Enqueue(item);
                }
            }
            else if (activity.ActivityType == 2)
            {
                this.CopyActivityInstanceData();
                this.CalDecisionValue();
                WorkflowMessage message2 = base.Engine.NewCompleteActivityMessage(this.AI);
                queue.Enqueue(message2);
            }
            else
            {
                if (activity.ActivityType != 4)
                {
                    throw new ApplicationException("未知活动类型");
                }
                base.Manager.ExecutePython(base.PI, activity.JScriptText);
                this.ExecuteForAuto(activity, process);
                WorkflowMessage message3 = base.Engine.NewCompleteActivityMessage(this.AI);
                queue.Enqueue(message3);
            }
        }