Organigrammen zijn essentieel voor het visualiseren van de structuur van teams, afdelingen en rapportage‑relaties binnen een bedrijf. Ze helpen het management en de medewerkers de hiërarchie en de relaties tussen functies in een organisatie te begrijpen. Het automatiseren van het maken van deze diagrammen in C# stelt ontwikkelaars in staat om dynamisch visualisaties te genereren uit HR‑databases, projectteams of bedrijfsdirectory’s zonder handmatige ontwerpinspanningen in Visio of andere diagramtools.
Deze tutorial legt uit hoe je een organigram in C# programmatically maakt met behulp van een diagrambibliotheek. Je leert hiërarchische knooppunten toe te voegen, vormen te verbinden met connectors, en de grafiek automatisch te rangschikken met het CompactTree‑algoritme voor een nette en professionele uitstraling.
Waarom een organigram programmatisch maken?
- Automatiseer HR‑workflows om diagrammen te genereren en bij te werken wanneer personeels‑ of structuurwijzigingen optreden.
- Maak duidelijke en gestandaardiseerde hiërarchiediagrammen zonder ze handmatig in Visio te hoeven tekenen.
- Bespaar tijd door diagramgeneratie te integreren in bestaande systemen, zoals personeelsbeheer of rapportagedashboards.
- Zorg voor een consistent ontwerp door programmatisch vormstijlen, connectoren en lay‑outrichtlijnen toe te passen.
- Exporteer diagrammen direct naar Visio (VSDX)-formaat voor delen en verdere bewerking indien nodig.
Maak een Organigram in C#
- Voeg de diagrambibliotheek toe aan uw C#‑project om toegang te krijgen tot Visio‑creatie‑ en lay‑out‑API’s.
- Initialiseer een nieuw
Diagram‑object en laad basisvormen en connectoren uit een Visio‑stencil‑bestand. - Definieer een hiërarchische structuur of dataset die de organisatorische relaties weergeeft.
- Voeg dynamisch vormen toe voor elke knoop in de hiërarchie en sla hun ID’s op voor het in kaart brengen van verbindingen.
- Gebruik connectoren om kindvormen te koppelen aan hun bovenliggende knopen, waardoor de hiërarchische boom ontstaat.
- Pas een automatisch lay‑outalgoritme toe (zoals CompactTree) om knopen netjes te ordenen.
- Sla het resulterende diagram op in Visio VSDX‑formaat.
// Load masters from any existing diagram, stencil or template
string visioStencil = dataDir + "BasicShapes.vss";
const string rectangleMaster = "Rectangle";
const string connectorMaster = "Dynamic connector";
const int pageNumber = 0;
const double width = 1;
const double height = 1;
double pinX = 4.25;
double pinY = 9.5;
// Define values to construct the hierarchy
List<string> listPos = new List<string>(new string[] {
"0", "0:0", "0:1", "0:2", "0:3", "0:4", "0:5", "0:6",
"0:0:0", "0:0:1", "0:3:0", "0:3:1", "0:3:2", "0:6:0", "0:6:1"
});
// Define a Hashtable to map the string name to long shape id
System.Collections.Hashtable shapeIdMap = new System.Collections.Hashtable();
// Create a new diagram
Aspose.Diagram.Diagram diagram = new Aspose.Diagram.Diagram(visioStencil);
diagram.Pages[pageNumber].PageSheet.PageProps.PageWidth.Value = 11;
// Add shapes for each hierarchy node
foreach (string orgnode in listPos)
{
long rectangleId = diagram.AddShape(pinX++, pinY++, width, height, rectangleMaster, pageNumber);
Aspose.Diagram.Shape shape = diagram.Pages[pageNumber].Shapes.GetShape(rectangleId);
shape.Text.Value.Add(new Aspose.Diagram.Txt(orgnode));
shape.Name = orgnode;
shapeIdMap.Add(orgnode, rectangleId);
}
// Create connections between parent and child nodes
foreach (string orgName in listPos)
{
int lastColon = orgName.LastIndexOf(':');
if (lastColon > 0)
{
string parendName = orgName.Substring(0, lastColon);
long shapeId = (long)shapeIdMap[orgName];
long parentId = (long)shapeIdMap[parendName];
Aspose.Diagram.Shape connector1 = new Aspose.Diagram.Shape();
long connecter1Id = diagram.AddShape(connector1, connectorMaster, pageNumber);
diagram.Pages[pageNumber].ConnectShapesViaConnector(parentId,
Aspose.Diagram.Manipulation.ConnectionPointPlace.Right,
shapeId, Aspose.Diagram.Manipulation.ConnectionPointPlace.Left,
connecter1Id);
}
}
// Auto layout CompactTree chart
Aspose.Diagram.AutoLayout.LayoutOptions compactTreeOptions = new Aspose.Diagram.AutoLayout.LayoutOptions
{
LayoutStyle = Aspose.Diagram.AutoLayout.LayoutStyle.CompactTree,
Direction = Aspose.Diagram.AutoLayout.LayoutDirection.DownThenRight,
EnlargePage = false
};
diagram.Pages[pageNumber].Layout(compactTreeOptions);
// Save diagram
diagram.Save(dataDir + "ORGChart_out.vsdx", Aspose.Diagram.SaveFileFormat.Vsdx);
Dit codevoorbeeld maakt een organisatiestructuur, verbindt ouder‑ en kindknooppunten met dynamische connectors en past een automatische CompactTree‑indeling toe voor een nette structuur. Elke vorm vertegenwoordigt een organisatienode die is gelabeld volgens de hiërarchielijst, en de uiteindelijke output wordt opgeslagen als een Visio VSDX‑bestand.
Conclusie
Het maken van organigrammen in C# biedt een dynamische manier om teamstructuren, rapportagehiërarchieën en afdelingsrelaties te visualiseren zonder handmatig te tekenen in Visio. Met automatische lay‑out en verbindingsbeheer kun je schone, leesbare diagrammen rechtstreeks uit gegevensbronnen genereren. De hierboven getoonde aanpak vereenvoudigt HR‑rapportage, verbetert de consistentie en maakt integratie met bedrijfsautomatiseringsworkflows mogelijk.
