public JsonResult AddTran(string To, string From, string DefinitionId, string ToName) { if (To.IsNullOrEmpty() || From.IsNullOrEmpty() || DefinitionId.IsNullOrEmpty()) { return(Json(false)); } var toActivity = DBContext <ComponentEntity> .Instance.FirstOrDefault(o => o.PageId.Equals(DefinitionId, StringComparison.OrdinalIgnoreCase) && o.Id.Equals(To, StringComparison.OrdinalIgnoreCase)); if (toActivity == null) { return(Json(false)); } var fromActivity = DBContext <ComponentEntity> .Instance.FirstOrDefault(o => o.PageId.Equals(DefinitionId, StringComparison.OrdinalIgnoreCase) && o.Id.Equals(From, StringComparison.OrdinalIgnoreCase)); if (fromActivity == null) { return(Json(false)); } string id = TRAN_ID_FORMAT.FormatTo(From, To); if (DBContext <ComponentEntity> .Instance.Count(o => o.PageId.Equals(DefinitionId, StringComparison.OrdinalIgnoreCase) && o.Id.Equals(id, StringComparison.OrdinalIgnoreCase)) > 0) { return(Json(false)); } JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new ComponentConverter() }); var instance = new BusinessTransition() { PageId = DefinitionId, Id = id, ParentId = DefinitionId, TargetId = "Transition", ToId = To, FromId = From, Label = ToName, CanPushBack = true, NotOperation = false }; instance.Condition = new ChoiceCondition() { Choice = To }; ComponentHelper.RecSave(instance); return(Json(true)); }
public IWorkflow Build(string workflowId) { return(CacheHelper.GetFromCache <IWorkflow>(WORKFLOW_CACHE_KEY_FORMAT.FormatTo(workflowId), () => { var components = DBContext <ComponentEntity> .Instance.Where(o => o.PageId.Equals(workflowId, StringComparison.OrdinalIgnoreCase)); var workflow = ObjectHelper.GetObject <IWorkflow>(); workflow.Activities = new List <IActivity>(); workflow.Transitions = new List <ITransition>(); Controls = new List <IControl>(); JavaScriptSerializer serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new ComponentConverter() }); foreach (var component in components) { var type = TypeHelper.GetType(component.Type); if (!component.JsonContent.IsNullOrEmpty()) { var instance = serializer.Deserialize(component.JsonContent, type); var control = instance as IControl; control.Id = component.Id; control.ParentId = component.ParentId; control.PageId = component.PageId; control.TargetId = component.TargetId; Controls.Add(control); } } foreach (var e in Controls) { if (e.ParentId.Equals(workflowId)) { if (e is IActivity) { var acti = e as IActivity; acti.Name = e.Id; workflow.Activities.Add(acti); if (e is ResponseActivity) { var acti1 = e as ResponseActivity; if (acti1.IsRoot) { workflow.Root = acti1; } if (acti1.IsFreeApproval) { var vActi = new BreakdownActivity() { ResponseRuleType = ResponseRuleType.AllResponse, NeedChoice = false, Id = acti1.Name + "_BreakDown", Name = acti1.Name + "_BreakDown", Alias = acti1.Alias + "-分发", Actor = new UserSelectActor() { InnerActor = new ChildDepartmentActor() { DeptName = "IT研发中心", IfGetAllChildren = true, IfReturnSelf = true, RoleName = SysConfig.DefaultUserRole } } }; var vTran = new BusinessTransition() { Id = acti1.Name + "_To_" + vActi.Name, Label = "自由分发", Condition = new ChoiceCondition() { Choice = vActi.Name } }; vTran.To = vActi; vTran.From = acti1; workflow.Transitions.Add(vTran); workflow.Activities.Add(vActi); } } } else if (e is ITransition) { var tran = e as BusinessTransition; tran.To = Controls.FirstOrDefault(o => o.Id.Equals(tran.ToId)) as IActivity; tran.From = Controls.FirstOrDefault(o => o.Id.Equals(tran.FromId)) as IActivity; workflow.Transitions.Add(tran); } GetChildren(e); } } foreach (var activity in workflow.Activities) { activity.Owner = workflow; if (activity.Actor != null) { activity.Actor.Owner = activity; if (activity.Actor is UserSelectActor) { (activity.Actor as UserSelectActor).InnerActor.Owner = activity; } } } foreach (var tran in workflow.Transitions) { tran.Owner = workflow; if (tran.Condition != null) { tran.Condition.Owner = tran; } if (tran.From.Transitions == null) { tran.From.Transitions = new List <ITransition>(); } tran.From.Transitions.Add(tran); } return workflow; })); }