Partilhar via


Demonstra Passo a passo: atualizar os controles em uma faixa de opções em tempo de execução

Este passo a passo demonstra como usar o modelo de objeto da Faixa de Opções para atualizar os controles em uma faixa de opções depois que a faixa de opções é carregada no aplicativo do Office.

Aplica-se a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de suplemento VSTO para os seguintes aplicativos: Excel; InfoPath 2013 e InfoPath 2010; Perspectiva; PowerPoint; Projeto; Visio; Palavra. Para obter mais informações, consulte Recursos disponíveis por aplicativo e tipo de projeto do Office.

O exemplo extrai dados do banco de dados de exemplo Northwind para preencher uma caixa de combinação e um menu no Microsoft Office Outlook. Os itens selecionados nesses controles preenchem automaticamente campos como Para e Assunto em uma mensagem de email.

Este passo a passo ilustra as seguintes tarefas:

  • Crie um novo projeto de suplemento VSTO do Outlook.

  • Crie um grupo personalizado da Faixa de Opções.

  • Adicione o grupo personalizado a uma guia interna.

  • Atualize os controles na faixa de opções em tempo de execução.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de 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, confira Personalizar o IDE do Visual Studio.

Pré-requisitos

Você precisará dos seguintes componentes para concluir este passo a passo:

Criar um novo projeto de suplemento VSTO do Outlook

Primeiro, crie um projeto de suplemento VSTO do Outlook.

Para criar um novo projeto de suplemento VSTO do Outlook

  1. No Visual Studio, crie um projeto de suplemento VSTO do Outlook com o nome Ribbon_Update_At_Runtime.

  2. Na caixa de diálogo Novo Projeto, selecione Criar diretório para solução.

  3. Salve o projeto no diretório de projeto padrão.

    Para obter mais informações, consulte Como: Criar projetos do Office no Visual Studio.

Criar um grupo de Faixa de Opções personalizado

A faixa de opções deste exemplo aparecerá quando um usuário redigir uma nova mensagem de email. Para criar um grupo personalizado para a faixa de opções, primeiro adicione um item da Faixa de Opções ao seu projeto e, em seguida, crie o grupo no Designer da Faixa de Opções. Esse grupo personalizado ajudará você a gerar mensagens de email de acompanhamento para os clientes extraindo nomes e históricos de pedidos de um banco de dados.

Para criar um grupo personalizado

  1. No menu Projeto , clique em Adicionar Novo Item.

  2. Na caixa de diálogo Adicionar Novo Item, selecione Faixa de Opções (Visual Designer).

  3. Altere o nome da nova Faixa de Opções para CustomerRibbon e clique em Adicionar.

    O arquivo CustomerRibbon.cs ou CustomerRibbon.vb é aberto no Designer da Faixa de Opções e exibe uma guia e um grupo padrão.

  4. Clique no Designer da Faixa de Opções para selecioná-lo.

  5. Na janela Propriedades, clique na seta suspensa ao lado da propriedade RibbonType e clique em Microsoft.Outlook.Mail.Compose.

    Isso permite que a faixa de opções apareça quando o usuário compõe uma nova mensagem de email no Outlook.

  6. No Designer da Faixa de Opções, clique em Grupo1 para selecioná-lo.

  7. Na janela Propriedades, defina Rótulo como Compras do cliente.

  8. Na guia Controles da Faixa de Opções do Office da Caixa de Ferramentas, arraste uma ComboBox para o grupo Compras do Cliente.

  9. Clique em ComboBox1 para selecioná-lo.

  10. Na janela Propriedades, defina Rótulo como Clientes.

  11. Na guia Controles da Faixa de Opções do Office da Caixa de Ferramentas, arraste um Menu para o grupo Compras do Cliente.

  12. Na janela Propriedades, defina Rótulo como Produto Adquirido.

  13. Defina Dinâmico como true.

    Isso permite que você adicione e remova controles no menu em tempo de execução depois que a faixa de opções é carregada no aplicativo do Office.

Adicionar o grupo personalizado a uma guia interna

Uma guia interna é uma guia que já está na faixa de opções de um Outlook Explorer ou Inspector. Neste procedimento, você adicionará o grupo personalizado a uma guia interna e especificará a posição do grupo personalizado na guia.

