Les organigrammes sont essentiels pour visualiser la structure des équipes, des départements et des relations hiérarchiques au sein d’une entreprise. Ils aident la direction et les employés à comprendre la hiérarchie et les relations entre les rôles dans une organisation. L’automatisation de la création de ces organigrammes en C# permet aux développeurs de générer dynamiquement des visuels à partir de bases de données RH, d’équipes de projet ou d’annuaires d’entreprise, sans effort de conception manuelle dans Visio ou d’autres outils de diagramme.
Ce tutoriel explique comment créer un organigramme en C# de manière programmatique à l’aide d’une bibliothèque de diagrammes. Vous apprendrez à ajouter des nœuds hiérarchiques, à connecter des formes à l’aide de connecteurs, et à disposer automatiquement le diagramme en utilisant l’algorithme CompactTree pour une apparence propre et professionnelle.
Pourquoi créer un organigramme de manière programmatique ?
- Automatisez les flux de travail RH pour générer et mettre à jour les organigrammes lorsque des changements de personnel ou de structure surviennent.
- Créez des diagrammes hiérarchiques clairs et standardisés sans avoir besoin de les dessiner manuellement dans Visio.
- Gagnez du temps en intégrant la génération d’organigrammes aux systèmes existants tels que la gestion du personnel ou les tableaux de bord de reporting.
- Assurez une conception cohérente en appliquant programmatiquement les styles de formes, les connecteurs et les règles de mise en page.
- Exportez les organigrammes directement au format Visio (VSDX) pour les partager et les modifier davantage si nécessaire.
Créer un organigramme en C#
- Ajoutez la bibliothèque de diagrammes à votre projet C# pour accéder aux API de création et de mise en page Visio.
- Initialisez un nouvel objet
Diagramet chargez les formes de base ainsi que les connecteurs à partir d’un fichier de gabarit Visio. - Définissez une structure hiérarchique ou un jeu de données représentant les relations organisationnelles.
- Ajoutez dynamiquement des formes pour chaque nœud de la hiérarchie et stockez leurs ID pour le mappage des connexions.
- Utilisez des connecteurs pour lier les formes enfants à leurs nœuds parents, formant ainsi l’arbre hiérarchique.
- Appliquez un algorithme de mise en page automatique (tel que CompactTree) pour organiser les nœuds de manière ordonnée.
- Enregistrez le diagramme résultant au format 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);
Cet exemple de code crée une hiérarchie organisationnelle, connecte les nœuds parents et enfants à l’aide de connecteurs dynamiques, et applique une mise en page CompactTree automatique pour une structure claire. Chaque forme représente un nœud organisationnel étiqueté selon la liste de hiérarchie, et le résultat final est enregistré sous forme de fichier Visio VSDX.
Conclusion
Créer des organigrammes en C# offre un moyen dynamique de visualiser les structures d’équipe, les hiérarchies de reporting et les relations départementales sans dessiner manuellement dans Visio. Grâce à la mise en page automatique et à la gestion des connexions, vous pouvez générer des diagrammes clairs et lisibles directement à partir des sources de données. L’approche présentée ci‑dessus simplifie le reporting RH, améliore la cohérence et permet l’intégration aux flux de travail d’automatisation des entreprises.
