Demonstra Passo a passo: Controles de conteúdo de ligação para partes do XML personalizado

Esta explicação passo a passo demonstra como vincular os controles de conteúdo uma personalização de nível de documento do Word para dados XML que são armazenados no documento.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento para Word 2007 e Word 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Word permite que você armazene dados XML, chamados partes XML, em um documento. Você pode controlar a exibição desses dados vinculando a controles de conteúdo para os elementos em uma parte XML personalizada. O documento de exemplo neste passo a passo exibe informações do funcionário que são armazenadas em uma parte XML personalizada. Quando você abre o documento, os controles de conteúdo exibem os valores dos elementos XML. As alterações que você fizer ao texto em controles de conteúdo são salvos na parte XML personalizada.

This walkthrough illustrates the following tasks:

  • Adicionando controles de conteúdo para o documento do Word em um projeto de nível de documento em tempo de design.

  • Criando um arquivo de dados XML e um esquema XML que define os elementos para vincular os controles de conteúdo.

  • Anexar o esquema XML ao documento em tempo de design.

  • Adicionando o conteúdo do arquivo XML para uma parte XML personalizada no documento em tempo de execução.

  • Vincular os controles de conteúdo para elementos na parte XML personalizada.

  • Vinculando um DropDownListContentControl a um conjunto de valores que são definidos no esquema XML.

ObservaçãoObservação

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações do Visual Studio.

Pré-requisitos

You need the following components to complete this walkthrough:

-

Uma edição do Visual Studio 2010 que inclua as ferramentas de desenvolvedor do Microsoft Office. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.100\).md).
  • Microsoft Office Word 2007 ou Word 2010.

link para vídeo Para obter uma versão de vídeo deste tópico, consulte vídeo How to: A vinculação de controles de conteúdo para partes do XML personalizado.

Criar um novo projeto de documento do Word

Crie um documento do Word que você usará na explicação.

Para criar um novo projeto de documento do Word

  • Crie um projeto de documento do Word com o nome EmployeeControls. Crie um novo documento para a solução. For more information, see Como: Criar projetos do Office em Visual Studio.

    Visual StudioAbre o novo documento do Word no designer e adiciona o projeto EmployeeControls Solution Explorer.

Adicionando controles de conteúdo para o documento.

Crie uma tabela que contém os três tipos diferentes de controles de conteúdo onde o usuário pode exibir ou editar informações sobre um funcionário.

Para adicionar controles de conteúdo para o documento.

  1. No documento do Word que está hospedado na Visual Studio designer, na faixa de opções, clique no Inserir guia.

  2. No tabelas de grupo, clique em tabelae inserir uma tabela com colunas de 2 e 3 linhas.

  3. Digite o texto na primeira coluna, para que se pareça com a coluna seguinte:

    Nome do funcionário

    Data da contratação

    Title

  4. Na segunda coluna da tabela, clique na primeira linha (ao lado de Nome do funcionário).

  5. Na faixa de opções, clique no Developer guia.

    ObservaçãoObservação

    Se o Developer guia não estiver visível, você deve primeiro mostrá-lo. For more information, see Como: Mostrar guia desenvolvedor na faixa de opções.

  6. No controles de grupo, clique no texto botão PlainTextContentControl para adicionar uma PlainTextContentControl a primeira célula.

  7. Na segunda coluna da tabela, clique na segunda linha (ao lado de Data de contratação).

  8. No controles de grupo, clique no Selecionador de data botão DatePickerContentControl para adicionar uma DatePickerContentControl a segunda célula.

  9. Na segunda coluna da tabela, clique na terceira linha (ao lado de título).

  10. No controles de grupo, clique no Na lista suspensa botão DropDownListContentControl para adicionar uma DropDownListContentControl para a última célula.

Que é a interface do usuário para este projeto. Se você executar o projeto agora, pode digitar o texto na primeira linha e selecione uma data na segunda linha. A próxima etapa é anexar os dados que você deseja exibir o documento em um arquivo XML.

Criando o arquivo de dados XML

