조직도는 회사 내 팀, 부서 및 보고 관계 구조를 시각화하는 데 필수적입니다. 이는 경영진과 직원들이 조직 내 역할 간의 계층 구조와 관계를 이해하는 데 도움을 줍니다. C#에서 이러한 차트를 자동으로 생성하면 개발자가 HR 데이터베이스, 프로젝트 팀 또는 기업 디렉터리에서 시각 자료를 동적으로 생성할 수 있어 Visio나 기타 다이어그램 도구에서 수동으로 디자인할 필요가 없습니다.
이 튜토리얼에서는 다이어그램 라이브러리를 사용하여 C#에서 조직도 생성을 프로그래밍 방식으로 설명합니다. 계층형 노드를 추가하고, 커넥터를 사용해 도형을 연결하며, CompactTree 알고리즘을 활용해 차트를 자동으로 레이아웃하여 깔끔하고 전문적인 외관을 얻는 방법을 배울 수 있습니다.
조직도를 프로그래밍 방식으로 만드는 이유는?
- 인사 워크플로를 자동화하여 인원이나 구조가 변경될 때 차트를 생성하고 업데이트합니다.
- 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 보고를 간소화하고 일관성을 향상시키며 비즈니스 자동화 워크플로와의 통합을 가능하게 합니다.