Para adicionar o grupo personalizado a uma guia interna

  1. Clique na guia TabAddins (Built-In) para selecioná-lo.

  2. Na janela Propriedades, expanda a propriedade ControlId e defina OfficeId como TabNewMailMessage.

    Isso adiciona o grupo Compras do Cliente à guia Mensagens da faixa de opções que aparece em uma nova mensagem de email.

  3. Clique no grupo Compras do cliente para selecioná-lo.

  4. Na janela Propriedades, expanda a propriedade Position, clique na seta suspensa ao lado da propriedade PositionType e clique em BeforeOfficeId.

  5. Defina a propriedade OfficeId como GroupClipboard.

    Isso posiciona o grupo Compras do Cliente antes do grupo Área de Transferência da guia Mensagens.

Criar a fonte de dados

Use a janela Fontes de Dados para adicionar um conjunto de dados digitado ao seu projeto.

Para criar a fonte de dados

  1. No menu Dados, clique em Adicionar Nova Fonte de Dados.

    Isso inicia o Assistente de Configuração da Fonte de Dados.

  2. Selecione Banco de Dados e clique em Avançar.

  3. Selecione Conjunto de Dados e clique em Avançar.

  4. Selecione uma conexão de dados com o banco de dados de exemplo Northwind do Microsoft SQL Server Compact 4.0 ou adicione uma nova conexão usando o botão Nova Conexão .

  5. Depois que uma conexão for selecionada ou criada, clique em Avançar.

  6. Clique em Avançar para salvar a cadeia de conexão.

  7. Na página Escolher Objetos de Banco de Dados , expanda Tabelas.

  8. Marque a caixa de seleção ao lado de cada uma das tabelas a seguir:

    1. Customers

    2. Detalhes do pedido

    3. Pedidos

    4. Produtos

  9. Clique em Concluir.

Atualizar controles no grupo personalizado em tempo de execução

Use o modelo de objeto da Faixa de Opções para executar as seguintes tarefas:

  • Adicione nomes de clientes à caixa de combinação Clientes .

  • Adicione controles de menu e botão ao menu Produtos comprados que representam ordens de venda e produtos vendidos.

  • Preencha os campos Para, Assunto e Corpo das novas mensagens de email usando dados da caixa de combinação Clientes e do menu Produtos Comprados.

