İzlenecek Yol: İçerik Denetimlerini Özel XML Bölümlerine Bağlama
Bu anlatım belgede depolanan XML verisine, Word için bir belge düzeyi özelleştirmesindeki içerik denetimlerinin nasıl bağlanacağını gösterir.
Uygulama hedefi: Bu konudaki bilgiler, Word 2013 ve Word 2010 için belge düzeyi projelere yöneliktir. Daha fazla bilgi edinmek için, bkz. Office Uygulaması ve Proje Türüne Göre Kullanılabilir Özellikler.
Word, bir belgede özelleşmiş XML bölümleri olarak isimlendirilen XML verilerini depolayabilmenizi sağlar.Bu verinin görüntülenmesini özelleşmiş bir XML bölümündeki öğelere içerik denetimleri bağlayarak denetleyebilirsiniz.Bu gösterimdeki örnek belge özelleşmiş bir XML bölümünde depolanan çalışan bilgilerini görüntüler.Belgeyi açtığınızda, içerik denetimleri XML öğelerinin değerlerini görüntüler.İçerik denetimlerindeki metne yapacağınız tüm değişiklikler özelleşmiş XML bölümüne kaydedilir.
Bu izlenecek yol aşağıdaki görevleri gösterir:
Belge düzeyi projesinde tasarım zamanında Word belgesine içerik denetimi ekleme.
XML veri dosyası ve içerik denetimlerine bağlanacak öğeleri tanımlayan XML şeması oluşturma.
Belgeye tasarım zamanında XML şeması iliştirme.
XML dosyasının içeriğini çalışma zamanında belgedeki özelleşmiş bir XML bölümüne ekleme.
İçerik denetimlerini özelleşmiş XML bölümündeki öğelere bağlama.
Bir DropDownListContentControl'ü XML şemasında tanımlanmış bir değerler kümesine bağlama.
[!NOT]
Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için, bkz. Visual Studio'da Geliştirme Ayarlarını özelleştirme.
Önkoşullar
Bu izlenecek yolu tamamlamak için aşağıdaki bileşenler gereklidir:
Microsoft Office geliştirici araçlarını içeren bir Visual Studio 2013 sürümü. Daha fazla bilgi edinmek için, bkz. Office Çözümleri Geliştirmek İçin Bilgisayarı Yapılandırma.
Word 2013 veya Word 2010.
Bir bu konunun videosu için bkz: Video nasıl yapılır: bağlama içerik denetimi özel XML bölümlerine.
Yeni Bir Word Belgesi Projesi Oluşturma
Bu anlatımda kullanmak üzere bir Word belgesi oluşturun.
Yeni bir Word belgesi projesi oluşturmak için
ÇalışanDenetimleri adında bir Word belgesi projesi oluşturun.Çözüm için yeni bir belge oluşturun.Daha fazla bilgi için bkz. Nasıl Yapılır: Visual Studio'da Office Projeleri Oluşturma.
Visual StudioYeni Word belgesini tasarımcıda açar ve ÇalışanDenetimleri projeye ekler Çözüm Gezgini.
Word Belgesine İçerik Denetimleri Ekleme
Üç farklı içerik denetimi türü bulunan, kullanıcının bir çalışan hakkındaki bilgileri görüntüleyip düzenleyebileceği bir tablo oluşturun.
Belgeye içerik denetimleri eklemek için
' De bulunan Word belgesinde Visual Studio , Şerit Tasarımcısı'nı seçin Ekle sekme.
İçinde tabloları grup, seçim Tablo, 2 ve 3 sütun içeren bir tablo ekleyin.
İlk sütuna aşağıdaki sütundaki gibi metinler girin.
Çalışan adı
İşe Giriş Tarihi
Başlık
Tablonun ikinci sütununda ilk satırı seçin (yanında Çalışan adı).
Şerit'te seçim Developer sekme.
[!NOT]
Geliştirici sekmesi görünür değilse önce onu görünür yapın.Daha fazla bilgi için bkz. Nasıl Yapılır: Şeritte Geliştirici Sekmesini Gösterme.
İçinde denetimleri grup, seçim metin düğmesini eklemek için bir PlainTextContentControl ilk hücreye.
Tablonun ikinci sütununda ikinci satıra seçin (yanında İşe Giriş tarihi).
İçinde denetimleri grup, seçim Tarih Seçici düğmesini eklemek için bir DatePickerContentControl ikinci hücreye.
Tablonun ikinci sütununda üçüncü satıra seçin (yanında başlık).
İçinde denetimleri grup, seçim Açılan liste düğmesini eklemek için bir DropDownListContentControl son hücreye.
Bu proje için kullanıcı arabiriminin tamamı budur.Projeyi şu anda çalıştırırsanız, ilk satıra metin girebilir ve ikinci satırda bir tarih seçebilirsiniz.Bir sonraki adım, bir XML dosyasındaki görüntülemek istediğiniz verileri bir belgeye iliştirmek.
XML Veri Dosyası Oluşturma
Genellikle, özelleşmiş XML bölümünde saklayacağınız veriyi bir dosya veya veritabanı gibi bir dış kaynaktan alırsınız.Bu anlatımda, belgedeki içerik denetime bağlayacağınız elemanlarla işaretlenmiş çalışan bilgilerini içeren XML dosyasını yaratacaksınız.Verileri çalışma zamanında kullanılabilir kılmak için özelleştirme derlemesine XML dosyasını bir kaynak olarak gömün.
Veri dosyasını oluşturmak için
Proje menüsünde Yeni Öğe Ekle seçeneğini belirleyin.
Yeni Öğe Ekle iletişim kutusu görüntülenir.
Şablonlar bölmesinde, XML Dosyası'nı seçin.
Dosya adı employees.xmlve sonra seçin Ekle düğmesi.
employees.xml Kod Düzenleyici'sinde açılır.
employees.xml dosyasının içeriğini aşağıdaki metin ile değiştirin.
<?xml version="1.0" encoding="utf-8" ?> <employees xmlns="https://schemas.microsoft.com/vsto/samples"> <employee> <name>Karina Leal</name> <hireDate>1999-04-01</hireDate> <title>Manager</title> </employee> </employees>
İçinde Çözüm Gezgini, seçim employees.xml dosyası.
Özellikler penceresinde, Derleme Eylemi özelliğini seçin ve değerini Gömülü Kaynak olarak değiştirin.
Bu adım projeyi derlediğinizde XML dosyasını bir kaynak olarak derlemeye gömer.Bu, XML dosyasının içeriğine çalışma zamanında erişmenizi sağlar.
Bir XML Şeması Oluşturma
İçerik denetimini özelleşmiş bir XML bölümünde tek bir öğeye bağlamak istiyorsanız, XML şeması kullanmanız gerekli değildir.Ancak, DropDownListContentControl'ü bir değerler kümesine bağlamak için önceden yarattığınız XML veri dosyasını geçerli kılacak bir XML şeması oluşturmalısınız.XML şeması title öğesi için olası değerleri tanımlar.DropDownListContentControl'ü bu öğeye bu anlatım içerisinde daha sonra bağlayacaksınız.
Bir XML Şeması oluşturmak için
Proje menüsünde Yeni Öğe Ekle seçeneğini belirleyin.
Yeni Öğe Ekle iletişim kutusu görüntülenir.
Şablonlar bölmesinde, XML Şeması'nı seçin.
Şema adı employees.xsd ve Ekle düğmesi.
Şema tasarımcısı açılır.
İçinde Çözüm Gezgini, kısayol menüsünü açma employees.xsdve sonra seçin Görünüm Kodu.
employees.xsd dosyasının içeriğini aşağıdaki şema ile değiştirin.
<?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns="https://schemas.microsoft.com/vsto/samples" targetNamespace="https://schemas.microsoft.com/vsto/samples" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="employees" type="EmployeesType"></xs:element> <xs:complexType name="EmployeesType"> <xs:all> <xs:element name="employee" type="EmployeeType"/> </xs:all> </xs:complexType> <xs:complexType name="EmployeeType"> <xs:sequence> <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="hireDate" type="xs:date" minOccurs="1" maxOccurs="1"/> <xs:element name="title" type="TitleType" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:simpleType name="TitleType"> <xs:restriction base="xs:string"> <xs:enumeration value ="Engineer"/> <xs:enumeration value ="Designer"/> <xs:enumeration value ="Manager"/> </xs:restriction> </xs:simpleType> </xs:schema>
employees.xml ve employees.xsd'de yaptığınız değişiklikleri kaydetmek için Dosya menüsünden Tümünü Kaydet'i tıklatın.
Belgeye XML Şemasını İliştirme
DropDownListContentControl'ü title öğesinin geçerli değerlerine bağlamak için belgeye XML şemasını iliştirmelisiniz.
Belgeye XML şemasını iliştirmek için (Word 2013)
Tasarımcıda EmployeeControls.docx'i etkinleştirin.
Şerit üzerinde seçim Geliştirici sekmesini tıklatın ve sonra seçin Add-Ins düğmesi.
İçinde Şablonlar ve eklentiler iletişim kutusunda, seçim XML şema sekmesini tıklatın ve sonra seçin Şema Ekle düğmesi.
Gözat employees.xsd şema oluşturduğunuz daha önce hangi proje dizininde bulunur ve ardından açık düğmesi.
Seçim Tamam düğmesini Şema Ayarları iletişim kutusu.
Seçim Tamam kapatmak için düğme Şablonlar ve eklentiler iletişim kutusu.
XML Şeması (Word 2010 için) iliştirmek için
Tasarımcıda EmployeeControls.docx'i etkinleştirin.
Şerit'te seçim Developer sekme.
İçinde XML grup, seçim şema düğmesi.
İçinde Şablonlar ve eklentiler iletişim kutusunda, seçim XML şema sekmesini tıklatın ve sonra seçin Şema Ekle düğmesi.
Gözat employees.xsd proje dizininde bulunur ve seçin, daha önce oluşturduğunuz şema açık düğmesi.
Seçim Tamam düğmesini Şema Ayarları iletişim kutusu.
Seçim Tamam kapatmak için düğme Şablonlar ve eklentiler iletişim kutusu.
XML Yapısı görev bölmesi açılır.
XML Yapısı görev bölmesini kapatın.
Belgeye Özelleşmiş Bir XML Bölümü Ekleme
XML dosyasındaki öğelere içerik denetimleri bağlamadan önce XML dosyasının içerikleri belgede yeni bir özelleşmiş XML bölümüne eklemeniz gerekir.
Belgeye özelleşmiş bir XML bölümü eklemek için
İçinde Çözüm Gezgini, kısayol menüsünü açma ThisDocument.vb veya ThisDocument.vbve sonra seçin Görünüm Kodu.
Aşağıdaki bildirimi ThisDocument sınıfına ekleyin.Bu kod, belgeye özelleşmiş bir XML bölmesi eklemek için kullanacağınız birkaç nesneyi bildirir.
<Cached()> _ Public employeeXMLPartID As String = String.Empty Private employeeXMLPart As Office.CustomXMLPart Private Const prefix As String = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'"
[CachedAttribute()] public string employeeXMLPartID = string.Empty; private Office.CustomXMLPart employeeXMLPart; private const string prefix = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'";
ThisDocument sınıfına aşağıdaki yöntemi ekleyin.Bu yöntem, derlemeye kaynak olarak gömülmüş XML veri dosyasının içeriğini alır ve bir XML dizesi olarak döndürür.
Private Function GetXmlFromResource() As String Dim asm As System.Reflection.Assembly = _ System.Reflection.Assembly.GetExecutingAssembly() Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( _ "EmployeeControls.employees.xml") Using resourceReader As System.IO.StreamReader = _ New System.IO.StreamReader(stream1) If resourceReader IsNot Nothing Then Return resourceReader.ReadToEnd() End If End Using Return Nothing End Function
private string GetXmlFromResource() { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream stream1 = asm.GetManifestResourceStream( "EmployeeControls.employees.xml"); using (System.IO.StreamReader resourceReader = new System.IO.StreamReader(stream1)) { if (resourceReader != null) { return resourceReader.ReadToEnd(); } } return null; }
ThisDocument sınıfına aşağıdaki yöntemi ekleyin.AddCustomXmlPart yöntemi, kendisine geçirilen XML dizesini içeren yeni bir özelleşmiş XML bölümü oluşturur.
Özelleşmiş XML bölümünün yalnızca bir kere oluşturulmasını sağlamak için bu yöntem özel XML bölümünü sadece eşleştiği GUID belgede hâlihazırda mevcut değil ise oluşturur.Bu yöntem ilk çağrılışında Id özelliğinin değerini employeeXMLPartID dizesine kaydeder.employeeXMLPartID dizesinin değeri belgede kalıcıdır; çünkü, bu değer CachedAttribute özniteliği kullanılarak bildirilmiştir.
Private Sub AddCustomXmlPart(ByVal xmlData As String) If xmlData IsNot Nothing Then employeeXMLPart = Me.CustomXMLParts.SelectByID(employeeXMLPartID) If (employeeXMLPart Is Nothing) Then employeeXMLPart = Me.CustomXMLParts.Add(xmlData) employeeXMLPart.NamespaceManager.AddNamespace("ns", _ "https://schemas.microsoft.com/vsto/samples") employeeXMLPartID = employeeXMLPart.Id End If End If End Sub
private void AddCustomXmlPart(string xmlData) { if (xmlData != null) { employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID); if (employeeXMLPart == null) { employeeXMLPart = this.CustomXMLParts.Add(xmlData); employeeXMLPart.NamespaceManager.AddNamespace("ns", @"https://schemas.microsoft.com/vsto/samples"); employeeXMLPartID = employeeXMLPart.Id; } } }
İçerik Denetimlerini Özelleşmiş XML Bölümündeki Öğelere Bağlama
Tüm içerik denetimlerini, özelleşmiş XML bölümündeki bir öğeye içerik denetiminin XMLMapping özelliğini kullanarak bağlayın.
İçerik denetimlerini özelleşmiş XML bölümündeki öğelere bağlamak için
ThisDocument sınıfına aşağıdaki yöntemi ekleyin.Bu yöntem, tüm içerik denetimlerini özelleşmiş XML bölümündeki bir öğeye bağlar ve DatePickerContentControl'ün tarih görüntüleme biçimini ayarlar.
Private Sub BindControlsToCustomXmlPart() Dim xPathName As String = "ns:employees/ns:employee/ns:name" Me.PlainTextContentControl1.XMLMapping.SetMapping(xPathName, _ prefix, employeeXMLPart) Dim xPathDate As String = "ns:employees/ns:employee/ns:hireDate" Me.DatePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy" Me.DatePickerContentControl1.XMLMapping.SetMapping(xPathDate, _ prefix, employeeXMLPart) Dim xPathTitle As String = "ns:employees/ns:employee/ns:title" Me.DropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, _ prefix, employeeXMLPart) End Sub
private void BindControlsToCustomXmlPart() { string xPathName = "ns:employees/ns:employee/ns:name"; this.plainTextContentControl1.XMLMapping.SetMapping(xPathName, prefix, employeeXMLPart); string xPathDate = "ns:employees/ns:employee/ns:hireDate"; this.datePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy"; this.datePickerContentControl1.XMLMapping.SetMapping(xPathDate, prefix, employeeXMLPart); string xPathTitle = "ns:employees/ns:employee/ns:title"; this.dropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, prefix, employeeXMLPart); }
Belge Açıldığında Kodunuzu Çalıştırma
Özelleşmiş XML bölümü oluşturun ve özel denetimleri verilere belge açıldığında bağlayın.
Belge açıldığında kodunuzu çalıştırmak için
ThisDocument sınıfının ThisDocument_Startup yöntemine aşağıdaki kodu ekleyin.Bu kod, employees.xml dosyasından XML dizesini alır, bu dizeyi yeni bir özelleşmiş XML bölümüne ekler ve içerik denetimlerini özelleşmiş XML bölümündeki öğelere bağlar.
Dim xmlData As String = GetXmlFromResource() If xmlData IsNot Nothing Then AddCustomXmlPart(xmlData) BindControlsToCustomXmlPart() End If
string xmlData = GetXmlFromResource(); if (xmlData != null) { AddCustomXmlPart(xmlData); BindControlsToCustomXmlPart(); }
Projeyi Test Etme
Belgeyi açtığınızda, içerik denetimleri özelleşmiş XML bölümdeki öğelerden gelen verileri görüntüler.title öğesi için employees.xsd dosyasında tanımlanmış olan geçerli üç değerden birini seçmek için DropDownListContentControl'ü tıklatabilirsiniz.İçerik denetimlerinin herhangi birindeki verilerde değişiklik yaparsanız yeni değerler belgede özelleşmiş XML bölümünde kaydedilir.
İçerik denetimlerini sınamak için
F5 tuşuna basarak projeyi çalıştırın.
Belgedeki tablonun aşağıdaki tabloya benzediğini doğrulayın.İkinci sütundaki her dize, belgedeki özelleşmiş XML bölümündeki bir öğeden alınır.
Çalışan adı
Karina Leal
İşe Giriş Tarihi
April 1, 1999
Başlık
Manager
Çalışan adı hücresinin sağındaki hücreyi seçin ve farklı bir ad yazın.
İşe Alınma Tarihi hücresinin sağındaki hücreyi seçin ve tarih seçiciden farklı bir tarih seçin.
Başlık hücresinin sağındaki hücreyi seçin ve yeni bir öğe aşağı açılan listeden seçin.
Belgeyi kaydedip kapatın.
Dosya Gezgini'nde projenizin konumun altındaki \bin\Debug klasörünü açın.
ÇalışanDenetimleri.docx'i için kısayol menüsünü açın ve sonra seçin yeniden adlandırma.
Dosyayı ÇalışanDenetimleri.docx.zip olarak isimlendirin.
ÇalışanDenetimleri.docx belgesi Open XML Format'ında kaydedilir.Bu belgenin isminin sonuna .zip uzantısı ekleyerek belgenin içindekileri inceleyebilirsiniz.Open XML hakkında daha fazla bilgi için, şu teknik makaleye bkz. Introducing the Office (2007) Open XML File Formats.
ÇalışanDenetimleri.docx.zip dosyasını açın.
Açık customXml klasörü.
Kısayol menüsünü açma item2.xml 'ı seçin ve açık.
Bu dosya, belgeye eklediğiniz özel XML bölümünü içerir.
name, hireDate ve title öğelerinin belgedeki içerik denetimlerine girdiğiniz yeni değerleri içerdiğini doğrulayın.
item2.xml dosyasını kapatın.
Sonraki Adımlar
Aşağıdaki konulardan içerik denetimlerinin nasıl kullanıldığı hakkında daha fazla bilgi alabilirsiniz:
Şablon oluşturmak için tüm kullanılabilir içerik denetimlerini kullanma.Daha fazla bilgi için bkz. İzlenecek Yol: İçerik Denetimlerini Kullanarak Şablon Oluşturma.
Belge kapalıyken özel XML bölümlerindeki verileri değiştirme.Kullanıcının belgeyi bir sonraki açışında, XML öğelerine bağlı içerik denetimleri yeni verileri görüntüler.
Belgelerin parçalarını korumak için içerik denetimlerini kullanma.Daha fazla bilgi için bkz. Nasıl Yapılır: İçerik Denetimlerini Kullanarak Belge Bölümlerini Koruma.
Ayrıca bkz.
Görevler
Nasıl Yapılır: Word Belgelerine İçerik Denetimleri Ekleme
Nasıl Yapılır: İçerik Denetimlerini Kullanarak Belge Bölümlerini Koruma
Kavramlar
Genişletilmiş Nesneleri Kullanarak Word'ü Otomatikleştirme
Ana Bilgisayar Öğelerine ve Denetimlerine Genel Bakış
Konak Denetimlerinin ve Konak Öğelerinin Programlama Sınırlamaları