Condividi tramite


Procedura dettagliata: aggiornare i controlli in una barra multifunzione in fase di esecuzione

Questa procedura dettagliata illustra come usare il modello a oggetti della barra multifunzione per aggiornare i controlli su una barra multifunzione dopo il caricamento della barra multifunzione nella app Office lication.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti a livello di documento e ai progetti di componente aggiuntivo VSTO per le applicazioni seguenti: Excel; InfoPath 2013 e InfoPath 2010; Outlook; Powerpoint; Progetto; Visio; Parola. Per altre informazioni, vedere Funzionalità disponibili per app Office lication e tipo di progetto.

L'esempio usa i dati del database di esempio Northwind per popolare una casella combinata e un menu in Microsoft Office Outlook. Gli elementi selezionati in questi controlli popolano automaticamente campi come To e Subject in un messaggio di posta elettronica.

In questa procedura dettagliata sono illustrati i task seguenti:

  • Creare un nuovo progetto di componente aggiuntivo VSTO di Outlook.

  • Progettare un gruppo della barra multifunzione personalizzato.

  • Aggiungere il gruppo personalizzato a una scheda predefinita.

  • Aggiornare i controlli sulla barra multifunzione in fase di esecuzione.

Nota

I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzare l'IDE di Visual Studio.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei componenti seguenti:

Creare un nuovo progetto di componente aggiuntivo VSTO di Outlook

Prima di tutto, creare un progetto di componente aggiuntivo VSTO di Outlook.

Per creare un nuovo progetto di componente aggiuntivo VSTO di Outlook

  1. In Visual Studio creare un progetto di componente aggiuntivo VSTO di Outlook con il nome Ribbon_Update_At_Runtime.

  2. Nella finestra di dialogo Nuovo progetto selezionare Crea directory per soluzione.

  3. Salvare il progetto nella directory del progetto predefinita.

    Per altre informazioni, vedere Procedura: Creare progetti di Office in Visual Studio.

Progettare un gruppo della barra multifunzione personalizzato

La barra multifunzione per questo esempio verrà visualizzata quando un utente compone un nuovo messaggio di posta elettronica. Per creare un gruppo personalizzato per la barra multifunzione, aggiungere prima un elemento della barra multifunzione al progetto e quindi progettare il gruppo in Progettazione barra multifunzione. Questo gruppo personalizzato consente di generare messaggi di posta elettronica di completamento ai clienti eseguendo il pull dei nomi e delle cronologie degli ordini da un database.

Per progettare un gruppo personalizzato

  1. Dal menu Progetto fare clic su Aggiungi nuovo elemento.

  2. Nella finestra di dialogo Aggiungi nuovo elemento selezionare Barra multifunzione (finestra di progettazione visiva).

  3. Modificare il nome della nuova barra multifunzione in CustomerRibbon e quindi fare clic su Aggiungi.

    Il file CustomerRibbon.cs o CustomerRibbon.vb viene aperto nella finestra di progettazione della barra multifunzione e visualizza una scheda e un gruppo predefiniti.

  4. Fare clic nella finestra di progettazione per selezionarlo.

  5. Nella finestra Proprietà fare clic sulla freccia a discesa accanto alla proprietà RibbonType, quindi fare clic su Microsoft.Outlook.Mail.Compose.

    In questo modo la barra multifunzione viene visualizzata quando l'utente compone un nuovo messaggio di posta elettronica in Outlook.

  6. In Progettazione barra multifunzione fare clic su Group1 per selezionarlo.

  7. Nella finestra Proprietà impostare Etichetta su Acquisti cliente.

  8. Dalla scheda Controlli della barra multifunzione di Office della casella degli strumenti trascinare un controllo ComboBox nel gruppo Acquisti clienti.

  9. Fare clic su ComboBox1 per selezionarlo.

  10. Nella finestra Proprietà impostare Etichetta su Clienti.

  11. Dalla scheda Controlli barra multifunzione di Office della Casella degli strumenti trascinare un menu nel gruppo Acquisti clienti.

  12. Nella finestra Proprietà impostare Etichetta su Prodotto acquistato.

  13. Impostare Dynamic su true.

    In questo modo è possibile aggiungere e rimuovere controlli nel menu in fase di esecuzione dopo il caricamento della barra multifunzione nella app Office lication.

Aggiungere il gruppo personalizzato a una scheda predefinita

Una scheda predefinita è una scheda già presente sulla barra multifunzione di Outlook Explorer o Inspector. In questa procedura, si aggiunge il gruppo personalizzato a una scheda predefinita e quindi si specifica la posizione del gruppo personalizzato nella scheda.