Normalmente, você obterá os dados XML para armazenar em uma parte XML personalizada de uma fonte externa, como, por exemplo, um arquivo ou um banco de dados. Esta explicação passo a passo, você pode criar um arquivo XML que contém os dados do funcionário, marcados pelos elementos que você irá vincular aos controles de conteúdo no documento. Para disponibilizar os dados em tempo de execução, incorpore o arquivo XML como um recurso no assembly de personalização.

Para criar o arquivo de dados

  1. On the Project menu, click Add New Item.

    O Add New Item caixa de diálogo aparece.

  2. No modelos de painel, selecione Arquivo XML.

  3. Nomeie o arquivo Employeese em seguida, clique em Add.

    O Employees arquivo é aberto no Editor de código.

  4. Substituir o conteúdo da Employees arquivo com o seguinte texto.

    <?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. Em Solution Explorer, clique em Employees.

  6. No Propriedades janela, selecione o Build Action propriedade e em seguida, altere o valor para Embedded Resource.

    Essa etapa incorpora o arquivo XML como um recurso no assembly quando você constrói o projeto. Isso lhe permite acessar o conteúdo do arquivo XML em tempo de execução.

Criando um esquema XML

Se você deseja vincular a um controle de conteúdo para um único elemento em uma parte XML personalizada, você não precisará usar um esquema XML. No entanto, para vincular a DropDownListContentControl a um conjunto de valores, você deve criar um esquema XML que valida o arquivo de dados XML que você criou anteriormente. O esquema XML define os valores possíveis para o title elemento. Você irá acoplar o DropDownListContentControl a esse elemento posteriormente na explicação passo a passo.

Para criar um esquema XML

  1. On the Project menu, click Add New Item.

    O Add New Item caixa de diálogo aparece.

  2. No modelos de painel, selecione Esquema XML.

  3. O esquema de nomes xsd e clique em Add.

    O designer de esquema é aberto.

  4. Em Solution Explorer, com o botão direito xsde em seguida, clique em Exibir código.

  5. Substituir o conteúdo da xsd arquivo com o esquema a seguir.

    <?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. No arquivo menu, clique em Salvar tudo para salvar suas alterações para o Employees e o xsd arquivos.

Anexar o esquema XML ao documento

Você deve anexar o esquema XML ao documento para vincular a DropDownListContentControl para os valores válidos da title elemento.

Para anexar o esquema XML ao documento

  1. Ativar EmployeeControls.docx no designer.

  2. Na faixa de opções, clique no Developer guia.

  3. No XML de grupo, clique em esquema.

  4. No modelos e suplementos caixa de diálogo, clique no Esquema XML guia e clique Adicionar esquema.

  5. Navegue até o xsd esquema criado anteriormente, que está localizada no seu diretório do projeto e clique em Abrir.

  6. Clique em OK na Configurações do esquema caixa de diálogo.

  7. Clique em OK para fechar a modelos e suplementos caixa de diálogo.

    O Estrutura XML se abre o painel de tarefas.

  8. Fechar o Estrutura XML painel de tarefas.

Adicionando a parte XML personalizada ao documento

Antes de você pode vincular os controles de conteúdo para os elementos no arquivo XML, você deve adicionar o conteúdo do arquivo XML para uma nova parte XML personalizada no documento.

Para adicionar um componente XML personalizado ao documento

  1. Em Solution Explorer, com o botão direito ThisDocument.cs ou ThisDocument. vbe em seguida, clique em Exibir código.

  2. Adicionar as seguintes declarações para o ThisDocument classe. Esse código declara vários objetos que você usará para adicionar um componente XML personalizado ao documento.

    <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. Adicione o seguinte método para o ThisDocument classe. Esse método obtém o conteúdo do arquivo de dados XML que está incorporado como um recurso no assembly e retorna o conteúdo como uma string XML.

    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. Adicione o seguinte método para o ThisDocument classe. O AddCustomXmlPart método cria uma nova parte XML personalizada que contém uma cadeia XML que é passada para o método.

    Para garantir que a parte XML personalizada é criada somente uma vez, o método cria o XML personalizado parte somente se uma parte XML personalizada com um GUID correspondente já existe no documento. Na primeira vez que este método é chamado, ele salva o valor da Id propriedade para o employeeXMLPartID seqüência de caracteres. O valor da employeeXMLPartID seqüência de caracteres é mantida no documento porque ele foi declarado usando a CachedAttribute atributo.

    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, missing);
                employeeXMLPart.NamespaceManager.AddNamespace("ns", 
                    @"https://schemas.microsoft.com/vsto/samples");
                employeeXMLPartID = employeeXMLPart.Id;
            }
        }
    }
    

