예제 #1
0
        /// <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;
        }