Per aggiungere il gruppo personalizzato a una scheda predefinita

  1. Fare clic sulla scheda TabAggiungi (predefinita) per selezionarla.

  2. Nella finestra Proprietà espandere la proprietà ControlId e quindi impostare OfficeId su TabNewMailMessage.

    Verrà aggiunto il gruppo Acquisti clienti alla scheda Messaggi della barra multifunzione visualizzata in un nuovo messaggio di posta elettronica.

  3. Fare clic sul gruppo Acquisti clienti per selezionarlo.

  4. Nella finestra Proprietà espandere la proprietà Position, fare clic sulla freccia a discesa accanto alla proprietà PositionType e quindi fare clic su BeforeOfficeId.

  5. Impostare la proprietà OfficeId su GroupClipboard.

    In questo modo il gruppo Acquisti cliente viene posizionato prima del gruppo Appunti della scheda Messaggi.

Creare l'origine dati

Usare la finestra Origini dati per aggiungere un DataSet tipizzato al progetto.

Per creare l'origine dati

  1. Scegliere Aggiungi nuova origine dati dal menu Dati.

    Verrà avviata la Configurazione guidata origine dati.

  2. Selezionare Database e quindi fare clic su Avanti.

  3. Selezionare Set di dati e quindi fare clic su Avanti.

  4. Selezionare una connessione dati al database di esempio Northwind di Microsoft SQL Server Compact 4.0 oppure aggiungere una nuova connessione usando il pulsante Nuovo Connessione ion.

  5. Dopo aver selezionato o creato una connessione, fare clic su Avanti.

  6. Fare clic su Avanti per salvare il stringa di connessione.

  7. Nella pagina Scegli oggetti di database espandere Tabelle.

  8. Selezionare la casella di controllo accanto a ciascuna delle seguenti tabelle:

    1. Clienti

    2. Dettagli ordine

    3. Ordini

    4. Prodotti

  9. Fare clic su Fine.

Aggiornare i controlli nel gruppo personalizzato in fase di esecuzione

Usare il modello a oggetti della barra multifunzione per effettuare le seguenti attività:

  • Aggiungere i nomi dei clienti alla casella combinata Clienti .

  • Aggiungere controlli menu e pulsante al menu Prodotti acquistati che rappresentano gli ordini di vendita e i prodotti venduti.

  • Popolare i campi A, Oggetto e Corpo dei nuovi messaggi di posta utilizzando i dati della casella combinata Clienti e del menu Prodotti acquistati .

Per aggiornare i controlli nel gruppo personalizzato usando il modello a oggetti della barra multifunzione

  1. Scegliere Aggiungi riferimento dal menu Progetto.

  2. Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda .NET , selezionare l'assembly System.Data.Linq e quindi fare clic su OK.

    Questo assembly contiene le classi per l'uso di Language-Integrated Queries (LINQ). LINQ viene usato per popolare i controlli nel gruppo personalizzato con i dati del database Northwind.

  3. In Esplora soluzioni fare clic su CustomerRibbon.cs o CustomerRibbon.vb per selezionarlo.

  4. Scegliere Codice dal menu Visualizza.

    Il file di codice della barra multifunzione viene aperto nell'editor di codice.

  5. Aggiungere le seguenti istruzioni alla parte iniziale del file di codice della barra multifunzione. Queste istruzioni forniscono l'accesso agli spazi dei nomi LINQ e allo spazio dei nomi dell'assembly di interoperabilità primario (PIA) di 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. Aggiungere il codice seguente all'interno della CustomerRibbon classe . Il codice dichiara la tabella dati e gli adattatori di tabella che verranno usati per archiviare le informazioni delle tabelle Clienti, Ordini, Dettagli sugli ordini e Prodotti del database 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. Aggiungere il seguente blocco di codice alla classe CustomerRibbon. Questo codice aggiunge tre metodi helper che creano controlli per la barra multifunzione in fase di esecuzione.

    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. Sostituire il metodo del gestore eventi CustomerRibbon_Load con il codice seguente. Questo codice usa una query LINQ per eseguire le attività seguenti:

    • Popolare la casella combinata Clienti usando l'ID e il nome di 20 clienti nel database Northwind.

    • Chiama il metodo di supporto PopulateSalesOrderInfo. Questo metodo aggiorna il menu ProductsPurchased con numeri di ordine di vendita relativi al cliente attualmente selezionato.

      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. Aggiungere il codice seguente alla classe CustomerRibbon . Questo codice usa le query LINQ per eseguire le attività seguenti:

    • Aggiunge un sottomenu al menu ProductsPurchased per ogni ordine di vendita correlato al cliente selezionato.

    • Aggiungere pulsanti a ogni sottomenu per i prodotti relativi all'ordine di vendita.

    • Aggiungere gestori eventi a ogni pulsante.

      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. In Esplora soluzioni fare doppio clic sul file di codice della barra multifunzione.

    La finestra di progettazione della barra multifunzione viene aperta.

  11. Nella finestra di progettazione della barra multifunzione fare doppio clic sulla casella combinata Clienti .

    Nell'editor di codice viene aperto il file di codice della barra multifunzione e viene visualizzato il gestore eventi ComboBox1_TextChanged.

  12. Sostituire il gestore eventi ComboBox1_TextChanged con il codice seguente. Il codice esegue queste operazioni:

    • Chiama il metodo di supporto PopulateSalesOrderInfo. Questo metodo aggiorna il menu Prodotti acquistati con gli ordini di vendita correlati al cliente selezionato.

    • Chiama il metodo di supporto PopulateMailItem e passa al testo corrente, ossia il nome del cliente selezionato. Questo metodo popola i campi To, Subject e Body dei nuovi messaggi di posta elettronica.

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

  13. Aggiungere il gestore eventi Click seguente alla classe CustomerRibbon . Questo codice aggiunge il nome dei prodotti selezionati al campo Corpo dei nuovi messaggi di posta elettronica.

    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. Aggiungere il codice seguente alla classe CustomerRibbon . Il codice esegue queste operazioni:

    • Popola la riga A dei nuovi messaggi di posta elettronica utilizzando l'indirizzo di posta elettronica del cliente attualmente selezionato.

    • Aggiunge testo ai campi Oggetto e Corpo dei nuovi messaggi di posta elettronica.

      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: ";
      }
      

