Aracılığıyla paylaş


Öğe oluşturma ve taşıma özelleştirme

Öğenin başka araç kutusundan veya bir yapıştırma sürüklenerek veya işlem taşımak izin verebilirsiniz.Belirttiğiniz ilişkileri kullanarak hedef öğelerine bağlı taşınan öğeler olabilir.

Bir öğenin birleştirme yönergesi (emd) bir modeli öğe olduğunda ne olacağını belirtir birleştirilmiş başka bir modeli öğe içine.Böyle olduğunda:

  • Diyagramı veya şekil Toolbox'dan kullanıcı fare ile sürüklendiğinde.

  • Kullanıcı bir explorer veya bir bölme Şekil Ekle menüsünü kullanarak bir öğe oluşturur.

  • Kullanıcı bir öğeyi bir swimlane diğerine taşır.

  • Kullanıcı bir öğeyi yapıştırır.

  • Program kodunuzu öğesi birleştirme yönergesi çağırır.

Oluşturma işlemleri kopyalama işlemlerini farklı görünse aslında aynı şekilde çalışırlar.Örneğin bir öğe eklendiğinde, araç kutusundan, bir prototip çoğaltılır.Prototip modele modeli başka bir bölümünden kopyalanan öğeleri aynı şekilde birleştirilir.

Bir emd nasıl bir nesne veya nesne grubunun belirli bir konuma modelinde birleştirileceğine karar sorumluluğundadır.Özellikle, birleştirilmiş Grup modeline bağlamak için oluşturulacak ilişkiler karar verir.Özelliklerini ayarlamak ve ek nesneler oluşturmak için de özelleştirebilirsiniz.

Rol öğesi birleştirme bir yönergesi

DSL-EMD_Merge

Gömme bir ilişkiyi tanımlarken bir emd otomatik olarak oluşturulur.Kullanıcıların yeni alt örneklere üst eklediğinizde, bu varsayılan emd ilişkinin bir örneğini oluşturur.Bu varsayılan EMDs örneğin özel kod ekleyerek değiştirebilirsiniz.

dsl definition birleştirilmiş ve alıcı sınıfları farklı birleşimlerini yapıştırın veya sürükleyin kullanıcılara izin vermek için kendi EMDs da ekleyebilirsiniz.

Bir öğenin birleştirme yönergesi tanımlama

Etki alanı sınıfları, etki alanı ilişkilerini, şekiller, bağlayıcılar ve diyagramları öğesi birleştirme yönergeleri ekleyebilirsiniz.Ekleyebilir ya da bunları alıcı etki sınıfı altında dsl Gezgini'nde bulun.Alıcı sınıfı modeli ve üzerine yeni veya kopyalanan öğe birleştirilecek olan öğenin etki alanı sınıftır.

DSL-EMD_Details

Dizin oluşturma sınıfı alıcı sınıfının bir üyesi birleştirilmiş öğeleri etki alanı sınıfıdır.Dizin oluşturma sınıfının alt sınıflarının örneklerini da birleştirilmiş bu emd ayarladığınız sürece alt sınıfları uygulanır yanlış.

Birleştirme yönergesi iki tür vardır:

  • A Birleştirme işlemi yönergesi ile yeni öğe bağlı ağacına ilişkileri belirtir.

  • A İleri birleştirme yönergesini yeni öğe başka bir alıcı öğesi için genellikle bir üst yönlendirir.

Yönergeleri birleştirmek için özel kod ekleyebilirsiniz:

  • Set kullandığı özel kabul dizin oluşturma öğesinin belirli bir örneğini hedef öğe birleştirilmiş olup olmadığını belirlemek üzere kendi kodunuzu eklemek için.Kullanıcı Toolbox'tan sürüklendiğinde, kodunuzu birleştirme izin vermiyor, "geçersiz" işaretçi gösterir.

    Örneğin, alan öğenin belirli bir durumda olduğunda birleştirme izin verebilir.

  • Set kullandığı özel birleştirme eklemek için birleştirme gerçekleştirildiğinde modeline yapılan değişiklikleri tanımlamak için kendi kodu sağlar.

    Örneğin, yeni model konumunda verileri kullanarak birleştirilen öğe özelliklerini ayarlayabilirsiniz.

