Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat mengizinkan elemen diseret ke elemen lain, baik dari kotak alat atau dalam operasi tempel atau pemindahan. Anda dapat menautkan elemen yang dipindahkan ke elemen target, menggunakan hubungan yang Anda tentukan.
Direktif penggabungan elemen (EMD) menentukan apa yang terjadi saat satu elemen model digabungkan ke elemen model lain. Hal ini terjadi ketika:
Pengguna menyeret dari kotak alat menjadi diagram atau bentuk.
Pengguna membuat elemen dengan menggunakan menu Tambahkan di penjelajah atau bentuk kompartemen.
Pengguna memindahkan item dari satu swimlane ke swimlane lainnya.
Pengguna menempelkan elemen.
Kode program Anda memanggil petunjuk penggabungan elemen.
Meskipun operasi pembuatan dapat tampak berbeda dari operasi penyalinan, operasi tersebut benar-benar bekerja dengan cara yang sama. Saat elemen ditambahkan, misalnya dari kotak alat, prototipenya direplikasi. Prototipe digabungkan ke dalam model dengan cara yang sama seperti elemen yang telah disalin dari bagian lain dari model.
Tanggung jawab EMD adalah memutuskan cara objek atau grup objek harus digabungkan ke lokasi tertentu dalam model. Secara khusus, EMD memutuskan hubungan apa yang harus dibuat untuk menautkan grup yang digabungkan ke dalam model. Anda juga dapat menyesuaikannya untuk mengatur properti dan membuat objek tambahan.

EMD dibuat secara otomatis saat Anda menentukan hubungan penyematan. EMD default ini membuat instans hubungan saat pengguna menambahkan instans turunan baru ke induk. Anda dapat mengubah EMD default ini, misalnya dengan menambahkan kode kustom.
Anda juga dapat menambahkan EMD Anda sendiri dalam definisi DSL untuk memungkinkan pengguna menyeret atau menempelkan kombinasi kelas gabungan dan penerima yang berbeda.
Menentukan Petunjuk Penggabungan Elemen
Anda dapat menambahkan direktif penggabungan elemen ke kelas domain, hubungan domain, bentuk, konektor, dan diagram. Anda dapat menambahkan atau menemukannya di DSL Explorer di bawah kelas domain penerima. Kelas penerima adalah kelas domain elemen yang sudah ada dalam model, dan tempat elemen baru atau yang disalin akan digabungkan.

