コード例 #1
0
        public ResponseResult SaveProcessFilePool([FromBody] ProcessFilePool entity)
        {
            var result = ResponseResult.Default();

            try
            {
                var wfService = new WorkflowService();
                entity.XmlContent = PaddingContentWithRightSpace(entity.XmlContent);
                wfService.SaveProcessFilePool(entity);

                result = ResponseResult.Success(LocalizeHelper.GetDesignerMessage("wf2xmlcontroller.saveprocessfile.success"));
            }
            catch (System.Exception ex)
            {
                result = ResponseResult.Error(LocalizeHelper.GetDesignerMessage("wf2xmlcontroller.saveprocessfile.error", ex.Message));
            }
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// 保存泳道流程XML文件
        /// </summary>
        /// <param name="entity">泳道实体列表</param>
        public void SaveProcessFilePool(ProcessFilePool entity)
        {
            var pm = new ProcessManager();

            pm.SaveProcessFilePool(entity);
        }
コード例 #3
0
        /// <summary>
        /// 保存泳道流程
        /// </summary>
        /// <param name="file">泳道流程实体</param>
        internal void SaveProcessFilePool(ProcessFilePool file)
        {
            var packageProcessClient  = file.ProcessEntityList.Single(a => a.PackageType.Value == (short)PackageTypeEnum.MainProcess);
            var poolProcessListClient = file.ProcessEntityList.Where(a => a.PackageType.Value == (short)PackageTypeEnum.PoolProcess).ToList();
            var packageProcessDB      = GetByVersion(packageProcessClient.ProcessGUID, packageProcessClient.Version);

            var session = SessionFactory.CreateSession();

            try
            {
                session.BeginTrans();
                if (packageProcessDB == null)
                {
                    //插入主流程,然后插入泳道流
                    var packageGUID = Guid.NewGuid().ToString();
                    packageProcessClient.XmlContent      = file.XmlContent;
                    packageProcessClient.CreatedDateTime = System.DateTime.Now;
                    SetProcessStartEndType(packageProcessClient, file.XmlContent);

                    var newPackageProcessID = Insert(session.Connection, packageProcessClient, session.Transaction);
                    foreach (var pool in poolProcessListClient)
                    {
                        pool.PackageProcessID = newPackageProcessID;
                        pool.XmlContent       = file.XmlContent;
                        SetProcessStartEndType(pool, file.XmlContent);
                        Insert(session.Connection, pool, session.Transaction);
                    }
                }
                else
                {
                    var        poolProcessListDataBase = GetPoolProcessList(packageProcessDB.ID);
                    List <int> poolProcessIDs          = new List <int>();
                    foreach (var pool in poolProcessListDataBase)
                    {
                        //多泳道流程变为单一流程
                        if (poolProcessListClient.Count() == 0)
                        {
                            //删除数据库中所有泳道流程
                            poolProcessIDs.Add(pool.ID);
                        }
                        else
                        {
                            var item = poolProcessListClient.Find(a => a.ProcessGUID == pool.ProcessGUID && a.Version == pool.Version);
                            if (item == null)
                            {
                                //删除ID列表
                                poolProcessIDs.Add(pool.ID);
                            }
                        }
                    }

                    //删除图形中不含有的泳道流程
                    if (poolProcessIDs.Count() > 0)
                    {
                        DeletePoolProcess(session.Connection, packageProcessDB.ID, poolProcessIDs, session.Transaction);
                    }

                    //如果是泳道流程变为单一流程,更新PackageType和PackageProcessID
                    if (poolProcessListClient.Count() == 0)
                    {
                        packageProcessDB.PackageType      = null;
                        packageProcessDB.PackageProcessID = null;
                    }

                    //更新主流程,更新或插入泳道流
                    packageProcessDB.PackageType         = (byte)PackageTypeEnum.MainProcess;
                    packageProcessDB.XmlContent          = file.XmlContent;
                    packageProcessDB.LastUpdatedDateTime = System.DateTime.Now;
                    SetProcessStartEndType(packageProcessDB, file.XmlContent);
                    Update(session.Connection, packageProcessDB, session.Transaction);

                    foreach (var pool in poolProcessListClient)
                    {
                        var child = GetByVersion(pool.ProcessGUID, pool.Version, false);
                        if (child == null)
                        {
                            //新增泳道流程
                            pool.PackageType      = (byte)PackageTypeEnum.PoolProcess;
                            pool.PackageProcessID = packageProcessDB.ID;
                            pool.XmlContent       = file.XmlContent;
                            pool.CreatedDateTime  = System.DateTime.Now;
                            SetProcessStartEndType(pool, file.XmlContent);
                            Insert(session.Connection, pool, session.Transaction);
                        }
                        else
                        {
                            //更新泳道流程
                            child.ProcessName         = pool.ProcessName;
                            child.ProcessCode         = pool.ProcessCode;
                            child.Description         = pool.Description;
                            child.PackageType         = (byte)PackageTypeEnum.PoolProcess;
                            child.XmlContent          = file.XmlContent;
                            child.LastUpdatedDateTime = System.DateTime.Now;
                            SetProcessStartEndType(child, file.XmlContent);
                            Update(session.Connection, child, session.Transaction);
                        }
                    }
                }
                session.Commit();
            }
            catch (System.Exception ex)
            {
                session.Rollback();
                throw;
            }
            finally
            {
                session.Dispose();
            }
        }