[!NOT]

Özel birleştirme kodu yazarsanız, bu emd kullanılarak gerçekleştirilen tek birleştirmelerinin etkiler.Nesne aynı türde birleştirme diğer EMDs varsa veya emd kullanmadan bu nesneleri oluşturan diğer özel kod ise, sonra bunlar özel birleştirme kodunuz tarafından etkilenmez.

Yeni bir öğe veya yeni iş ilişkileri özel kodunuz tarafından her zaman işlendiğinden emin olmak istiyorsanız, tanımlama düşünün bir AddRule gömme ilişkiyi ve bir DeleteRule öðenin etki sınıfı.Daha fazla bilgi için bkz. Kuralları modelindeki değişiklikleri yaymak.

Örnek: özel kodu olmadan bir emd tanımlama

Aşağıdaki örnek bir öğe ve bağlayıcı aynı anda varolan bir şekli üzerine sürükleyerek oluşturmalarını sağlar.Örnek bir emd dsl tanımına ekler.Bu değişikliği önce kullanıcılar Araçlar Diyagram üzerine, ancak varolan şekillere değil üzerine sürükleyebilirsiniz.

Kullanıcılar, diğer öğeleri öğelerini de yapıştırabilirsiniz.

Aynı anda bir öğe ile bir bağlayıcı oluşturun kullanıcıların izin vermek için

  1. Yeni bir dsl kullanarak oluşturduğunuz En az dil çözüm şablonu.

    Bu dsl çalıştırdığınızda, şekilleri ve bağlayıcıları şekilleri arasında oluşturmanızı sağlar.Yeni bir sürükleyemezsiniz ExampleElement Toolbox'dan alınıp varolan bir şekli şekli.

  2. Kullanıcıların öğelerini birleştirmek için ExampleElement şekilleri oluşturmanızı, yeni bir emd ExampleElement etki alanı sınıfı:

    1. İçinde dsl Explorer, genişletme Etki alanı sınıfları.Sağ ExampleElement 'ı Yeni öğe birleştirme yönergesini ekleyin.

    2. Emin olun dsl ayrıntıları penceredir açık, böylece yeni emd ayrıntılarını görebilirsiniz.(Menü: View, diğer Windows, dsl ayrıntıları.)

  3. Set dizin oluşturma sınıfı üzerine hangi sınıfa öğelerinin birleştirilmiş tanımlamak için dsl Ayrıntıları penceresinde, ExampleElement nesneler.

    Bu örnek, select ExampleElements, böylece kullanıcı, varolan öğeler yeni öğeler sürükleyebilirsiniz.

    Dizin oluşturma sınıfı adı dsl Explorer'da emd olur dikkat edin.

  4. Altında bağlantılar oluşturarak birleştirme işlemi, iki yolu Ekle:

    1. Bir yol, yeni öğe üst modele bağlar.Girmek için gereksinim duyduğunuz yol ifadesi varolan öğesinden yukarı gömme ilişkisi üst modele gider.Son olarak, yeni öğe atanacak yeni bağlantıyı rolü belirtir.Yol aşağıdaki gibidir:

      ExampleModelHasElements.ExampleModel/!ExampleModel/.Elements

    2. Başka bir yol yeni öğenin varolan bir öğeye bağlar.Yol ifadesi başvuru ilişki ve yeni öğe atanacak rolü belirtir.Bu yol aşağıdaki gibidir:

      ExampleElementReferencesTargets.Sources

    Her yolu oluşturmak için yolu gezinti aracını kullanabilirsiniz:

    1. Altında işlem birleştirme oluşturarak yolları bağlantılara,'ı < yol Ekle >.

    2. Liste öğesinin sağında açılan oku tıklatın.Ağaç görünümünde görünür.

    3. Belirtmek istediğiniz yolu oluşturmak için ağacındaki düğümlerini açın.

  5. dsl sınayın:

    1. Yeniden ve çözümü çalıştırmak için F5 tuşuna basın.

      Yeni dsl tanımına uyacak şekilde metin şablonlardan oluşturulan kodu için yeniden inşa etmek normalden daha uzun sürer.

    2. Zaman Deneysel örneğini Visual Studio olan başladı, dsl, model dosyasını açın.Bazı örnek öğeleri oluşturun.

    3. Sürükleyin Örnek öğe aracı varolan bir şekli üzerine.

      Yeni şekli görünür ve varolan bir şekli bir bağlayıcı ile bağlantılı.

    4. Varolan bir şekli kopyalayın.Başka bir şekil seçin ve yapıştırın.

      İlk şekli bir kopyası oluşturulur.Yeni bir adı vardır ve bir bağlayıcı ikinci şekille bağlantılı.

