Пример #1
0
        public WorkflowConfig Root2WorkflowConfig(Root root)
        {
            WorkflowConfig config = new WorkflowConfig();

            config.Id            = root.ID;
            config.Name          = root.Name;
            config.DisplayName   = root.DisplayName;
            config.Description   = root.Description;
            config.Priority      = root.Priority.Value <WorkflowPriority>();
            config.IsSaveContent = root.IsSave == "1" ? true : false;
            config.ContentChoice = root.ContentChoice.Value <ConfigChoice>();
            config.ContentXml    = root.ManualPageXml ?? "";
            if (root.ControllActions != null)
            {
                config.ControlActions = new RegNameList <ControlActionConfig>();
                ControlActionConfig controllAction;
                foreach (ControllAction ca in root.ControllActions)
                {
                    controllAction             = new ControlActionConfig();
                    controllAction.ActionName  = ca.ActionName;
                    controllAction.AreaName    = ca.AreaName;
                    controllAction.ControlName = ca.ControllName;
                    controllAction.Order       = ca.Order;
                    controllAction.Title       = ca.Title == null ? "" : ca.Title;
                    controllAction.ShowKind    = ca.ShowKind.Value <ShowKind>();
                    config.ControlActions.Add(controllAction);
                }
            }
            for (int i = 0; i < root.LineList.Count; i++)
            {
                CreateLineNode(config, root, root.LineList[i]);
            }
            string gg = config.SaveString(Formatting.None);

            return(config);
        }