Vincular os controles de conteúdo para elementos na parte XML personalizada

Vincular cada controle de conteúdo a um elemento na parte XML personalizada usando o XMLMapping a propriedade de cada controle de conteúdo.

Para vincular os controles de conteúdo para elementos na parte XML personalizada

  • Adicione o seguinte método para o ThisDocument classe. Este método vincula cada controle de conteúdo a um elemento na parte XML personalizada e define o formato de exibição da data de DatePickerContentControl.

    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);
    }
    

Executar o código quando o documento é aberto.

Criar a parte XML personalizada e vincular controles personalizados aos dados quando o documento é aberto.

Para executar seu código quando o documento é aberto.

  • Adicione o seguinte código para o ThisDocument_Startup método de ThisDocument classe. Esse código obtém a string XML a partir de Employees arquivo, adiciona a seqüência de caracteres XML para uma nova parte XML personalizada no documento e vincula os controles de conteúdo para elementos na parte XML personalizada.

    Dim xmlData As String = GetXmlFromResource()
    If xmlData IsNot Nothing Then
        AddCustomXmlPart(xmlData)
        BindControlsToCustomXmlPart()
    End If
    
    string xmlData = GetXmlFromResource();
    
    if (xmlData != null)
    {
        AddCustomXmlPart(xmlData);
        BindControlsToCustomXmlPart();
    }
    

Testing the Project

Quando você abre o documento, os controles de conteúdo exibem dados de elementos na parte XML personalizada. Você pode clicar a DropDownListContentControl para selecionar um dos três valores válidos para o title elemento, que são definidos na xsd arquivo. Se você editar os dados em qualquer um dos controles de conteúdo, os novos valores são salvos na parte XML personalizada no documento.

Para testar os controles de conteúdo

  1. Press F5 to run the project.

  2. Verifique se a tabela do documento se parece com a tabela a seguir. Cada uma das seqüências de caracteres na segunda coluna é obtida a partir de um elemento na parte XML personalizada no documento.

    Nome do funcionário

    Karina Leal

    Data da contratação

    1º De abril de 1999

    Title

    Gerenciador

  3. Clique na célula à direita da célula de nome do funcionário e digite um nome diferente.

  4. Clique na célula à direita da célula data de contratação e selecione uma data diferente no selecionador de data.

  5. Clique na célula à direita da célula de título e selecione um novo item na lista drop-down.

  6. Salve e feche o documento.

  7. No Windows Explorer, abra a pasta \bin\Debug no local do seu projeto.

  8. EmployeeControls.docx com o botão direito e, em seguida, clique em Renomear.

  9. Nomeie o arquivo EmployeeControls.docx.zip.

    O documento de EmployeeControls.docx é salvo no formato XML aberto. Renomeando este documento com a extensão de nome de arquivo. zip, você pode examinar o conteúdo do documento. Para obter mais informações sobre o Open XML, consulte o artigo técnico a introdução de formatos XML abertos do Office (2007).

  10. Clique duas vezes no arquivo EmployeeControls.docx.zip.

  11. Clique duas vezes o customXml pasta.

  12. Com o botão direito item2.xml e, em seguida, clique em Abrir.

    Este arquivo contém a parte XML personalizada que você adicionou ao documento.

  13. Verifique o name, hireDate, e title elementos contêm os novos valores que você inseriu em controles de conteúdo do documento.

  14. Fechar o item2.xml arquivo.

Próximas etapas

Você pode aprender mais sobre como usar os controles de conteúdo com estes tópicos:

Consulte também

Tarefas

Como: Adicionar controles de conteúdo para documentos do Word

Como: Proteger partes de documentos usando os controles de conteúdo

Conceitos

Automatizar o Word usando o Extended objetos

Controles de conteúdo

Itens de host e a visão geral sobre controles de Host

Limitações de programação de itens de Host e controles de Host

Adicionar controles a documentos do Office em tempo de execução

Métodos auxiliares para controles de Host