Bu yordamdan gelen aşağıdaki noktaları unutmayın:

  • Öğe yönergeleri birleştirme oluşturarak, herhangi bir sınıfın herhangi bir diğerini Benimse öğesinin izin verebilirsiniz.emd alıcı etki alanı sınıfında oluşturulur ve kabul edilen etki alanı sınıf belirtilen Dizin sınıf alan.

  • Yollar tanımlayarak, hangi bağlantıları gerektiğini belirtebilirsiniz varolan modeli için yeni öğe bağlanmak için kullanılabilir.

    Belirlediğiniz bağlantılar bir gömme ilişki içermelidir.

  • emd oluşturmaya araç ve ayrıca yapıştırma işlemlerini etkiler.

    Yeni öğeler oluşturan özel kod yazıyorsanız, açıkça emd kullanarak çağırabilirsiniz ElementOperations.Merge yöntemi.Bu, kodunuzun yeni öğeler modele diğer işlemleri aynı şekilde bağlar olduğunu emin olur.Daha fazla bilgi için bkz. Kopyalama davranışını özelleştirme.

Örnek: Bir emd kabul özel kod ekleme

Bir emd özel kod ekleyerek daha karmaşık birleştirme davranışı tanımlayabilirsiniz.Bu basit örnek, kullanıcının birden çok öğe sabit sayıda Diyagram ekleme engeller.Örneğin, gömme bir ilişki eşlik eden emd varsayılan değiştirir.

