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));
        }
Example #2
0
 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;
     }));
 }