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); }
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); } }