Kelas Pengindeksan adalah kelas domain elemen yang dapat digabungkan menjadi anggota kelas penerima. Instans subkelas dari Kelas Pengindeksan juga akan digabungkan oleh EMD ini, kecuali Anda mengatur Berlaku untuk subkelas ke False.
Ada dua jenis petunjuk penggabungan:
Direktif Proses Penggabungan menentukan hubungan yang harus dimiliki elemen baru saat ditautkan ke pohon.
Direktif Alihkan Penggabungan mengalihkan elemen baru ke elemen penerima lain, biasanya induk.
Anda dapat menambahkan kode kustom untuk menggabungkan direktif:
Atur Gunakan penerimaan kustom guna menambahkan kode Anda sendiri untuk menentukan jika instans tertentu dari elemen pengindeksan harus digabungkan ke dalam elemen target. Saat pengguna menyeret dari kotak alat, penunjuk "tidak valid" menunjukkan jika kode melarang penggabungan.
Misalnya, Anda dapat mengizinkan penggabungan hanya saat elemen penerima berada dalam status tertentu.
Atur Menggunakan penggabungan kustom guna menambahkan kode sendiri untuk menentukan perubahan yang dibuat pada model saat penggabungan dilakukan.
Misalnya, Anda dapat mengatur properti dalam elemen gabungan dengan menggunakan data dari lokasi barunya dalam model.
Catatan
Jika Anda menulis kode penggabungan kustom, kode tersebut hanya memengaruhi penggabungan yang dilakukan dengan menggunakan EMD ini. Jika ada EMD lain yang menggabungkan jenis objek yang sama, atau jika ada kode kustom lain yang membuat objek ini tanpa menggunakan EMD, maka mereka tidak akan terpengaruh oleh kode penggabungan kustom Anda.
Jika Anda ingin memastikan bahwa elemen baru atau hubungan baru selalu diproses oleh kode kustom Anda, pertimbangkan untuk menentukan AddRule pada hubungan penyematan dan DeleteRule pada kelas domain elemen. Untuk informasi selengkapnya, lihat Aturan Menyebarkan Perubahan Dalam Model.
Contoh: Menentukan EMD tanpa kode kustom
Contoh berikut memungkinkan pengguna membuat elemen dan konektor secara bersamaan dengan menyeret dari kotak alat ke bentuk yang ada. Contoh tersebut menambahkan EMD ke Definisi DSL. Sebelum modifikasi ini, pengguna dapat menyeret alat ke diagram, tetapi tidak ke bentuk yang ada.
Pengguna juga dapat menempelkan elemen ke elemen lain.
Untuk memungkinkan pengguna membuat elemen dan konektor secara bersamaan
Buat DSL baru dengan menggunakan templat solusi Bahasa Minimal.
Saat Anda menjalankan DSL, DSL ini memungkinkan Anda membuat bentuk dan konektor di antara bentuk. Anda tidak dapat menyeret bentuk ExampleElement baru dari kotak alat ke bentuk yang sudah ada.
Untuk memungkinkan pengguna menggabungkan elemen ke bentuk
ExampleElement, buat EMD baru di kelas domainExampleElement:Di Penjelajah DSL, perluas Kelas Domain. Klik kanan
ExampleElementlalu klik Tambahkan Direktif Penggabungan Elemen Baru.Pastikan jendela Detail DSL terbuka, sehingga Anda dapat melihat detail EMD baru. (Menu: Tampilan, Jendela Lain, Detail DSL.)
Atur kelas Pengindeksan di jendela Detail DSL, untuk menentukan kelas elemen apa yang dapat digabungkan ke objek
ExampleElement.Untuk contoh ini, pilih
ExampleElements, sehingga pengguna dapat menyeret elemen baru ke elemen yang ada.Perhatikan bahwa kelas Pengindeksan menjadi nama EMD di Penjelajah DSL.
Di bawah Proses penggabungan dengan membuat link, tambahkan dua jalur:
Satu jalur menautkan elemen baru ke model induk. Ekspresi jalur yang perlu Anda masukkan menavigasi dari elemen yang ada, naik melalui hubungan penyematan ke model induk. Terakhir, ekspresi jalur menentukan peran dalam link baru tempat elemen baru akan ditetapkan. Jalurnya adalah sebagai berikut:
ExampleModelHasElements.ExampleModel/!ExampleModel/.ElementsJalur lain menautkan elemen baru ke elemen yang ada. Ekspresi jalur menentukan hubungan referensi dan peran tempat elemen baru akan ditetapkan. Jalur ini adalah sebagai berikut:
ExampleElementReferencesTargets.SourcesAnda dapat menggunakan alat navigasi jalur untuk membuat setiap jalur:
Di bawah Proses penggabungan dengan membuat link di jalur, klik <tambahkan jalur>.
Klik panah menurun di sebelah kanan item daftar. Tampilan pohon akan muncul.
Perluas simpul di pohon untuk membentuk jalur yang ingin Anda tentukan.
Uji DSL:
Tekan F5 untuk membangun ulang dan menjalankan solusi.
Pembangunan ulang akan memakan waktu lebih lama dari biasanya karena kode yang dihasilkan akan diperbarui dari templat teks agar sesuai dengan Definisi DSL baru.
Ketika instans eksperimental Visual Studio telah dimulai, buka file model DSL Anda. Buat beberapa elemen contoh.
Seret dari alat Elemen Contoh ke bentuk yang sudah ada.
Bentuk baru akan muncul, dan ditautkan ke bentuk yang sudah ada dengan konektor.
Salin bentuk yang sudah ada. Pilih bentuk lain dan tempelkan.
Salinan bentuk pertama dibuat. Bentuk ini memiliki nama baru dan ditautkan ke bentuk kedua dengan konektor.
Perhatikan poin-poin berikut pada prosedur ini:
Dengan membuat Direktif Penggabungan Elemen, Anda dapat mengizinkan kelas elemen apa pun untuk menerima yang lain. EMD dibuat di kelas domain penerima, dan kelas domain yang diterima ditentukan di bidang Kelas indeks.
Dengan menentukan jalur, Anda dapat menentukan link yang harus digunakan untuk menyambungkan elemen baru ke model yang ada.
Tautan yang Anda tentukan harus menyertakan satu hubungan penyematan.
EMD memengaruhi pembuatan dari kotak alat dan juga operasi tempel.
Jika Anda menulis kode kustom yang membuat elemen baru, Anda dapat memanggil EMD secara eksplisit dengan menggunakan metode
ElementOperations.Merge. Ini memastikan bahwa kode menautkan elemen baru ke dalam model dengan cara yang sama seperti operasi lain. Untuk informasi selengkapnya, lihat Menyesuaikan Perilaku Salin.
Contoh: Menambahkan kode Penerimaan Kustom ke EMD
Dengan menambahkan kode kustom ke EMD, Anda dapat menentukan perilaku penggabungan yang lebih kompleks. Contoh sederhana ini mencegah pengguna menambahkan lebih dari jumlah elemen tetap ke diagram. Contoh terebut memodifikasi EMD default yang menyertai hubungan penyematan.
Untuk menulis kode Penerimaan Kustom guna membatasi apa yang dapat ditambahkan pengguna
Buat DSL dengan menggunakan templat solusi Bahasa Minimal. Buka diagram Definisi DSL.
Di DSL Explorer, perluas Kelas Domain,
ExampleModel, Petunjuk Penggabungan Elemen. Pilih petunjuk penggabungan elemen yang diberi namaExampleElement.EMD ini mengontrol cara pengguna dapat membuat objek
ExampleElementbaru dalam model, misalnya dengan menyeret dari kotak alat.Di jendela Detail DSL, pilih Gunakan terima kustom.
Bangun kembali solusinya. Ini akan memakan waktu lebih lama dari biasanya karena kode yang dihasilkan akan diperbarui dari model.
Kesalahan build akan dilaporkan, mirip dengan: "Company.ElementMergeSample.ExampleElement yang tidak berisi definisi untuk CanMergeExampleElement..."
Anda harus menerapkan metode
CanMergeExampleElement.Buat file kode baru di proyek Dsl. Ganti kontennya dengan kode berikut dan ubah namespace layanan menjadi namespace layanan proyek Anda.
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; } } }Contoh sederhana ini membatasi jumlah elemen yang dapat digabungkan ke dalam model induk. Untuk kondisi yang lebih menarik, metode ini dapat memeriksa salah satu properti dan link objek penerima. Metode ini juga dapat memeriksa properti elemen penggabungan yang dibawa dalam ElementGroupPrototype. Untuk informasi selengkapnya tentang
ElementGroupPrototypes, lihat Menyesuaikan Perilaku Salin. Untuk informasi selengkapnya tentang cara menulis kode yang membaca model, lihat Menavigasi dan Memperbarui Model dalam Kode Program.Uji DSL:
Tekan F5 untuk membangun ulang solution. Saat instans eksperimental Visual Studio terbuka, buka instans DSL Anda.
Buat elemen baru dengan beberapa cara:
Seret dari alat Elemen Contoh menjadi diagram.
Di Penjelajah Model Contoh, klik kanan simpul akar lalu klik Tambahkan Elemen Contoh Baru.
Salin dan tempel elemen pada diagram.
Verifikasi bahwa Anda tidak dapat menggunakan salah satu cara ini untuk menambahkan lebih dari empat elemen ke model tersebut. Ini karena semuanya menggunakan Petunjuk Penggabungan Elemen.
Contoh: Menambahkan kode Penggabungan Kustom ke EMD
Dalam kode penggabungan kustom, Anda dapat menentukan apa yang terjadi saat pengguna menyeret alat atau menempelkan ke elemen. Ada dua cara untuk mendefinisikan penggabungan kustom:
Atur Gunakan Penggabungan Kustom dan berikan kode yang diperlukan. Kode Anda akn menggantikan kode penggabungan yang dihasilkan. Gunakan opsi ini jika Anda ingin sepenuhnya menentukan ulang apa yang dilakukan penggabungan.
Ambil alih metode
MergeRelate, dan metodeMergeDisconnectsecara opsional. Untuk melakukan ini, Anda harus mengatur properti Hasilkan Turunan Ganda dari kelas domain. Kode Anda dapat memanggil kode penggabungan yang dihasilkan di kelas dasar. Gunakan opsi ini jika Anda ingin melakukan operasi tambahan setelah penggabungan dilakukan.Pendekatan ini hanya memengaruhi penggabungan yang dilakukan dengan menggunakan EMD ini. Jika Anda ingin memengaruhi semua cara saat elemen penggabungan dapat dibuat, alternatifnya adalah menentukan
AddRulepada hubungan penyematan danDeleteRulepada kelas domain penggabungan. Untuk informasi selengkapnya, lihat Aturan Menyebarkan Perubahan Dalam Model.
Untuk mengambil alih MergeRelate
Dalam definisi DSL, pastikan Anda telah menentukan EMD yang ingin Anda tambahkan kodenya. Jika mau, Anda dapat menambahkan jalur dan menentukan kode penerimaan kustom seperti yang dijelaskan di bagian sebelumnya.
Dalam diagram DslDefinition, pilih kelas penerima penggabungan. Biasanya kelas ini di ujung sumber hubungan penyematan.
Misalnya, di DSL yang dihasilkan dari solusi Bahasa Minimal, pilih
ExampleModel.Di jendela Properti, atur Hasilkan Turunan Ganda menjadi true.
Bangun kembali solusinya.
Periksa konten Dsl\Generated Files\DomainClasses.cs. Cari metode bernama
MergeRelatedan periksa kontennya. Metode ini akan membantu saat menulis versi Anda sendiri.Dalam file kode baru, tulis kelas parsial untuk kelas penerima, dan ambil alih metode
MergeRelate. Jangan lupa untuk memanggil metode dasar. Misalnya: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(); } } }
Untuk menulis kode Penggabungan Kustom
Di Dsl\Generated Code\DomainClasses.cs, periksa metode bernama
MergeRelate. Metode ini membuat tautan antara elemen baru dan model yang ada.Selain itu, periksa metode bernama
MergeDisconnect. Metode ini membatalkan tautan elemen dari model saat akan dihapus.Di Penjelajah DSL, pilih atau buat Petunjuk Gabungan Elemen yang ingin Anda sesuaikan. Di jendela Detail DSL, atur Gunakan Penggabungan Kustom.
Saat Anda mengatur opsi ini, opsi Proses Penggabungan dan Teruskan Penggabungan diabaikan. Sebagai gantinya, Kode Anda akan digunakan.
Bangun kembali solusinya. Ini akan memakan waktu lebih lama dari biasanya karena file kode yang dihasilkan akan diperbarui dari model.
Pesan kesalahan akan muncul. Klik dua kali pesan kesalahannya untuk melihat instruksi dalam kode yang dihasilkan. Instruksi ini meminta Anda untuk menyediakan dua metode,
MergeRelateYourDomainClass danMergeDisconnectYourDomainClassTulis metode tersebut dalam definisi kelas parsial di file kode terpisah. Contoh yang Anda periksa sebelumnya harus menyarankan kebutuhan Anda.
Kode penggabungan kustom tidak akan memengaruhi kode yang membuat objek dan hubungan secara langsung, dan tidak akan memengaruhi EMD lain. Untuk memastikan bahwa perubahan tambahan diterapkan terlepas dari cara elemen dibuat, pertimbangkan untuk menulis
AddRuledanDeleteRulesebagai gantinya. Untuk informasi selengkapnya, lihat Aturan Menyebarkan Perubahan Dalam Model.
Mengalihkan Operasi Penggabungan
Petunjuk teruskan penggabungan mengalihkan target operasi penggabungan. Biasanya, target baru adalah induk penyematan dari target awal.
Misalnya, dalam DSL yang dibuat dengan templat diagram komponen, Port disematkan di Komponen. Port ditampilkan sebagai bentuk kecil di tepi bentuk komponen. Pengguna membuat port dengan menyeret alat Port menjadi bentuk Komponen. Tetapi terkadang, pengguna secara keliru menyeret alat Port ke port yang ada, alih-alih komponen, dan operasi gagal. Ini adalah kesalahan kecil ketika terdapat beberapa port yang sudah ada. Untuk membantu pengguna menghindari gangguan ini, Anda dapat mengizinkan port diseret ke port yang ada, tetapi meminta tindakan dialihkan ke komponen induk. Operasi ini berfungsi seolah-olah elemen target adalah komponen.
Anda dapat membuat petunjuk penerusan penggabungan dalam solusi Model Komponen. Jika Anda mengompilasi dan menjalankan solusi asli, Anda akan melihat bahwa pengguna dapat menyeret sejumlah elemen Port Input atau Port Output dari Kotak Alat ke elemen Komponen. Namun, pengguna tidak dapat menyeret port ke port yang ada. Penunjuk Tidak Tersedia memperingatkan pengguna bahwa pemindahan ini tidak diaktifkan. Namun, Anda dapat membuat petunjuk teruskan penggabungan sehingga port yang tidak sengaja dihilangkan pada Port Input yang ada diteruskan ke elemen Komponen.
Untuk membuat petunjuk penerusan penggabungan
Buat solusi Alat Bahasa Khusus Domain dengan menggunakan templat Model Komponen.
Tampilkan DSL Penjelajah dengan membuka DslDefinition.dsl.
Di DSL Penjelajah, perluas Kelas Domain.
Kelas domain abstrak ComponentPort adalah kelas dasar dari InPort dan OutPort. Klik kanan ComponentPort lalu klik Tambahkan Petunjuk Penggabungan Elemen Baru.
Simpul Petunjuk Penggabungan Elemen baru akan muncul di bawah simpul Petunjuk Penggabungan Elemen.
Pilih simpul Petunjuk Penggabungan Elemen dan buka jendela Detail DSL.
Di daftar Kelas pengindeksan, pilih ComponentPort.
Pilih Teruskan penggabungan ke kelas domain lain.
Di daftar pemilihan jalur, perluas ComponentPort, perluas ComponentHasPorts, lalu pilih Komponen.
Jalur baru harus menyerupai seperti ini:
ComponentHasPorts.Component/!Component
Simpan solusinya, lalu ubah templat dengan mengklik tombol paling kanan pada toolbar Penjelajah Solusi.
Membangun dan menjalankan solusi. Instans baru Visual Studio akan muncul.
Di Penjelajah Solusi, buka Sample.mydsl. Diagram dan Kotak Alat ComponentLanguage akan muncul.
Seret Port Input dari Kotak Alat ke Port Input lain. Selanjutnya, seret OutputPort ke InputPort lalu ke OutputPort lain.
Seharusnya penunjuk Tidak Tersedia tidak muncul, dan seharusnya Anda dapat menjatuhkan Port Input baru pada port yang sudah ada. Pilih Port Input baru dan seret ke titik lain pada Komponen.