Para atualizar controles no grupo personalizado usando o modelo de objeto da Faixa de Opções

  1. No menu Projeto, clique em Adicionar Referência.

  2. Na caixa de diálogo Adicionar Referência, clique na guia .NET, selecione o assembly System.Data.Linq e clique em OK.

    Este assembly contém classes para usar consultas integradas à linguagem (LINQ). Você usará o LINQ para preencher controles no grupo personalizado com dados do banco de dados Northwind.

  3. No Gerenciador de Soluções, clique em CustomerRibbon.cs ou CustomerRibbon.vb para selecioná-lo.

  4. No menu Exibir , clique em Código.

    O arquivo de código da Faixa de Opções é aberto no Editor de Códigos.

  5. Adicione as instruções a seguir à parte superior do arquivo de código da Faixa de Opções. Essas instruções fornecem acesso fácil aos namespaces LINQ e ao namespace do PIA (assembly de interoperabilidade primária) do Outlook.

    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    using System.Linq.Expressions;
    using Outlook = Microsoft.Office.Interop.Outlook;
    using System.Data;
    using System.IO;
    using Ribbon_Update_At_Runtime.Northwind40DataSetTableAdapters;
    
  6. Adicione o seguinte código dentro da CustomerRibbon classe. Esse código declara a tabela de dados e os adaptadores de tabela que você usará para armazenar informações das tabelas Cliente, Pedidos, Detalhes do Pedido e Produto do banco de dados Northwind.

    //Declare the Northwind dataset.
    Northwind40DataSet nwDataSet = new Northwind40DataSet();
    
    //Declare the data tables.
    
    Northwind40DataSet.CustomersDataTable customerTable;
    Northwind40DataSet.OrdersDataTable orderTable;
    Northwind40DataSet.Order_DetailsDataTable orderDetailsTable;
    Northwind40DataSet.ProductsDataTable productsTable;
    
    //Declare the data table adapters for each table.
    
    CustomersTableAdapter customerTableAdapter = new CustomersTableAdapter();
    OrdersTableAdapter ordersTableAdapter = new OrdersTableAdapter();
    Order_DetailsTableAdapter detailsTableAdapter = new Order_DetailsTableAdapter();
    ProductsTableAdapter productsTableAdapter = new ProductsTableAdapter();
    
  7. Adicione o seguinte bloco de código à CustomerRibbon classe. Esse código adiciona três métodos auxiliares que criam controles para a faixa de opções em tempo de execução.

    private RibbonDropDownItem CreateRibbonDropDownItem()
    {
        return this.Factory.CreateRibbonDropDownItem();
    }
    private RibbonMenu CreateRibbonMenu()
    {
        return this.Factory.CreateRibbonMenu();
    }
    private RibbonButton CreateRibbonButton()
    {
        RibbonButton button = this.Factory.CreateRibbonButton();
        button.Click += new RibbonControlEventHandler(button_Click);
        return button;
    }
    
  8. Substitua o método do CustomerRibbon_Load manipulador de eventos pelo código a seguir. Esse código usa uma consulta LINQ para executar as seguintes tarefas:

    • Preencha a caixa de combinação Clientes usando a ID e o nome de 20 clientes no banco de dados Northwind.

    • Chama o PopulateSalesOrderInfo método auxiliar. Esse método atualiza o menu ProductsPurchased com números de ordem de venda que pertencem ao cliente selecionado no momento.

      private void CustomerRibbon_Load(object sender, RibbonUIEventArgs e)
      {
          customerTable = nwDataSet.Customers;
          customerTableAdapter.Fill(customerTable);
      
          var customerQuery = from customers in customerTable.AsEnumerable().Take(20)
                              select new
                              {
                                  CustomerID = customers.Field<string>("Customer ID"),
                                  CustomerName = customers.Field<string>("Contact Name")
                              };
      
      
          // Execute the query.
          foreach (var item in customerQuery)
          {
              this.comboBox1.Items.Add(CreateRibbonDropDownItem());
              this.comboBox1.Items.Last().Label =
              item.CustomerName + "|" + item.CustomerID.ToString();
          }
          this.comboBox1.Text = this.comboBox1.Items.First().Label;
          PopulateSalesOrderInfo();
      }
      

  9. Adicione o código a seguir à classe CustomerRibbon . Esse código usa consultas LINQ para executar as seguintes tarefas:

    • Adiciona um submenu ao menu ProdutosComprados para cada ordem de venda relacionada ao cliente selecionado.

    • Adiciona botões a cada submenu para os produtos relacionados à ordem do cliente.

    • Adiciona manipuladores de eventos a cada botão.

      private void PopulateSalesOrderInfo()
      {
          String[] tempArray = comboBox1.Text.Split(new Char[] { '|' });
          menu1.Items.Clear();
      
          orderTable = nwDataSet.Orders;
          orderDetailsTable = nwDataSet.Order_Details;
          productsTable = nwDataSet.Products;
      
          ordersTableAdapter.Fill(orderTable);
          detailsTableAdapter.Fill(orderDetailsTable);
          productsTableAdapter.Fill(productsTable);
      
          var orderQuery = from orders in orderTable.AsEnumerable()
                           where orders.Field<string>("Customer ID") == tempArray[1]
                           select new { OrderID = orders.Field<int>("Order ID") };
      
          foreach (var orderItem in orderQuery)
          {
              menu1.Items.Add(CreateRibbonMenu());
      
              RibbonMenu orderMenu = (RibbonMenu)menu1.Items.Last();
              orderMenu.Dynamic = true;
              orderMenu.Label = orderItem.OrderID.ToString();
              orderMenu.Tag = orderItem.OrderID;
      
              var productQuery = from orderDetail in orderDetailsTable.AsEnumerable()
                                 join product in productsTable.AsEnumerable() on
                                     orderDetail.Field<int>("Product ID")
                                 equals product.Field<int>("Product ID")
                                 where orderDetail.Field<int>("Order ID") ==
                                     orderItem.OrderID
                                 select new { ProductName = product.Field<string>("Product Name") };
      
              foreach (var productItem in productQuery)
              {
                  RibbonButton button = CreateRibbonButton();
                  button.Label = productItem.ProductName;
                  orderMenu.Items.Add(button);
              }
          }
      }
      

  10. No Gerenciador de Soluções, clique duas vezes no arquivo de código da Faixa de Opções.

    O Designer da Faixa de Opções é aberto.

  11. No Designer da Faixa de Opções, clique duas vezes na caixa de combinação Clientes .

    O arquivo de código da Faixa de Opções é aberto no Editor de Códigos e o ComboBox1_TextChanged manipulador de eventos é exibido.

  12. Substitua o ComboBox1_TextChanged manipulador de eventos pelo código a seguir. Esse código executa as seguintes tarefas:

    • Chama o PopulateSalesOrderInfo método auxiliar. Esse método atualiza o menu Produtos comprados com ordens de venda relacionadas ao cliente selecionado.

    • Chama o método auxiliar e passa o texto atual, que é o PopulateMailItem nome do cliente selecionado. Esse método preenche os campos Para, Assunto e Corpo de novas mensagens de email.

      private void comboBox1_TextChanged(object sender,
          RibbonControlEventArgs e)
      {
          PopulateSalesOrderInfo();
          PopulateMailItem(comboBox1.Text);
      }
      

  13. Adicione o seguinte Click manipulador de eventos à CustomerRibbon classe. Esse código adiciona o nome dos produtos selecionados ao campo Corpo das novas mensagens de email.

    void button_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Application application = Globals.ThisAddIn.Application;
        Outlook.Inspector inspector = application.ActiveInspector();
        Outlook.MailItem myMailItem = (Outlook.MailItem)inspector.CurrentItem;
        RibbonButton myCheckBox = (RibbonButton)sender;
        myMailItem.Subject = "Following up on your order";
        myMailItem.Body = myMailItem.Body + "\n" + "* " + myCheckBox.Label;
    }
    
  14. Adicione o código a seguir à classe CustomerRibbon . Esse código executa as seguintes tarefas:

    • Preenche a linha Para de novas mensagens de email usando o endereço de email do cliente selecionado no momento.

    • Adiciona texto aos campos Assunto e Corpo de novas mensagens de email.

      private void PopulateMailItem(string addressToLine)
      {
          Outlook.Application application = Globals.ThisAddIn.Application;
          Outlook.Inspector inspector = application.ActiveInspector();
          Outlook.MailItem myMailItem = (Outlook.MailItem)inspector.CurrentItem;
      
          myMailItem.To = "";
          String[] tempArray = addressToLine.Split(new Char[] { '|' });
          myMailItem.To = tempArray[0] + "@example.com";
          myMailItem.Subject = "Following up on your order";
          myMailItem.Body = "Hello " + tempArray[0] + "," +
              "\n" + "We would like to get your feedback on the " +
              "following products that you recently ordered: ";
      }
      

