コード例 #1
0
        // Terminate
        public static FlowActionRequest PostFlowActionTerminate(
            string clientRequestGuid,
            string bizDocumentGuid,
            string bizDocumentTypeCode,
            DateTime bizTimeStamp,
            string userMemo,
            string bizDataPayloadJson,
            string optionalFlowActionDataJson,
            int userId, // 执行人员
            string userGuid,
            int flowInstanceId,
            string flowInstanceGuid,
            string code,
            string currentActivityGuid, // 当前所处的活动状态
            string nextActivityGuid,    // 接办人选择的目标活动
            int?delegateeUserId,
            string delegateeUserGuid
            )
        {
            // 未通过合法性检查直接返回
            if (!preValidate(clientRequestGuid))
            {
                return(null);
            }

            var incomingReq = new FlowActionTerminate(
                clientRequestGuid, bizDocumentGuid, bizDocumentTypeCode, bizTimeStamp,
                userMemo, bizDataPayloadJson, optionalFlowActionDataJson, userId,
                userGuid, flowInstanceId, flowInstanceGuid, code, currentActivityGuid,
                nextActivityGuid, delegateeUserId, delegateeUserGuid);

            return(saveToDB(incomingReq));
        }
コード例 #2
0
        public FlowActionTerminateResult // teminate
        processActionRequest(FlowActionTerminate req)
        {
            var concreteMetaObj = req.concreteMetaObj;

            using (var db = new EnouFlowInstanceContext())
            {
                var flowInst = getFlowInstance(db, req.flowInstanceId, req.bizDocumentGuid);

                var      reqInDb = getReqInDB(req.flowActionRequestId, db);
                string   failReason;
                DateTime bizTimeStampToUse = DateTime.Now;
                var      flowDefHelper     = new FlowTemplateDefHelper(
                    flowInst.flowTemplateJson);
                var toActivity      = flowDefHelper.getNodeFromGuid(req.nextActivityGuid);
                var currentActivity = flowDefHelper.getNodeFromGuid(req.currentActivityGuid);

                #region  update instance
                switch (toActivity.type)
                {
                case ActivityTypeString.standard_End:
                    flowInst.lifeState = EnumFlowInstanceLifeState.terminated;
                    break;

                default:
                    throw new EnouFlowInstanceLib.DataLogicException(
                              $"不能终止到非停止状态的活动类型: {toActivity.type}");
                }
                var originBizTimeStamp = flowInst.bizTimeStamp;
                flowInst.bizTimeStamp         = bizTimeStampToUse;
                flowInst.currentActivityGuid  = toActivity.guid;
                flowInst.currentActivityName  = toActivity.name;
                flowInst.previousActivityGuid = currentActivity.guid;
                flowInst.previousActivityName = currentActivity.name;
                #endregion

                #region  update tasks for user status like taskState,finishTime
                updateTaskForUserStatesAfterAction(db, (int)concreteMetaObj.userId,
                                                   originBizTimeStamp, bizTimeStampToUse,
                                                   flowInst.previousActivityGuid, flowInst, reqInDb);
                #endregion

                #region  write 3 type logs: FlowInstanceFriendlyLog & FlowInstanceTechLog
                addFlowInstanceFriendlyLog(
                    flowInst, reqInDb.flowActionRequestId, flowInst.previousActivityName,
                    reqInDb.userId.Value, reqInDb.delegateeUserId,
                    "终止/Terminate", req.userMemo, db);
#warning TODO: another 2 type logs
                #endregion

                #region  update request
                updateRequestToSuccess(reqInDb, flowInst);
                #endregion

                #region  save all to db
                db.SaveChanges();
                #endregion

                return(new FlowActionTerminateResult(req.flowActionRequestId,
                                                     req.clientRequestGuid, flowInst));
            }
        }