Aracılığıyla paylaş


İ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:

video bağlantısı 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

  1. ' De bulunan Word belgesinde Visual Studio , Şerit Tasarımcısı'nı seçin Ekle sekme.

  2. İçinde tabloları grup, seçim Tablo, 2 ve 3 sütun içeren bir tablo ekleyin.

  3. İlk sütuna aşağıdaki sütundaki gibi metinler girin.

    Çalışan adı

    İşe Giriş Tarihi

    Başlık

  4. Tablonun ikinci sütununda ilk satırı seçin (yanında Çalışan adı).

  5. Ş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.

  6. İçinde denetimleri grup, seçim metin düğmesini PlainTextContentControl eklemek için bir PlainTextContentControl ilk hücreye.

  7. Tablonun ikinci sütununda ikinci satıra seçin (yanında İşe Giriş tarihi).

  8. İçinde denetimleri grup, seçim Tarih Seçici düğmesini DatePickerContentControl eklemek için bir DatePickerContentControl ikinci hücreye.

  9. Tablonun ikinci sütununda üçüncü satıra seçin (yanında başlık).

  10. İçinde denetimleri grup, seçim Açılan liste düğmesini DropDownListContentControl 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

  1. Proje menüsünde Yeni Öğe Ekle seçeneğini belirleyin.

    Yeni Öğe Ekle iletişim kutusu görüntülenir.

  2. Şablonlar bölmesinde, XML Dosyası'nı seçin.

  3. Dosya adı employees.xmlve sonra seçin Ekle düğmesi.

    employees.xml Kod Düzenleyici'sinde açılır.

  4. 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>
    
  5. İçinde Çözüm Gezgini, seçim employees.xml dosyası.

  6. Ö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

  1. Proje menüsünde Yeni Öğe Ekle seçeneğini belirleyin.

    Yeni Öğe Ekle iletişim kutusu görüntülenir.

  2. Şablonlar bölmesinde, XML Şeması'nı seçin.

  3. Şema adı employees.xsd ve Ekle düğmesi.

    Şema tasarımcısı açılır.

  4. İçinde Çözüm Gezgini, kısayol menüsünü açma employees.xsdve sonra seçin Görünüm Kodu.

  5. 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>
    
  6. 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)

  1. Tasarımcıda EmployeeControls.docx'i etkinleştirin.

  2. Şerit üzerinde seçim Geliştirici sekmesini tıklatın ve sonra seçin Add-Ins düğmesi.

  3. İçinde Şablonlar ve eklentiler iletişim kutusunda, seçim XML şema sekmesini tıklatın ve sonra seçin Şema Ekle düğmesi.

  4. Gözat employees.xsd şema oluşturduğunuz daha önce hangi proje dizininde bulunur ve ardından açık düğmesi.

  5. Seçim Tamam düğmesini Şema Ayarları iletişim kutusu.

  6. Seçim Tamam kapatmak için düğme Şablonlar ve eklentiler iletişim kutusu.

XML Şeması (Word 2010 için) iliştirmek için

  1. Tasarımcıda EmployeeControls.docx'i etkinleştirin.

  2. Şerit'te seçim Developer sekme.

  3. İçinde XML grup, seçim şema düğmesi.

  4. İçinde Şablonlar ve eklentiler iletişim kutusunda, seçim XML şema sekmesini tıklatın ve sonra seçin Şema Ekle düğmesi.

  5. Gözat employees.xsd proje dizininde bulunur ve seçin, daha önce oluşturduğunuz şema açık düğmesi.

  6. Seçim Tamam düğmesini Şema Ayarları iletişim kutusu.

  7. Seçim Tamam kapatmak için düğme Şablonlar ve eklentiler iletişim kutusu.

    XML Yapısı görev bölmesi açılır.

  8. 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

  1. İçinde Çözüm Gezgini, kısayol menüsünü açma ThisDocument.vb veya ThisDocument.vbve sonra seçin Görünüm Kodu.

  2. 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'";
    
  3. 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;
    }
    
  4. 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

  1. F5 tuşuna basarak projeyi çalıştırın.

  2. 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

  3. Çalışan adı hücresinin sağındaki hücreyi seçin ve farklı bir ad yazın.

  4. İşe Alınma Tarihi hücresinin sağındaki hücreyi seçin ve tarih seçiciden farklı bir tarih seçin.

  5. Başlık hücresinin sağındaki hücreyi seçin ve yeni bir öğe aşağı açılan listeden seçin.

  6. Belgeyi kaydedip kapatın.

  7. Dosya Gezgini'nde projenizin konumun altındaki \bin\Debug klasörünü açın.

  8. ÇalışanDenetimleri.docx'i için kısayol menüsünü açın ve sonra seçin yeniden adlandırma.

  9. 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.

  10. ÇalışanDenetimleri.docx.zip dosyasını açın.

  11. Açık customXml klasörü.

  12. 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.

  13. name, hireDate ve title öğelerinin belgedeki içerik denetimlerine girdiğiniz yeni değerleri içerdiğini doğrulayın.

  14. 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:

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

İçerik Denetimleri

Ana Bilgisayar Öğelerine ve Denetimlerine Genel Bakış

Konak Denetimlerinin ve Konak Öğelerinin Programlama Sınırlamaları

Office Belgelerine Çalışma Zamanında Denetim Ekleme