I diagrammi organizzativi sono essenziali per visualizzare la struttura di team, dipartimenti e relazioni di reporting all’interno di un’azienda. Aiutano la direzione e i dipendenti a comprendere la gerarchia e le relazioni tra i ruoli in un’organizzazione. Automatizzare la creazione di questi diagrammi in C# consente agli sviluppatori di generare dinamicamente visualizzazioni da database HR, team di progetto o directory aziendali senza lo sforzo di progettazione manuale in Visio o altri strumenti di diagrammazione.
Questo tutorial spiega come creare un organigramma in C# programmaticamente utilizzando una libreria di diagrammi. Imparerai ad aggiungere nodi gerarchici, collegare le forme usando connettori e a disporre automaticamente il diagramma usando l’algoritmo CompactTree per un aspetto pulito e professionale.
Perché creare un organigramma programmaticamente?
- Automatizzare i flussi di lavoro HR per generare e aggiornare i diagrammi quando si verificano modifiche al personale o alla struttura.
- Creare diagrammi gerarchici chiari e standardizzati senza doverli disegnare manualmente in Visio.
- Risparmiare tempo integrando la generazione dei diagrammi nei sistemi esistenti, come la gestione dei dipendenti o i cruscotti di reporting.
- Garantire un design coerente applicando programmaticamente stili di forma, connettori e regole di layout.
- Esportare i diagrammi direttamente nel formato Visio (VSDX) per condividerli e modificarli ulteriormente, se necessario.
Crea organigramma in C#
- Aggiungi la libreria di diagrammazione al tuo progetto C# per accedere alle API di creazione e layout di Visio.
- Inizializza un nuovo oggetto
Diagrame carica forme di base e connettori da un file stencil Visio. - Definisci una struttura gerarchica o un set di dati che rappresenti le relazioni organizzative.
- Aggiungi forme dinamicamente per ogni nodo nella gerarchia e memorizza i loro ID per la mappatura delle connessioni.
- Usa i connettori per collegare le forme figlie ai loro nodi genitori, formando l’albero gerarchico.
- Applica un algoritmo di layout automatico (come CompactTree) per organizzare ordinatamente i nodi.
- Salva il diagramma risultante nel formato Visio VSDX.
// 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);
Questo esempio di codice crea una gerarchia organizzativa, collega i nodi padre e figlio utilizzando connettori dinamici e applica un layout automatico CompactTree per una struttura pulita. Ogni forma rappresenta un nodo organizzativo etichettato in base all’elenco della gerarchia e il risultato finale viene salvato come file Visio VSDX.
Conclusione
Creare organigrammi in C# offre un modo dinamico per visualizzare le strutture dei team, le gerarchie di reporting e le relazioni dipartimentali senza dover disegnare manualmente in Visio. Con layout automatico e gestione delle connessioni, è possibile generare diagrammi puliti e leggibili direttamente dalle fonti di dati. L’approccio mostrato sopra semplifica la reportistica HR, migliora la coerenza e consente l’integrazione con i flussi di lavoro di automazione aziendale.
