namespace SQLLinter.Infrastructure.Diagram; /// /// Расширения для диаграммы BPMN /// public static class BpmnDiagramExtensions { /// /// Добавления отсутсвующих связей между процессами и их подпроцессами /// /// public static void AddMissingProcessEdges(this BpmnDiagram diagram) { foreach (var subprocess in diagram.Processes .SelectMany(p => p.Nodes.Select(n => new { node = n, procId = p.Id })) .Where(n => n.node.Type == BpmnNodeType.Subprocess && !string.IsNullOrEmpty(n.node.SubprocessId) && n.node.SubprocessId != n.procId) .Select(n => n.node) ) { if (diagram.Processes.Any(p => p.Id == subprocess.SubprocessId) && !diagram.GlobalEdges.Any(t => t.From == subprocess.Id && t.To == subprocess.SubprocessId) ) { // Добавить пунктирный край от узла подпроцесса к началу подпроцесса diagram.GlobalEdges.Add(new BpmnEdge { From = subprocess.Id, To = subprocess.SubprocessId + "_start", ArrowType = BpmnArrowType.Dashed, }); } } } }