示例#1
0
        /// <summary>
        /// 保存流程变量
        /// </summary>
        /// <param name="entity">流程实体</param>
        /// <returns>流程变量ID</returns>
        public int SaveProcessVariable(ProcessVariableEntity entity)
        {
            var pvm      = new ProcessVariableManager();
            var entityID = pvm.SaveVariable(entity);

            return(entityID);
        }
        /// <summary>
        /// 设置变量
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="entity">流程变量实体</param>
        /// <param name="trans">事务</param>
        /// <returns>实体ID</returns>
        internal int SaveVariable(IDbConnection conn, ProcessVariableEntity entity, IDbTransaction trans)
        {
            if (string.IsNullOrEmpty(entity.AppInstanceID) || entity.ProcessInstanceID == 0)
            {
                throw new WorkflowException(LocalizeHelper.GetEngineMessage("processvariablemanager.savevariable.error"));
            }

            int entityID = 0;
            var query    = new ProcessVariableQuery
            {
                VariableType      = EnumHelper.ParseEnum <ProcessVariableTypeEnum>(entity.VariableType.ToString()),
                ProcessInstanceID = entity.ProcessInstanceID,
                ActivityGUID      = entity.ActivityGUID,
                Name = entity.Name
            };

            var item = Query(conn, query, trans);

            if (item == null)
            {
                entityID = Insert(conn, entity, trans);
            }
            else
            {
                entityID = item.ID;
                Update(conn, entity, trans);
            }
            return(entityID);
        }
        /// <summary>
        /// 活动变量查询
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="processInstanceID">流程实例ID</param>
        /// <param name="activityGUID">活动GUID</param>
        /// <param name="name">变量名称</param>
        /// <param name="trans">事务</param>
        /// <returns>流程变量实体</returns>
        private ProcessVariableEntity GetVariableOfActivity(IDbConnection conn,
                                                            int processInstanceID,
                                                            string activityGUID,
                                                            string name,
                                                            IDbTransaction trans)
        {
            ProcessVariableEntity entity = null;
            var sql  = @"SELECT * FROM WfProcessVariable
                        WHERE VariableType=@variableType
                            AND ProcessInstanceID=@processInstanceID
                            AND ActivityGUID=@activityGUID 
                            AND Name=@name
                        ORDER BY ActivityGUID";
            var list = Repository.Query <ProcessVariableEntity>(sql,
                                                                new
            {
                variableType      = ProcessVariableTypeEnum.Process.ToString(),
                processInstanceID = processInstanceID,
                activityGUID      = activityGUID,
                name = name
            }).ToList();

            if (list != null && list.Count() > 0)
            {
                entity = list[0];
            }

            return(entity);
        }
        /// <summary>
        /// 流程变量查询
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="processInstanceID">流程实例ID</param>
        /// <param name="name">变量名称</param>
        /// <param name="trans">事务</param>
        /// <returns>流程变量实体</returns>
        private ProcessVariableEntity GetVariable(IDbConnection conn,
                                                  int processInstanceID,
                                                  string name,
                                                  IDbTransaction trans)
        {
            ProcessVariableEntity entity = null;
            string sql = @"SELECT * FROM WfProcessVariable
                           WHERE VariableType=@variableType
                                AND ProcessInstanceID=@newProcessInstanceID
                                AND Name=@newName
                           ORDER BY ID DESC";

            var list = Repository.Query <ProcessVariableEntity>(conn, sql,
                                                                new
            {
                variableType         = ProcessVariableTypeEnum.Process.ToString(),
                newProcessInstanceID = processInstanceID,
                newName = name
            },
                                                                trans
                                                                ).ToList();

            if (list.Count() > 0)
            {
                entity = list[0];
            }

            return(entity);
        }
        /// <summary>
        /// 流程变量数据插入
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="entity">流程变量实体</param>
        /// <param name="trans">事务</param>
        /// <returns>新实例ID</returns>
        private Int32 Insert(IDbConnection conn, ProcessVariableEntity entity, IDbTransaction trans)
        {
            int newID = Repository.Insert(conn, entity, trans);

            entity.ID = newID;

            return(newID);
        }
        /// <summary>
        /// 设置变量
        /// </summary>
        /// <param name="entity">流程变量实体</param>
        /// <returns>实体ID</returns>
        internal int SaveVariable(ProcessVariableEntity entity)
        {
            var entityID = 0;

            using (var session = SessionFactory.CreateSession())
            {
                entityID = SaveVariable(session.Connection, entity, session.Transaction);
            }
            return(entityID);
        }
        /// <summary>
        /// 流程变量查询
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="processInstanceID">流程实例ID</param>
        /// <param name="name">变量名称</param>
        /// <param name="trans">事务</param>
        /// <returns>流程变量实体</returns>
        private ProcessVariableEntity GetVariableOfProcess(IDbConnection conn,
                                                           int processInstanceID,
                                                           string name,
                                                           IDbTransaction trans)
        {
            ProcessVariableEntity entity = null;
            var sqlQuery = (from pv in Repository.GetAll <ProcessVariableEntity>()
                            where pv.VariableType == ProcessVariableTypeEnum.Process.ToString() &&
                            pv.ProcessInstanceID == processInstanceID &&
                            pv.Name == name
                            select pv
                            );
            var list = sqlQuery.OrderByDescending(pv => pv.ID).ToList <ProcessVariableEntity>();

            if (list != null && list.Count() > 0)
            {
                entity = list[0];
            }

            return(entity);
        }
        /// <summary>
        /// 流程变量查询
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="query">查询对象</param>
        /// <param name="trans">事务</param>
        /// <returns>流程变量实体</returns>
        private ProcessVariableEntity Query(IDbConnection conn,
                                            ProcessVariableQuery query,
                                            IDbTransaction trans)
        {
            ProcessVariableEntity entity = null;
            string sql = string.Empty;

            if (query.VariableType == ProcessVariableTypeEnum.Process)
            {
                entity = GetVariable(conn, query.ProcessInstanceID, query.Name, trans);
            }
            else if (query.VariableType == ProcessVariableTypeEnum.Activity)
            {
                if (string.IsNullOrEmpty(query.ActivityGUID))
                {
                    throw new WorkflowException(LocalizeHelper.GetEngineMessage("processvariablemanager.query.error"));
                }
                entity = GetVariable(conn, query.ProcessInstanceID, query.ActivityGUID, query.Name, trans);
            }
            return(entity);
        }
