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); }
/// <summary> /// 保存泳道流程XML文件 /// </summary> /// <param name="entity">泳道实体列表</param> public void SaveProcessFilePool(ProcessFilePool entity) { var pm = new ProcessManager(); pm.SaveProcessFilePool(entity); }
/// <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(); } }