نمودارهای سازمانی برای تجسم ساختار تیمها، بخشها و روابط گزارشدهی درون یک شرکت ضروری هستند. این نمودارها به مدیریت و کارکنان کمک میکنند تا سلسلهمراتب و روابط بین نقشها در یک سازمان را درک کنند. خودکارسازی ایجاد این نمودارها در C# به توسعهدهندگان امکان میدهد تا بهصورت پویا تصاویر را از پایگاههای داده منابع انسانی، تیمهای پروژه یا فهرستهای شرکتی تولید کنند، بدون نیاز به تلاش طراحی دستی در Visio یا سایر ابزارهای نمودارکشی.
این آموزش توضیح میدهد که چگونه بهصورت برنامهنویسی یک نمودار سازمانی در C# را با استفاده از یک کتابخانه نمودارسازی ایجاد کنید. شما یاد خواهید گرفت که گرههای سلسلهمراتبی را اضافه کنید، اشکال را با استفاده از کانکتورها متصل کنید، و نمودار را بهصورت خودکار با الگوریتم CompactTree چیدمان کنید تا ظاهر تمیز و حرفهای داشته باشد.
چرا نمودار سازمانی را بهصورت برنامهنویسی ایجاد کنیم؟
- کارکردهای HR را خودکار کنید تا هنگام تغییر پرسنل یا ساختار، نمودارها را تولید و بهروزرسانی کنید.
- نمودارهای سلسلهمراتبی واضح و استاندارد تولید کنید بدون اینکه نیاز به رسم دستی در Visio داشته باشید.
- با یکپارچهسازی تولید نمودارها در سیستمهای موجود مانند مدیریت پرسنل یا داشبوردهای گزارشگیری، زمان صرفهجویی کنید.
- با اعمال برنامهنویسیشده سبکهای اشکال، اتصالدهندهها و قوانین چیدمان، طراحی یکسان را تضمین کنید.
- نمودارها را بهصورت مستقیم به فرمت Visio (VSDX) صادر کنید تا در صورت نیاز برای اشتراکگذاری و ویرایشهای بعدی قابل استفاده باشد.
ایجاد نمودار سازمانی در C#
- کتابخانه نمودارسازی را به پروژه C# خود اضافه کنید تا به APIهای ایجاد و چیدمان Visio دسترسی داشته باشید.
- یک شیء جدید
Diagramرا مقداردهی اولیه کنید و اشکال و اتصالدهندههای پایه را از یک فایل استنسیل Visio بارگذاری کنید. - یک ساختار سلسلهمراتبی یا مجموعه دادهای که روابط سازمانی را نشان میدهد تعریف کنید.
- برای هر گره در سلسلهمراتب بهصورت پویا اشکال اضافه کنید و شناسههای آنها را برای نگاشت اتصال ذخیره کنید.
- از اتصالدهندهها برای لینک کردن اشکال فرزند به گرههای والد استفاده کنید و درخت سلسلهمراتبی را تشکیل دهید.
- یک الگوریتم چیدمان خودکار (مانند 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 فراهم میکند. با چیدمان خودکار و مدیریت اتصالات، میتوانید نمودارهای تمیز و قابل خواندن را مستقیماً از منابع داده تولید کنید. رویکرد نشان داده شده در بالا گزارشدهی منابع انسانی را سادهسازی میکند، ثبات را بهبود میبخشد و امکان ادغام با جریانهای کاری خودکار کسبوکار را فراهم میسازد.