示例#9
0
        /// <summary>
        /// 流程变量查询
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="processInstanceID">流程实例ID</param>
        /// <param name="activityGUID">活动GUID</param>
        /// <param name="name">变量名称</param>
        /// <param name="trans">事务</param>
        /// <returns>流程变量实体</returns>
        private ProcessVariableEntity GetVariable(IDbConnection conn,
                                                  int processInstanceID,
                                                  string activityGUID,
                                                  string name,
                                                  IDbTransaction trans)
        {
            ProcessVariableEntity entity = null;
            string        sql            = @"SELECT * FROM WfProcessVariable
                           WHERE VariableType=@variableType
                                AND ProcessInstanceID=@newProcessInstanceID 
                                AND Name=@newName ";
            StringBuilder sqlB           = new StringBuilder(1024);

            sqlB.Append(sql);

            DynamicParameters parameters = new DynamicParameters();

            parameters.Add("@variableType", ProcessVariableTypeEnum.Activity.ToString());
            parameters.Add("@newProcessInstanceID", processInstanceID);
            parameters.Add("@newName", name);
            if (!string.IsNullOrEmpty(activityGUID))
            {
                sqlB.Append(" AND ActivityGUID = @newActivityGUID ");
                parameters.Add("@newActivityGUID", activityGUID);
            }
            sqlB.Append(" ORDER BY ID DESC ");

            var list = Repository.Query <ProcessVariableEntity>(conn, sqlB.ToString(),
                                                                parameters,
                                                                trans
                                                                ).ToList();

            if (list != null && list.Count() > 0)
            {
                entity = list[0];
            }

            return(entity);
        }
        /// <summary>
        /// 流程变量查询
        /// </summary>
        /// <param name="conn">链接</param>
        /// <param name="processInstanceID">流程实例ID</param>
        /// <param name="name">变量名称</param>
        /// <param name="trans">事务</param>
        /// <returns>流程变量实体</returns>
        private ProcessVariableEntity GetVariable(IDbConnection conn,
                                                  int processInstanceID,
                                                  string name,
                                                  IDbTransaction trans)
        {
            ProcessVariableEntity entity = null;
            //string sql = @"SELECT * FROM WfProcessVariable
            //               WHERE VariableType=@variableType
            //                    AND ProcessInstanceID=@newProcessInstanceID
            //                    AND Name=@newName
            //               ORDER BY ID DESC";

            //var list = Repository.Query<ProcessVariableEntity>(conn, sql,
            //    new
            //    {
            //        variableType = ProcessVariableTypeEnum.Process.ToString(),
            //        newProcessInstanceID = processInstanceID,
            //        newName = name
            //    },
            //    trans
            //    ).ToList();
            var sqlQuery = (from pv in Repository.GetAll <ProcessVariableEntity>(conn, trans)
                            where pv.VariableType == ProcessVariableTypeEnum.Process.ToString() &&
                            pv.ProcessInstanceID == processInstanceID &&
                            pv.Name == name
                            select pv
                            );
            var list = sqlQuery.OrderByDescending(pv => pv.ID).ToList <ProcessVariableEntity>();

            if (list.Count() > 0)
            {
                entity = list[0];
            }

            return(entity);
        }