Testar os controles no grupo personalizado

Quando você abre um novo formulário de email no Outlook, um grupo personalizado chamado Compras do Cliente aparece na guia Mensagens da Faixa de Opções.

Para criar uma mensagem de email de acompanhamento do cliente, selecione um cliente e, em seguida, selecione os produtos comprados pelo cliente. Os controles no grupo Compras do cliente são atualizados em tempo de execução com dados do banco de dados Northwind.

Para testar os controles no grupo personalizado

  1. Pressione F5 para executar o projeto.

    O Outlook é iniciado.

  2. No Outlook, no menu arquivo , aponte para novo e, em seguida, clique em mensagem de email .

    As seguintes ações ocorrem:

    • Uma nova janela do Inspetor de mensagens de email é exibida.

    • Na guia Mensagem da faixa de opções, o grupo Compras do Cliente aparece antes do grupo Área de Transferência.

    • A caixa de combinação Clientes no grupo é atualizada com os nomes dos clientes no banco de dados Northwind.

  3. Na guia Mensagem da faixa de opções, no grupo Compras do Cliente, selecione um cliente na caixa de combinação Clientes.

    As seguintes ações ocorrem:

    • O menu Produtos comprados é atualizado para mostrar cada ordem de venda para o cliente selecionado.

    • Cada submenu da ordem do cliente é atualizado para mostrar os produtos comprados nessa ordem.

    • O endereço de email do cliente selecionado é adicionado à linha Para da mensagem de email, e o assunto e o corpo da mensagem de email são preenchidos com texto.

  4. Clique no menu Compras de Produtos, aponte para qualquer ordem de venda e clique em um produto da ordem de venda.

    O nome do produto é adicionado ao corpo da mensagem de email.

Próximas etapas

Você pode saber mais sobre como personalizar a interface do usuário do Office a partir destes tópicos:

  • Adicione a interface do usuário baseada em contexto a qualquer personalização em nível de documento. Para obter mais informações, consulte Visão geral do painel Ações.

  • Estender um formulário padrão ou personalizado do Microsoft Office Outlook. Para obter mais informações, consulte Demonstra Passo a passo: Criar uma região de formulário do Outlook.

  • Adicione um painel de tarefas personalizado ao Outlook. Para obter mais informações, consulte Painéis de tarefas personalizados.