Diagram organisasi sangat penting untuk memvisualisasikan struktur tim, departemen, dan hubungan pelaporan dalam sebuah perusahaan. Mereka membantu manajemen dan karyawan memahami hierarki serta hubungan antar peran dalam sebuah organisasi. Mengotomatiskan pembuatan diagram ini dalam C# memungkinkan pengembang untuk secara dinamis menghasilkan visual dari basis data HR, tim proyek, atau direktori perusahaan tanpa upaya desain manual di Visio atau alat diagram lainnya.
Tutorial ini menjelaskan cara membuat diagram organisasi dalam C# secara programatis menggunakan perpustakaan diagram. Anda akan belajar menambahkan node hierarkis, menghubungkan bentuk menggunakan konektor, dan secara otomatis menata diagram menggunakan algoritma CompactTree untuk tampilan yang bersih dan profesional.
Mengapa Membuat Diagram Organisasi Secara Programatis?
- Mengotomatiskan alur kerja HR untuk menghasilkan dan memperbarui diagram ketika terjadi perubahan personel atau struktur.
- Membuat diagram hierarki yang jelas dan standar tanpa harus menggambar secara manual di Visio.
- Menghemat waktu dengan mengintegrasikan pembuatan diagram ke dalam sistem yang ada seperti manajemen karyawan atau dasbor pelaporan.
- Menjamin desain yang konsisten dengan menerapkan gaya bentuk, konektor, dan aturan tata letak secara programatik.
- Mengekspor diagram langsung ke format Visio (VSDX) untuk dibagikan dan diedit lebih lanjut bila diperlukan.
Buat Diagram Organisasi dalam C#
- Tambahkan pustaka diagram ke proyek C# Anda untuk mengakses API pembuatan dan tata letak Visio.
- Inisialisasi objek
Diagrambaru dan muat bentuk dasar serta penghubung dari file stensil Visio. - Definisikan struktur hierarkis atau kumpulan data yang mewakili hubungan organisasi.
- Tambahkan bentuk secara dinamis untuk setiap node dalam hierarki dan simpan ID-nya untuk pemetaan koneksi.
- Gunakan penghubung untuk menghubungkan bentuk anak ke node induk mereka, membentuk pohon hierarkis.
- Terapkan algoritma tata letak otomatis (seperti CompactTree) untuk mengatur node secara rapi.
- Simpan diagram yang dihasilkan dalam 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);
Contoh kode ini membuat hierarki organisasi, menghubungkan node induk dan anak menggunakan konektor dinamis, dan menerapkan tata letak CompactTree otomatis untuk struktur yang bersih. Setiap bentuk mewakili node organisasi yang diberi label sesuai dengan daftar hierarki, dan output akhir disimpan sebagai file Visio VSDX.
Kesimpulan
Membuat diagram organisasi dalam C# menyediakan cara dinamis untuk memvisualisasikan struktur tim, hierarki pelaporan, dan hubungan departemen tanpa harus menggambar secara manual di Visio. Dengan tata letak otomatis dan manajemen koneksi, Anda dapat menghasilkan diagram yang bersih dan mudah dibaca langsung dari sumber data. Pendekatan yang ditunjukkan di atas menyederhanakan pelaporan HR, meningkatkan konsistensi, dan memungkinkan integrasi dengan alur kerja otomatisasi bisnis.
