public Root WorkflowConfig2Root(WorkflowConfig workflowConfig) { Root root = new Root(); root.ID = workflowConfig.Id; root.Description = workflowConfig.Description; root.DisplayName = workflowConfig.DisplayName; root.IsSave = workflowConfig.IsSaveContent.ToString(); root.Name = workflowConfig.Name; root.Priority = ((int)workflowConfig.Priority).ToString(); root.ContentChoice = ((int)workflowConfig.ContentChoice).ToString(); root.ManualPageXml = workflowConfig.ContentXml ?? ""; if (workflowConfig.ControlActions != null) { root.ControllActions = new List <ControllAction>(); ControllAction controllAction; foreach (ControlActionConfig caConfig in workflowConfig.ControlActions) { controllAction = new ControllAction(); controllAction.ActionName = caConfig.ActionName; controllAction.AreaName = caConfig.AreaName; controllAction.ControllName = caConfig.ControlName; controllAction.Order = caConfig.Order; controllAction.Title = caConfig.Title == null ? "" : caConfig.Title; controllAction.ShowKind = (int)caConfig.ShowKind; root.ControllActions.Add(controllAction); } } root.Nodes = new List <Node>(); root.LineList = new List <Line>(); Node node; for (int i = 0; i < workflowConfig.Steps.Count; i++) { node = new Node(); Line line = new Line(); StepConfig stepConfig = workflowConfig.Steps[i]; BeginStepConfig beginStep = workflowConfig.Steps[i] as BeginStepConfig; EndStepConfig endStep = workflowConfig.Steps[i] as EndStepConfig; AutoStepConfig autoStep = workflowConfig.Steps[i] as AutoStepConfig; ManualStepConfig manualStep = workflowConfig.Steps[i] as ManualStepConfig; RouteStepConfig routeStep = workflowConfig.Steps[i] as RouteStepConfig; node.ObjectIndex = new BaseIntElement { Type = "number", Value = 0 }; node.TypeIndex = new BaseIntElement { Type = "number", Value = 0 }; stepConfig.Id = string.IsNullOrEmpty(stepConfig.Id) ? context.GetUniId() : stepConfig.Id; node.ID = new BaseStringElement { Type = "string", Value = stepConfig.Id }; node.Text = new BaseStringElement { Type = "string", Value = stepConfig.DisplayName }; node.Name = new BaseStringElement { Type = "string", Value = stepConfig.Name }; node.Height = new BaseIntElement { Type = "number", Value = stepConfig.Height == 0 ? 51 : stepConfig.Height }; node.Width = new BaseIntElement { Type = "number", Value = stepConfig.Width == 0 ? 130 : stepConfig.Width }; node.X = new BaseIntElement { Type = "number", Value = stepConfig.Left }; node.Y = new BaseIntElement { Type = "number", Value = stepConfig.Top }; node.ParentList = new List <Parent>(); node.ChildList = new List <Child>(); if (stepConfig.HasInStep) { Parent parent; ////输入节点数量 0:无输入 1:1输入 2:多输入 //switch (stepConfig.PrevSteps.Count()) //{ // case 0: // node.InputType = new BaseIntElement { Type = "number", Value = 0 }; // break; // case 1: // node.InputType = new BaseIntElement { Type = "number", Value = 1 }; // break; // default: // node.InputType = new BaseIntElement { Type = "number", Value = 2 }; // break; //} foreach (StepConfig sc in stepConfig.PrevSteps) { sc.Id = string.IsNullOrEmpty(sc.Id) ? context.GetUniId() : sc.Id; parent = new Parent(); parent.Value = sc.Id; node.ParentList.Add(parent); } } if (stepConfig.HasOutStep) { Child child; //switch (stepConfig.NextStepCount) //{ // case 0: // node.OutputType = new BaseIntElement { Type = "number", Value = 0 }; // break; // case 1: // node.OutputType = new BaseIntElement { Type = "number", Value = 1 }; // break; // default: // node.OutputType = new BaseIntElement { Type = "number", Value = 2 }; // break; //} foreach (StepConfig sc in stepConfig.NextSteps) { sc.Id = string.IsNullOrEmpty(sc.Id) ? context.GetUniId() : sc.Id; child = new Child(); child.Value = sc.Id; node.ChildList.Add(child); line = new Line(); line.ID = stepConfig.Id + "_" + sc.Id; if (routeStep != null) { for (int k = 0; k < routeStep.Connections.Count; k++) { if (routeStep.Connections[k].NextStepName == sc.Name) { line.Name = routeStep.Connections[k].Name; line.PlugName = routeStep.Connections[k].PlugName; line.Text = routeStep.Connections[k].DisplayName; break; } } } root.LineList.Add(line); } } if (beginStep != null) { node.Icon = new BaseStringElement { Type = "string", Value = "nodeicon1" }; node.NodeType = new BaseIntElement { Type = "number", Value = (int)NodeType.Begin }; node.CreatorRegName = new BaseStringElement { Type = "string", Value = beginStep.CreatorRegName }; node.InputType = new BaseIntElement { Type = "number", Value = 0 }; node.OutputType = new BaseIntElement { Type = "number", Value = 1 }; } else if (endStep != null) { node.Icon = new BaseStringElement { Type = "string", Value = "nodeicon2" }; node.NodeType = new BaseIntElement { Type = "number", Value = (int)NodeType.End }; node.PlugRegName = new BaseStringElement { Type = "string", Value = endStep.PlugRegName }; node.InputType = new BaseIntElement { Type = "number", Value = 2 }; node.OutputType = new BaseIntElement { Type = "number", Value = 0 }; } else if (routeStep != null) { node.Icon = new BaseStringElement { Type = "string", Value = "nodeicon3" }; node.NodeType = new BaseIntElement { Type = "number", Value = (int)NodeType.Route }; node.InputType = new BaseIntElement { Type = "number", Value = 2 }; node.OutputType = new BaseIntElement { Type = "number", Value = 2 }; } else if (autoStep != null) { node.Icon = new BaseStringElement { Type = "string", Value = "nodeicon-auto" }; node.NodeType = new BaseIntElement { Type = "number", Value = (int)NodeType.Auto }; node.PlugRegName = new BaseStringElement { Type = "string", Value = autoStep.PlugRegName }; node.InputType = new BaseIntElement { Type = "number", Value = 2 }; node.OutputType = new BaseIntElement { Type = "number", Value = 1 }; } else if (manualStep != null) { node.Icon = new BaseStringElement { Type = "string", Value = "nodeicon5" }; node.NodeType = new BaseIntElement { Type = "number", Value = (int)NodeType.Manual }; node.ActorRegName = new BaseStringElement { Type = "string", Value = manualStep.ActorRegName }; node.InputType = new BaseIntElement { Type = "number", Value = 2 }; node.OutputType = new BaseIntElement { Type = "number", Value = 1 }; node.ManualPageXml = new BaseStringElement { Type = "string", Value = manualStep.ContentXml }; node.ContentChoice = new BaseIntElement { Type = "number", Value = (int)manualStep.ContentChoice }; if (manualStep.ControlActions != null) { node.ControllActions = new List <ControllAction>(); ControllAction controllAction; foreach (ControlActionConfig caConfig in manualStep.ControlActions) { controllAction = new ControllAction(); controllAction.ActionName = caConfig.ActionName; controllAction.AreaName = caConfig.AreaName; controllAction.ControllName = caConfig.ControlName; controllAction.Order = caConfig.Order; controllAction.Title = caConfig.Title == null ? "" : caConfig.Title; controllAction.ShowKind = (int)caConfig.ShowKind; node.ControllActions.Add(controllAction); } } if (manualStep.Process != null) { node.Process = new Process(); node.Process.UIOperationConfig = new WorkFlowDesigner.Models.UIOperationConfig(); if (manualStep.Process.UIOperation != null) { node.Process.UIOperationConfig.ButtonCaption = manualStep.Process.UIOperation.ButtonCaption; node.Process.UIOperationConfig.DisplayName = manualStep.Process.UIOperation.DisplayName; node.Process.UIOperationConfig.Name = manualStep.Process.UIOperation.Name; node.Process.UIOperationConfig.Plugin = manualStep.Process.UIOperation.PlugIn; } node.Process.NonUIOperationConfigs = new List <WorkFlowDesigner.Models.NonUIOperationConfig>(); WorkFlowDesigner.Models.NonUIOperationConfig nonUiConfig; if (manualStep.Process.NonUIOperations != null) { foreach (var nonUi in manualStep.Process.NonUIOperations) { nonUiConfig = new WorkFlowDesigner.Models.NonUIOperationConfig(); nonUiConfig.ButtonCaption = nonUi.ButtonCaption; nonUiConfig.DisplayName = nonUi.DisplayName; nonUiConfig.Name = nonUi.Name; nonUiConfig.NeedPrompt = nonUi.NeedPrompt.ToString(); nonUiConfig.Plugin = nonUi.PlugIn; node.Process.NonUIOperationConfigs.Add(nonUiConfig); } } } } root.Nodes.Add(node); } return(root); }
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); } }