Ne kısıtlamak üzere özel kabul kod yazmak için kullanıcı ekleyebilirsiniz

  1. dsl kullanarak oluşturduğunuz En az dil çözüm şablonu.dsl Definition diyagramı açarsınız.

  2. dsl Explorer'da genişletin Etki alanı sınıfları, ExampleModel, Öğesi birleştirme yönergeleri.Adlı öğesi birleştirme yönergesini seçin ExampleElement.

    Bu emd kullanıcı yeni nasıl oluşturup oluşturamayacağınızı kontrol ExampleElement örneğin Toolbox'tan sürükleyerek modeli nesneleri.

  3. İçinde dsl ayrıntıları pencere, seçme kullandığı özel kabul.

  4. Çözümü yeniden oluşturun.Modelinden oluşturulan kodu güncelleştirilecek çünkü bu normalden daha uzun sürer.

    Bir derleme hatası bildirilen, benzer olacaktır: "Company.ElementMergeSample.ExampleElement için bir tanım içermeyen CanMergeExampleElement…"

    Yöntemi uygulamalısınız CanMergeExampleElement.

  5. Yeni bir kod dosyası oluşturmak Dsl proje.İçeriğini aşağıdaki kodla değiştirin ve projenizi ad alanı için ad alanını değiştirin.

    using Microsoft.VisualStudio.Modeling;
    
    namespace Company.ElementMergeSample // EDIT.
    {
      partial class ExampleModel
      {
        /// <summary>
        /// Called whenever an ExampleElement is to be merged into this ExampleModel.
        /// This happens when the user pastes an ExampleElement
        /// or drags from the toolbox.
        /// Determines whether the merge is allowed.
        /// </summary>
        /// <param name="rootElement">The root element in the merging EGP.</param>
        /// <param name="elementGroupPrototype">The EGP that the user wants to merge.</param>
        /// <returns>True if the merge is allowed</returns>
        private bool CanMergeExampleElement(ProtoElementBase rootElement, ElementGroupPrototype elementGroupPrototype)
        {
          // Allow no more than 4 elements to be added:
          return this.Elements.Count < 4;
        }
      }
    }
    

    Bu basit örnek üst modele birleştirilmiş öğelerin sayısını sınırlar.Daha ilginç koşulları yöntemi özellikleri ve alıcı nesnesinin bağlantıları inceleyebilirsiniz.İçinde gerçekleştirilen birleştirme öğelerinin özelliklerini inceleyebilirsiniz bir ElementGroupPrototype.ElementGroupPrototypes hakkında daha fazla bilgi için, bkz. Kopyalama davranışını özelleştirme.Bir modeli okur kod yazma hakkında daha fazla bilgi için bkz: Gezinme ve Program kodunda bir modeli güncelleştiriliyor.

  6. dsl sınayın:

    1. Çözüm yeniden inşa etmek için F5 tuşuna basın.Zaman Deneysel örneğini Visual Studio açar, dsl örneğini açın.

    2. Yeni öğeler çeşitli yollarla özelliği oluşturmalısınız:

      1. Sürükleyin Örnek öğe üzerine çizim aracı.

      2. İçinde Örnek Model Explorer, kök düğümünü sağ tıklatın ve sonra ' Yeni örnek öğe ekleme.

      3. Kopyalama ve Diyagram üzerinde bir öğe yapıştırabilirsiniz.

    3. Modele dörtten fazla öğeleri eklemek için aşağıdaki yollardan herhangi birini kullanamazsınız doğrulayın.Bunun nedeni tümü öğesi birleştirme yönergesini kullanın.

Örnek: Bir emd özel birleştirme kod ekleme

Özel birleştirme kodunda kullanıcı bir aracı sürüklediğinde veya öğenin yapıştırır neler tanımlayabilirsiniz.Özel birleştirme tanımlamak için iki yol vardır:

  1. Set Kullandığı özel birleştirme ve gerekli kodu sağlayın.Kodunuzu oluşturulan birleştirme kodu yerine geçer.Tamamen birleştirme yaptıklarını yeniden tanımlamak istiyorsanız bu seçeneği kullanın.

  2. Geçersiz kılma MergeRelate yöntemi ve isteğe bağlı olarak MergeDisconnect yöntemi.Bunu yapmak için ayarlamalısınız Oluşturduğu çift türetilen etki alanı sınıfının özelliği.Kodunuzu, base sınıfında üretilen birleştirme kod çağırabilir.Birleştirme işlemini gerçekleştirdikten sonra ek işlemleri yapmak istiyorsanız, bu seçeneği kullanın.

Bu yaklaşım, yalnızca bu emd kullanılarak gerçekleştirilen birleştirmelerinin etkiler.Tüm yolları, birleştirilen öğe oluşturulabilir etkilenmesini istediğiniz, alternatif tanımlamak için ise bir AddRule gömme ilişkiyi ve bir DeleteRule etki alanına birleştirilmiş sınıf üzerinde.Daha fazla bilgi için bkz. Kuralları modelindeki değişiklikleri yaymak.

