組織図は、企業内のチーム、部門、報告関係の構造を可視化するために不可欠です。これにより、経営陣や従業員は組織内の階層や役割間の関係を理解しやすくなります。C# でこれらの図表の作成を自動化することで、開発者は HR データベース、プロジェクトチーム、または企業ディレクトリから手動で Visio や他のダイアグラムツールでデザインすることなく、動的にビジュアルを生成できます。
このチュートリアルでは、ダイアグラム ライブラリを使用してプログラムで C# で組織図を作成 する方法を説明します。階層ノードの追加、コネクタを使用したシェイプの接続、そして CompactTree アルゴリズムを使用してチャートを自動的にレイアウトし、清潔でプロフェッショナルな外観を実現する方法を学びます。
なぜ組織図をプログラムで作成するのか?
- 人事や組織の変更が発生した際に、チャートを自動生成・更新するように HR ワークフローを自動化します。
- Visio で手動で描く必要なく、明確で標準化された階層図を作成します。
- 従業員管理やレポート ダッシュボードなど既存システムにチャート生成を統合することで時間を節約します。
- シェイプ スタイル、コネクタ、レイアウト ルールをプログラムで適用し、一貫したデザインを保証します。
- 必要に応じて、チャートを Visio (VSDX) 形式で直接エクスポートし、共有やさらに編集できるようにします。
C#で組織図を作成する
- C# プロジェクトにダイアグラム ライブラリを追加して、Visio の作成およびレイアウト API にアクセスします。
- 新しい
Diagramオブジェクトを初期化し、Visio ステンシル ファイルから基本的なシェイプとコネクタをロードします。 - 組織の関係を表す階層構造またはデータセットを定義します。
- 階層内の各ノードに対してシェイプを動的に追加し、接続マッピング用にその ID を保存します。
- コネクタを使用して子シェイプを親ノードにリンクし、階層ツリーを形成します。
- 自動レイアウト アルゴリズム(例: CompactTree)を適用して、ノードを整然と配置します。
- 結果のダイアグラムを 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);
このコード例は組織階層を作成し、動的コネクタを使用して親子ノードを接続し、クリーンな構造のために自動CompactTreeレイアウトを適用します。各シェイプは階層リストに従ってラベル付けされた組織ノードを表し、最終出力はVisio VSDXファイルとして保存されます。
結論
C# で組織図を作成すると、Visio で手動で描くことなく、チーム構造、報告階層、部門間の関係を動的に可視化できます。自動レイアウトと接続管理により、データ ソースから直接、クリーンで読みやすい図表を生成できます。上記のアプローチは HR レポートを簡素化し、一貫性を向上させ、ビジネス自動化ワークフローとの統合を可能にします。
