Example #1
0
        /// <summary>
        /// 寻找该节点执行人
        /// </summary>
        /// <param name="wfruntime"></param>
        /// <returns></returns>
        private string GetMakerList(IWF_Runtime wfruntime)
        {
            try
            {
                string makerList = "";
                if (wfruntime.runtimeModel.nextNodeId == "-1")
                {
                    throw (new Exception("无法寻找到下一个节点"));
                }
                if (wfruntime.runtimeModel.nextNodeType == 0)//如果是会签节点
                {
                    List <string> _nodelist  = wfruntime.GetCountersigningNodeIdList(wfruntime.runtimeModel.nextNodeId);
                    string        _makerList = "";
                    foreach (string item in _nodelist)
                    {
                        _makerList = GetMakerList(wfruntime.runtimeModel.nodeDictionary[item], wfruntime.runtimeModel.processId);
                        if (_makerList == "-1")
                        {
                            throw (new Exception("无法寻找到会签节点的审核者,请查看流程设计是否有问题!"));
                        }
                        else if (_makerList == "1")
                        {
                            throw (new Exception("会签节点的审核者不能为所有人,请查看流程设计是否有问题!"));
                        }
                        else
                        {
                            if (makerList != "")
                            {
                                makerList += ",";
                            }
                            makerList += _makerList;
                        }
                    }
                }
                else
                {
                    makerList = GetMakerList(wfruntime.runtimeModel.nextNode, wfruntime.runtimeModel.processId);
                    if (makerList == "-1")
                    {
                        throw (new Exception("无法寻找到节点的审核者,请查看流程设计是否有问题!"));
                    }
                }

                return(makerList);
            }
            catch
            {
                throw;
            }
        }
Example #2
0
        /// <summary>
        /// 创建一个实例
        /// </summary>
        /// <param name="processId">进程GUID</param>
        /// <param name="schemeInfoId">模板信息ID</param>
        /// <param name="wfLevel"></param>
        /// <param name="code">进程编号</param>
        /// <param name="customName">自定义名称</param>
        /// <param name="description">备注</param>
        /// <param name="frmData">表单数据信息</param>
        /// <returns></returns>
        public bool CreateInstance(Guid processId, Guid schemeInfoId, WFProcessInstance WFProcessInstance, string frmData = null)
        {
            try
            {
                WFSchemeInfo    WFSchemeInfo    = _unitWork.FindSingle <WFSchemeInfo>(u => u.Id == schemeInfoId);
                WFSchemeContent WFSchemeContent = _unitWork.FindSingle <WFSchemeContent>(u =>
                                                                                         u.SchemeInfoId == schemeInfoId && u.SchemeVersion == WFSchemeInfo.SchemeVersion);

                WF_RuntimeInitModel wfRuntimeInitModel = new WF_RuntimeInitModel()
                {
                    schemeContent = WFSchemeContent.SchemeContent,
                    currentNodeId = "",
                    frmData       = frmData,
                    processId     = processId
                };
                IWF_Runtime wfruntime = null;

                if (frmData == null)
                {
                    throw new Exception("自定义表单需要提交表单数据");
                }
                else
                {
                    wfruntime = new WF_Runtime(wfRuntimeInitModel);
                }


                var user = AuthUtil.GetCurrentUser();
                #region 实例信息
                WFProcessInstance.ActivityId     = wfruntime.runtimeModel.nextNodeId;
                WFProcessInstance.ActivityType   = wfruntime.GetStatus();//-1无法运行,0会签开始,1会签结束,2一般节点,4流程运行结束
                WFProcessInstance.ActivityName   = wfruntime.runtimeModel.nextNode.name;
                WFProcessInstance.PreviousId     = wfruntime.runtimeModel.currentNodeId;
                WFProcessInstance.SchemeType     = WFSchemeInfo.SchemeType;
                WFProcessInstance.FrmType        = WFSchemeInfo.FrmType;
                WFProcessInstance.EnabledMark    = 1;//正式运行
                WFProcessInstance.CreateUserId   = user.User.Id.ToString();
                WFProcessInstance.CreateUserName = user.User.Account;
                WFProcessInstance.MakerList      = (wfruntime.GetStatus() != 4 ? GetMakerList(wfruntime) : "");//当前节点可执行的人信息
                WFProcessInstance.IsFinish       = (wfruntime.GetStatus() == 4 ? 1 : 0);
                #endregion

                #region 实例模板
                var data = new
                {
                    SchemeContent = WFSchemeContent.SchemeContent,
                    frmData       = frmData
                };
                WFProcessScheme WFProcessScheme = new WFProcessScheme
                {
                    SchemeInfoId  = schemeInfoId,
                    SchemeVersion = WFSchemeInfo.SchemeVersion,
                    ProcessType   = 1,//1正式,0草稿
                    SchemeContent = data.ToJson().ToString()
                };
                #endregion

                #region 流程操作记录
                WFProcessOperationHistory processOperationHistoryEntity = new WFProcessOperationHistory();
                processOperationHistoryEntity.Content = "【创建】" + user.User.Name + "创建了一个流程进程【" + WFProcessInstance.Code + "/" + WFProcessInstance.CustomName + "】";
                #endregion

                #region 流转记录
                WFProcessTransitionHistory processTransitionHistoryEntity = new WFProcessTransitionHistory();
                processTransitionHistoryEntity.FromNodeId     = wfruntime.runtimeModel.currentNodeId;
                processTransitionHistoryEntity.FromNodeName   = wfruntime.runtimeModel.currentNode.name.Value;
                processTransitionHistoryEntity.FromNodeType   = wfruntime.runtimeModel.currentNodeType;
                processTransitionHistoryEntity.ToNodeId       = wfruntime.runtimeModel.nextNodeId;
                processTransitionHistoryEntity.ToNodeName     = wfruntime.runtimeModel.nextNode.name.Value;
                processTransitionHistoryEntity.ToNodeType     = wfruntime.runtimeModel.nextNodeType;
                processTransitionHistoryEntity.TransitionSate = 0;
                processTransitionHistoryEntity.IsFinish       = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0);
                #endregion

                #region 委托记录
                //List<WFDelegateRecord> delegateRecordEntitylist = GetDelegateRecordList(schemeInfoId, WFProcessInstance.Code, WFProcessInstance.CustomName, WFProcessInstance.MakerList);
                //WFProcessInstance.MakerList += delegateUserList;
                #endregion

                SaveProcess(wfruntime.runtimeModel, WFProcessInstance, WFProcessScheme, processOperationHistoryEntity, processTransitionHistoryEntity);

                return(true);
            }
            catch
            {
                throw;
            }
        }