MergeRelate geçersiz kılmak için

  1. dsl tanımında kod eklemek istediğiniz emd tanımlı olduğundan emin olun.İsterseniz, yollar ekleyebilir ve tanımlamak önceki bölümlerde açıklandığı gibi özel kod kabul.

  2. DslDefinition şemada, birleştirme alıcı sınıfı seçin.Genellikle, kaynak sonunda gömme bir ilişki sınıfıdır.

    Örneğin, en az dil çözümden oluşturulan bir dsl içinde seçin ExampleModel.

  3. İçinde özelliklerini penceresinde, Oluşturduğu çift türetilen için doğru.

  4. Çözümü yeniden oluşturun.

  5. İçeriğini incelemek Dsl\Generated Files\DomainClasses.cs.Arama yöntemleri adlı MergeRelate ve bunların içeriğini inceleyin.Bu, kendi sürümleri yazmanıza yardımcı olur.

  6. Yeni bir kod dosyası alıcı sınıfı için kısmi bir sınıf yazmak ve geçersiz kılma MergeRelate yöntemi.Temel yöntemi çağırmak unutmayın.Örne?in:

      partial class ExampleModel
      {
        /// <summary>
        /// Called when the user drags or pastes an ExampleElement onto the diagram.
        /// Sets the time of day as the name.
        /// </summary>
        /// <param name="sourceElement">Element to be added</param>
        /// <param name="elementGroup">Elements to be merged</param>
        protected override void MergeRelate(ModelElement sourceElement, ElementGroup elementGroup)
        {
          // Connect the element according to the EMD:
          base.MergeRelate(sourceElement, elementGroup);
    
          // Custom actions: 
          ExampleElement mergingElement = sourceElement as ExampleElement;
          if (mergingElement != null)
          {
            mergingElement.Name = DateTime.Now.ToLongTimeString();
          }
        }
      }
    

Özel birleştirme kod yazmak için

  1. De Dsl\Generated Code\DomainClasses.cs, yöntemleri adlı İnceleme MergeRelate.Bu yöntemler, yeni bir öğe ve varolan modeli arasında bağlantılar oluşturabilirsiniz.

    Ayrıca, yöntemleri adlı İnceleme MergeDisconnect.Silinecek olduğunda bu yöntemler modelinden bir öğenin bağlantısını.

  2. İçinde dsl Explorerseçin veya özelleştirmek istediğiniz öğenin birleştirme yönergesi oluşturmak.İçinde dsl ayrıntıları penceresinde, Kullandığı özel birleştirme.

    Bu seçeneği ayarladığınızda, Birleştirme işlemi ve İleri birleştirme seçenekler yoksayılır.Kodunuzu yerine kullanılır.

  3. Çözümü yeniden oluşturun.Modelinden oluşturulan kod dosyaları güncelleştirilir nedeniyle normalden daha uzun sürer.

    Hata iletileri görüntülenir.Yaratılan kodu içindeki yönergeleri görmek için hata iletileri'ni çift tıklatın.Bu yönergeler, iki yöntem vermesini isteyin MergeRelateYourDomainClass ve MergeDisconnectYourDomainClass

  4. Kısmi sınıf tanımında ayrı kod dosyasında yöntem yazacaksınız.Daha önce incelenen örnekler gerekenler önermesi gerektiğini.

Nesnelerin ve ilişkilerin doğrudan yaratan kodu özel birleştirme kodunu etkilemez ve diğer EMDs etkilemez.Ek değişiklikleri öğenin nasıl oluşturulduğunu bakılmaksızın uygulanır emin olmak için yazma düşünün bir AddRule ve bir DeleteRule yerine.Daha fazla bilgi için bkz. Kuralları modelindeki değişiklikleri yaymak.

Birleştirme işlemini yeniden yönlendirme

İleriye doğru birleştirme yönergesi birleştirme işleminin hedef yönlendirir.Genellikle, yeni hedef ilk hedef gömme üstüdür.