Пример #2
0
        public void CreateLineNode(WorkflowConfig wfConfig, Root rt, Line line)
        {
            string     lineId   = line.ID;
            StepConfig fromStep = null;
            StepConfig toStep   = null;
            int        index;
            string     nodeId;

            #region 循环查找
            for (int i = 0; i < rt.Nodes.Count; i++)
            {
                nodeId = rt.Nodes[i].ID.Value;
                index  = lineId.IndexOf(nodeId);
                if (index != -1)
                {
                    if (steps.Keys.Contains(nodeId))
                    {
                        if (index == 0)
                        {
                            fromStep = steps[nodeId];
                            RouteStepConfig routeStepConfig = fromStep as RouteStepConfig;
                            if (routeStepConfig != null)
                            {
                                ConnectionConfig connectionConfig = new ConnectionConfig();
                                connectionConfig.DisplayName = line.Text;
                                connectionConfig.PlugName    = line.PlugName;
                                connectionConfig.Name        = line.Name;
                                routeStepConfig.Connections.Add(connectionConfig);
                            }
                        }
                        else
                        {
                            toStep = steps[nodeId];
                        }
                    }
                    else
                    {
                        StepConfig stepConfig = null;
                        #region 将nodes转化为workflowconfig
                        switch ((NodeType)rt.Nodes[i].NodeType.Value)
                        {
                        case NodeType.Begin:
                            BeginStepConfig beginStep = new BeginStepConfig(wfConfig);
                            beginStep.Id             = rt.Nodes[i].ID.Value;
                            beginStep.Name           = rt.Nodes[i].Name.Value;
                            beginStep.DisplayName    = rt.Nodes[i].Text.Value;;
                            beginStep.Height         = rt.Nodes[i].Height.Value;
                            beginStep.Width          = rt.Nodes[i].Width.Value;
                            beginStep.Left           = rt.Nodes[i].X.Value;
                            beginStep.Top            = rt.Nodes[i].Y.Value;
                            beginStep.CreatorRegName = rt.Nodes[i].CreatorRegName.Value;
                            steps.Add(nodeId, beginStep);
                            wfConfig.Steps.Add(beginStep);
                            stepConfig = beginStep;
                            break;

                        case NodeType.End:
                            EndStepConfig endStep = new EndStepConfig(wfConfig);
                            endStep.Id          = rt.Nodes[i].ID.Value;
                            endStep.Name        = rt.Nodes[i].Name.Value;
                            endStep.DisplayName = rt.Nodes[i].Text.Value;;
                            endStep.Height      = rt.Nodes[i].Height.Value;
                            endStep.Width       = rt.Nodes[i].Width.Value;
                            endStep.Left        = rt.Nodes[i].X.Value;
                            endStep.Top         = rt.Nodes[i].Y.Value;
                            endStep.PlugRegName = rt.Nodes[i].PlugRegName.Value;
                            steps.Add(nodeId, endStep);
                            wfConfig.Steps.Add(endStep);
                            stepConfig = endStep;
                            break;

                        case NodeType.Auto:
                            AutoStepConfig autoStep = new AutoStepConfig(wfConfig);
                            autoStep.Id          = rt.Nodes[i].ID.Value;
                            autoStep.Name        = rt.Nodes[i].Name.Value;
                            autoStep.DisplayName = rt.Nodes[i].Text.Value;;
                            autoStep.Height      = rt.Nodes[i].Height.Value;
                            autoStep.Width       = rt.Nodes[i].Width.Value;
                            autoStep.Left        = rt.Nodes[i].X.Value;
                            autoStep.Top         = rt.Nodes[i].Y.Value;
                            autoStep.PlugRegName = rt.Nodes[i].PlugRegName.Value;
                            steps.Add(nodeId, autoStep);
                            wfConfig.Steps.Add(autoStep);
                            stepConfig = autoStep;
                            break;

                        case NodeType.Route:
                            RouteStepConfig routeStep = new RouteStepConfig(wfConfig);
                            routeStep.Id          = rt.Nodes[i].ID.Value;
                            routeStep.Name        = rt.Nodes[i].Name.Value;
                            routeStep.DisplayName = rt.Nodes[i].Text.Value;
                            routeStep.Height      = rt.Nodes[i].Height.Value;
                            routeStep.Width       = rt.Nodes[i].Width.Value;
                            routeStep.Left        = rt.Nodes[i].X.Value;
                            routeStep.Top         = rt.Nodes[i].Y.Value;
                            if (index == 0)
                            {
                                ConnectionConfig connection = new ConnectionConfig();
                                connection.DisplayName = line.Text;
                                connection.PlugName    = line.PlugName;
                                connection.Name        = line.Name;
                                routeStep.Connections.Add(connection);
                            }
                            steps.Add(nodeId, routeStep);
                            wfConfig.Steps.Add(routeStep);
                            stepConfig = routeStep;
                            break;

                        case NodeType.Manual:
                            ManualStepConfig manualStep = new ManualStepConfig(wfConfig);
                            manualStep.Id            = rt.Nodes[i].ID.Value;
                            manualStep.Name          = rt.Nodes[i].Name.Value;
                            manualStep.DisplayName   = rt.Nodes[i].Text.Value;
                            manualStep.Height        = rt.Nodes[i].Height.Value;
                            manualStep.Width         = rt.Nodes[i].Width.Value;
                            manualStep.Left          = rt.Nodes[i].X.Value;
                            manualStep.Top           = rt.Nodes[i].Y.Value;
                            manualStep.ActorRegName  = rt.Nodes[i].ActorRegName.Value;
                            manualStep.ContentXml    = rt.Nodes[i].ManualPageXml.Value;
                            manualStep.ContentChoice = rt.Nodes[i].ContentChoice.Value.Value <ConfigChoice>();
                            if (rt.Nodes[i].ControllActions != null)
                            {
                                manualStep.ControlActions = new Ataw.Framework.Core.RegNameList <ControlActionConfig>();
                                ControlActionConfig controlActionConfig;
                                for (int j = 0; j < rt.Nodes[i].ControllActions.Count; j++)
                                {
                                    controlActionConfig = new ControlActionConfig
                                    {
                                        ShowKind    = (ShowKind)rt.Nodes[i].ControllActions[j].ShowKind,
                                        Title       = rt.Nodes[i].ControllActions[j].Title,
                                        Order       = rt.Nodes[i].ControllActions[j].Order,
                                        AreaName    = rt.Nodes[i].ControllActions[j].AreaName,
                                        ControlName = rt.Nodes[i].ControllActions[j].ControllName,
                                        ActionName  = rt.Nodes[i].ControllActions[j].ActionName
                                    };
                                    manualStep.ControlActions.Add(controlActionConfig);
                                }
                            }
                            if (rt.Nodes[i].Process != null)
                            {
                                manualStep.Process = new ProcessConfig();
                                if (rt.Nodes[i].Process.UIOperationConfig != null)
                                {
                                    manualStep.Process.UIOperation               = new Ataw.Workflow.Core.UIOperationConfig();
                                    manualStep.Process.UIOperation.Name          = rt.Nodes[i].Process.UIOperationConfig.Name;
                                    manualStep.Process.UIOperation.DisplayName   = rt.Nodes[i].Process.UIOperationConfig.DisplayName;
                                    manualStep.Process.UIOperation.ButtonCaption = rt.Nodes[i].Process.UIOperationConfig.ButtonCaption;
                                    manualStep.Process.UIOperation.PlugIn        = rt.Nodes[i].Process.UIOperationConfig.Plugin;
                                }
                                if (rt.Nodes[i].Process.NonUIOperationConfigs != null)
                                {
                                    manualStep.Process.NonUIOperations = new Ataw.Framework.Core.RegNameList <Ataw.Workflow.Core.NonUIOperationConfig>();
                                    Ataw.Workflow.Core.NonUIOperationConfig nonUIOperationConfig;
                                    for (int j = 0; j < rt.Nodes[i].Process.NonUIOperationConfigs.Count; j++)
                                    {
                                        nonUIOperationConfig = new Ataw.Workflow.Core.NonUIOperationConfig
                                        {
                                            Name          = rt.Nodes[i].Process.NonUIOperationConfigs[j].Name,
                                            DisplayName   = rt.Nodes[i].Process.NonUIOperationConfigs[j].DisplayName,
                                            ButtonCaption = rt.Nodes[i].Process.NonUIOperationConfigs[j].ButtonCaption,
                                            PlugIn        = rt.Nodes[i].Process.NonUIOperationConfigs[j].Plugin,
                                            NeedPrompt    = rt.Nodes[i].Process.NonUIOperationConfigs[j].NeedPrompt == "1" ? true : false
                                        };
                                        manualStep.Process.NonUIOperations.Add(nonUIOperationConfig);
                                    }
                                }
                            }
                            steps.Add(nodeId, manualStep);
                            wfConfig.Steps.Add(manualStep);
                            stepConfig = manualStep;
                            break;
                        }
                        #endregion
                        if (index == 0)
                        {
                            fromStep = stepConfig;
                        }
                        else
                        {
                            toStep = stepConfig;
                        }
                    }
                }
            }
            #endregion
            if (fromStep != null && toStep != null)
            {
                //设置路由步骤的Connection 的下一步名称
                RouteStepConfig rsc = fromStep as RouteStepConfig;
                if (rsc != null)
                {
                    rsc.Connections[rsc.Connections.Count - 1].NextStepName = toStep.Name;
                }
                fromStep.AddNextConfig(toStep, fromStep.Left, fromStep.Top, toStep.Left, toStep.Top);
            }
        }