Organizasyon şemaları, bir şirket içindeki ekiplerin, departmanların ve raporlama ilişkilerinin yapısını görselleştirmek için gereklidir. Yönetim ve çalışanların bir organizasyondaki hiyerarşi ve roller arasındaki ilişkileri anlamalarına yardımcı olur. Bu şemaların C#’ta otomatik olarak oluşturulması, geliştiricilerin HR veritabanlarından, proje ekiplerinden veya kurumsal dizinlerden görselleri manuel tasarım çabası olmadan, Visio veya diğer diyagram araçları kullanmadan dinamik olarak üretmesini sağlar.

Bu öğreticide, bir diyagram kütüphanesini programlı olarak kullanarak C# ile bir organizasyon şeması oluşturma nasıl yapılacağını açıklıyoruz. Hiyerarşik düğümler eklemeyi, şekilleri bağlayıcılar kullanarak bağlamayı ve temiz ve profesyonel bir görünüm için CompactTree algoritmasıyla şemayı otomatik olarak yerleştirmeyi öğreneceksiniz.

Neden Programlı Olarak Bir Organizasyon Şeması Oluşturmalısınız?

  • Personel veya yapı değişiklikleri gerçekleştiğinde grafik oluşturmak ve güncellemek için İK iş akışlarını otomatikleştirin.
  • Visio’da manuel olarak çizmeye gerek kalmadan net ve standart hiyerarşi diyagramları oluşturun.
  • Çalışan yönetimi veya raporlama panoları gibi mevcut sistemlere grafik oluşturmayı entegre ederek zaman kazanın.
  • Şekil stillerini, bağlayıcıları ve düzen kurallarını programlı olarak uygulayarak tutarlı bir tasarım sağlayın.
  • Grafikleri doğrudan Visio (VSDX) formatına dışa aktararak paylaşın ve gerektiğinde daha fazla düzenleme yapın.

C# ile Organizasyon Şeması Oluşturma

  1. Visio oluşturma ve yerleşim API’lerine erişmek için diyagram kütüphanesini C# projenize ekleyin.
  2. Yeni bir Diagram nesnesi başlatın ve bir Visio şablon dosyasından temel şekilleri ve bağlayıcıları yükleyin.
  3. Organizasyonel ilişkileri temsil eden hiyerarşik bir yapı veya veri kümesi tanımlayın.
  4. Hiyerarşideki her düğüm için şekilleri dinamik olarak ekleyin ve bağlantı eşlemesi için kimliklerini saklayın.
  5. Çocuk şekilleri ebeveyn düğümlerine bağlamak için bağlayıcıları kullanın, böylece hiyerarşik ağaç oluşur.
  6. Düğümleri düzenli bir şekilde organize etmek için (örneğin CompactTree) otomatik bir yerleşim algoritması uygulayın.
  7. Oluşturulan diyagramı Visio VSDX formatında kaydedin.
// 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);

Bu kod örneği, bir organizasyon hiyerarşisi oluşturur, ebeveyn ve çocuk düğümleri dinamik bağlayıcılar kullanarak bağlar ve temiz bir yapı için otomatik CompactTree düzeni uygular. Her şekil, hiyerarşi listesine göre etiketlenmiş bir organizasyon düğümünü temsil eder ve son çıktı Visio VSDX dosyası olarak kaydedilir.

Sonuç

C#’ta organizasyon şemaları oluşturmak, ekip yapıları, raporlama hiyerarşileri ve departman ilişkilerini Visio’da manuel olarak çizmeye gerek kalmadan dinamik bir şekilde görselleştirmenin bir yolunu sunar. Otomatik yerleşim ve bağlantı yönetimi sayesinde, veri kaynaklarından doğrudan temiz ve okunabilir şemalar oluşturabilirsiniz. Yukarıda gösterilen yaklaşım, İK raporlamasını basitleştirir, tutarlılığı artırır ve iş otomasyonu iş akışlarıyla entegrasyonu sağlar.

İlgili