public static FlowActionRequest PostFlowActionStart( string clientRequestGuid, string bizDocumentGuid, string bizDocumentTypeCode, string userMemo, string bizDataPayloadJson, string optionalFlowActionDataJson, int userId, string userGuid, int flowTemplateId, string flowTemplateGuid, string flowTemplateJson, string code, string currentActivityGuid) { // 未通过合法性检查直接返回 if (!preValidate(clientRequestGuid)) { return(null); } var incomingReq = new FlowActionStart( clientRequestGuid, bizDocumentGuid, bizDocumentTypeCode, userMemo, bizDataPayloadJson, optionalFlowActionDataJson, userId, userGuid, flowTemplateId, flowTemplateGuid, flowTemplateJson, code, currentActivityGuid); return(saveToDB(incomingReq)); }
public FlowActionStartResult // start processActionRequest(FlowActionStart req) { using (var db = new EnouFlowInstanceContext()) { string failReason; var reqInDb = getReqInDB(req.flowActionRequestId, db); var flowInst = db.flowInstances.Create(); flowInst.flowTemplateId = req.concreteMetaObj.flowTemplateId; flowInst.flowTemplateJson = FlowTemplateDBHelper.getFlowTemplate( flowInst.flowTemplateId).flowTemplateJson; var flowDefHelper = new FlowTemplateDefHelper( flowInst.flowTemplateJson); flowInst.creatorId = req.concreteMetaObj.userId; flowInst.code = req.concreteMetaObj.code; flowInst.processingState = EnumFlowInstanceProcessingState. waitingActionRequest; flowInst.lifeState = EnumFlowInstanceLifeState.start; // 此处TimeStamp不能直接取Now, 因为启动流程时会几乎同时生成两个 // ActionRequest, 否则第二个ActionRequest的bizTimeStamp就会马上过期 flowInst.bizTimeStamp = flowInst.mgmtTimeStamp = req.createTime; flowInst.currentActivityGuid = req.concreteMetaObj.currentActivityGuid; flowInst.currentActivityName = flowDefHelper.getNodeFromGuid( flowInst.currentActivityGuid).name; flowInst.startActivityGuid = flowInst.currentActivityGuid; flowInst.bizDataPayloadJson = req.bizDataPayloadJson; flowInst.bizDocumentGuid = req.bizDocumentGuid; flowInst.bizDocumentTypeCode = req.bizDocumentTypeCode; db.flowInstances.Add(flowInst); #region 如果需要, 则Add FlowTaskForUser List <UserDTO> taskUsers = new List <UserDTO>(); if (req.needGenerateTaskForUser) { taskUsers = getUserDTOsFromPaticipantList(req.roles, flowInst); if (taskUsers.Count() == 0) // 如果参与活动的用户数为0则出错 { failReason = $"无法找到参与活动'{flowInst.currentActivityName}'" + $"的用户({req.roles.ToString()})."; updateReqProcessingResultInDB(reqInDb, EnumFlowActionRequestResultType.fail, failReason); db.SaveChanges(); return(new FlowActionStartResult(req.flowActionRequestId, req.clientRequestGuid, flowInst, false, failReason)); } } #endregion // 新建的流程需要回填对应的处理请求对象关于流程实例的信息, // 由下面updateRequestToSuccess完成 #region update request updateRequestToSuccess(reqInDb, flowInst); #endregion #warning TODO: Add FlowInstanceFriendlyLog & FlowInstanceTechLog addFlowInstanceFriendlyLog( flowInst, reqInDb.flowActionRequestId, flowInst.previousActivityName, reqInDb.userId.Value, reqInDb.delegateeUserId, "提交(开始)/Submit(Start)", req.userMemo, db); db.SaveChanges(); return(new FlowActionStartResult( req.flowActionRequestId, req.clientRequestGuid, flowInst)); } }