Testare i controlli nel gruppo personalizzato

Quando si apre un nuovo modulo di posta elettronica in Outlook, viene visualizzato un gruppo personalizzato denominato Acquisti cliente nella scheda Messaggi della barra multifunzione.

Per creare un messaggio di posta elettronica di completamento del cliente, selezionare un cliente e quindi selezionare i prodotti acquistati dal cliente. I controlli nel gruppo Customer Purchases vengono aggiornati in fase di esecuzione con i dati del database Northwind.

Per testare i controlli nel gruppo personalizzato

  1. Premere F5 per eseguire il progetto.

    Viene avviato Outlook.

  2. In Outlook scegliere Nuovo dal menu File e quindi fare clic su Messaggio di posta elettronica.

    Si verifica quanto segue:

    • Viene visualizzata una nuova finestra di controllo del messaggio di posta.

    • Nella scheda Messaggio della barra multifunzione viene visualizzato il gruppo Acquisti clienti prima del gruppo Appunti.

    • La casella combinata Customers nel gruppo viene aggiornata con i nomi dei clienti nel database Northwind.

  3. Nella scheda Messaggio della barra multifunzione, nel gruppo Acquisti cliente selezionare un cliente dalla casella combinata Clienti.

    Si verifica quanto segue:

    • Il menu Prodotti acquistati viene aggiornato per visualizzare ogni ordine di vendita per il cliente selezionato.

    • Ogni sottomenu dell'ordine di vendita viene aggiornato in modo da visualizzare i prodotti acquistati in quell'ordine.

    • L'indirizzo di posta elettronica del cliente selezionato viene aggiunto alla riga A del messaggio di posta elettronica e l'oggetto e il corpo del messaggio di posta elettronica vengono popolati con testo.

  4. Fare clic sul menu Acquisti prodotti , scegliere qualsiasi ordine di vendita e quindi fare clic su un prodotto dall'ordine di vendita.

    Il nome di prodotto viene aggiunto al corpo del messaggio di posta.

Passaggi successivi

È possibile trovare ulteriori informazioni sulla personalizzazione dell'interfaccia utente di Office nei seguenti argomenti:

  • Aggiunta di un'interfaccia utente basata sul contesto a una personalizzazione a livello di documento. Per altre informazioni, vedere Panoramica del riquadro Azioni.

  • Estensione di un modulo standard o personalizzato di Microsoft Office Outlook. Per altre informazioni, vedere Procedura dettagliata: Progettare un'area del modulo di Outlook.

  • Aggiungere un riquadro attività personalizzato a Outlook. Per altre informazioni, vedere Riquadri attività personalizzati.