Örneğin, bileşen Diyagram şablonuyla oluşturulmuş bir dsl bağlantı noktaları bileşenlerinde gömülür.Bağlantı noktaları, bileşen şeklinde kenarındaki küçük şekiller olarak görüntülenir.Kullanıcı, bağlantı noktası aracı bileşeni şekli sürükleyerek bağlantı noktalarını oluşturur.Ancak bazı durumlarda, kullanıcı, bağlantı noktası aracı bileşeni yerine varolan bir bağlantı noktası üzerine yanlışlıkla sürüklediğinde ve işlem başarısız olur.Birkaç varolan bağlantı olmadığında kolay bir hata budur.Bu kullanıcıya yardımcı olmak için bağlantı noktaları varolan bağlantı noktasını sürüklenerek, ancak ana bileşeni yeniden yönlendirilen eylem izin verebilirsiniz.Hedef öğe bileşen yokmuş gibi işlem çalışır.

Bileşen modeli çözümünde ileriye doğru birleştirme yönergesi oluşturabilirsiniz.Derleme ve özgün çözümünü çalıştırırsanız, kullanıcıların herhangi bir sayıda sürükleyebilirsiniz görmelisiniz Giriş bağlantı noktası veya Çıkış bağlantı noktası öğelerden araç için bir Bileşen öğesi.Ancak, bunlar varolan bir bağlantı noktasına bir bağlantı noktası sürükleyemezsiniz.Bu taşıma etkinleştirilmemiş kullanılamaz işaretçi onları uyarır.Ancak, bir bağlantı, farkında olmadan, böylece bir ileriye doğru birleştirme yönergesi oluşturabilirsiniz varolan üzerinde bırakılan Giriş bağlantı noktası iletilir Bileşen öğesi.

İleriye doğru birleştirme yönergesi oluşturmak için

  1. Oluşturma bir Etki Alanına Özel Dil Araçları bileşen modeli şablonu kullanarak çözüm.

  2. Görüntü dsl Explorer DslDefinition.dsl açarak.

  3. İçinde dsl Explorer, genişletme Etki alanı sınıfları.

  4. ComponentPort soyut etki alanı sınıftır taban sınıfının InPort ve OutPort.Sağ ComponentPortYeni öğe birleştirme yönergesini ekleyin.

    Yeni bir Öğesi birleştirme yönergesi düğümü altında görünür Öğesi birleştirme yönergeleri düğüm.

  5. Seçin Öğesi birleştirme yönergesi düğümü ve açık dsl ayrıntıları pencere.

  6. Dizin oluşturma sınıfı listesinde seçin ComponentPort.

  7. Seçin farklı etki sınıfına birleştirme iletmek.

  8. Yol seçim listesinde genişletme ComponentPort, genişletme ComponentHasPortsseçip Bileşen.

    Yeni yol, buna benzer olmalıdır:

    ComponentHasPorts.Component/!Bileşen

  9. Çözüm kaydedin ve sonra sağdaki düğmeyi tıklatarak şablonları dönüştürme Solution Explorer araç.

  10. Oluşturup çözüm çalıştırın.Yeni bir örneğini Visual Studio görünür.

  11. İçinde Solution Explorer, Sample.mydsl açın.Diyagram ve ComponentLanguage araç görünür.

  12. Sürükle bir Giriş bağlantı noktası dan araç başka bir Giriş bağlantı noktası Daha sonra sürükleyin bir OutputPort için bir InputPort ve daha sonra bir OutputPort.

    Kullanılamayan işaretçi görmemeniz gerekir ve yeni açılan görüntüleyebilmeniz gerektiğine Giriş bağlantı noktası varolan bir.Yeni seçin Giriş bağlantı noktası ve onu başka bir noktaya sürükleyin Bileşen.

Ayrıca bkz.

Kavramlar

Gezinme ve Program kodunda bir modeli güncelleştiriliyor

Araçlar ve araç özelleştirme

Diğer Kaynaklar

Devre diyagramları örnek dsl