示例#11
0
        /// <summary>
        /// 设置变量
        /// </summary>
        /// <param name="name">名称</param>
        /// <param name="value">数值</param>
        /// <param name="variableType">变量类型</param>
        public void SaveVariable(ProcessVariableTypeEnum variableType, string name, string value)
        {
            var pvm = new ProcessVariableManager();
            ProcessVariableEntity entity = null;

            if (variableType == ProcessVariableTypeEnum.Process)
            {
                //设置流程变量
                entity = new ProcessVariableEntity
                {
                    VariableType      = ProcessVariableTypeEnum.Process.ToString(),
                    AppInstanceID     = this.AppInstanceID,
                    ProcessGUID       = this.ProcessGUID,
                    ProcessInstanceID = this.ProcessInstanceID,
                    Name  = name,
                    Value = value,
                    LastUpdatedDateTime = System.DateTime.Now
                };
            }
            else if (variableType == ProcessVariableTypeEnum.Activity)
            {
                entity = new ProcessVariableEntity
                {
                    VariableType      = ProcessVariableTypeEnum.Activity.ToString(),
                    AppInstanceID     = this.AppInstanceID,
                    ProcessGUID       = this.ProcessGUID,
                    ProcessInstanceID = this.ProcessInstanceID,
                    ActivityGUID      = this.ActivityGUID,
                    ActivityName      = this.ActivityName,
                    Name  = name,
                    Value = value,
                    LastUpdatedDateTime = System.DateTime.Now
                };
            }
            pvm.SaveVariable(Session.Connection, entity, Session.Transaction);
        }
 /// <summary>
 /// 流程实例更新
 /// </summary>
 /// <param name="conn">链接</param>
 /// <param name="entity">流程变量实体</param>
 /// <param name="trans">事务</param>
 /// <returns>新实例ID</returns>
 private void Update(IDbConnection conn, ProcessVariableEntity entity,
                     IDbTransaction trans)
 {
     Repository.Update(conn, entity, trans);
 }