/// <summary> /// 保存流程实例 /// </summary> /// <param name="instance">流程实例</param> /// <remarks> /// 判断对应的 K2流程是否已启动,否则先启动 K2实例,然后保存 /// </remarks> /// <returns></returns> public override bool SaveWorkflow(WorkflowInstance instance) { if (!string.IsNullOrEmpty(instance.InstanceNo)) { var isInstExists = WorkflowInstanceFactory.IsExists<K2WorkflowInstance>(instance.InstanceNo); if (isInstExists) { // 如果流程已存在,则只更新相关字段 bool isUpdateInstance = DbEngine.SaveWorkflow(instance); return isUpdateInstance; } } if (string.IsNullOrEmpty(instance.InstanceNo)) { instance.InstanceNo = WorkflowInstance.GetNewInstanceNo(); } instance.CreatorId = CurrentUser.Id; instance.Creator = CurrentUser.Name; instance.CreatorDeptId = CurrentUser.DeptId; var dept = SecurityContext.Provider.GetOrganization(CurrentUser.DeptId); instance.CreatorDeptName = (dept == null ? "" : dept.FullName); instance.StartTime = DateTime.Now; instance.Status = InstanceStatus.Running; if (string.IsNullOrEmpty(instance.CurrentActivity)) { var currentActivity = instance.GetFirstActi(); if (currentActivity != null) { instance.CurrentActivity = currentActivity.Name; } } //启动 k2流程办理 bool isServerStart = ServerEngine.SaveWorkflow(instance); if (!isServerStart) return false; #region 新增初始办理流程信息 var workItem = WorkflowItemFactory.Create<K2WorkflowItem>(); workItem.TaskId = 1; workItem.InstanceNo = instance.InstanceNo; workItem.PartId = instance.CreatorId; workItem.PartName = instance.Creator; workItem.PartDeptId = instance.CreatorDeptId; workItem.PartDeptName = instance.CreatorDeptName; workItem.ReceTime = DateTime.Now; workItem.TaskStatus = TaskStatus.Waiting; workItem.CurrentActi = instance.CurrentActivity; instance.CurrentWorkItem = workItem; #endregion //启动 本地流程实例的保存 bool isDbStart = DbEngine.SaveWorkflow(instance); return isDbStart; }