Пошаговое руководство. Обновление элементов управления на ленте во время выполнения

В этом пошаговом руководстве показано, как использовать объектную модель ленты для обновления элементов управления на ленте после загрузки ленты в Приложение Office ликацию.

Область применения: сведения в этом разделе относятся к проектам на уровне документа и проектам надстроек VSTO для следующих приложений: Excel; InfoPath 2013 и InfoPath 2010; Outlook; Powerpoint; Проекта; Visio; Слово. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

В данном примере данные извлекаются из примера базы данных Northwind (Борей) для заполнения поля со списком и меню в Microsoft Office Outlook. Элементы, выбранные в этих элементах управления, автоматически заполняют поля, такие как "To " и "Тема " в сообщении электронной почты.

В этом пошаговом руководстве рассматриваются следующие задачи:

  • Создайте проект надстройки VSTO Outlook.

  • Разработка настраиваемой группы ленты.

  • Добавьте настраиваемую группу на встроенную вкладку.

  • Обновите элементы управления на ленте во время выполнения.

Примечание.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки Visual Studio.

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

Создание проекта надстройки VSTO Для Outlook

Сначала создайте проект надстройки Outlook VSTO.

Порядок создания нового проекта надстройки Outlook VSTO

  1. В Visual Studio создайте проект надстройки VSTO Outlook с именем Ribbon_Update_At_Runtime.

  2. В диалоговом окне Создание проекта выберите Создать каталог для решения.

  3. Сохраните проект в каталоге проекта по умолчанию.

    Дополнительные сведения см. в статье "Практическое руководство. Создание проектов Office в Visual Studio".

Разработка настраиваемой группы ленты

Лента для этого примера появится, когда пользователь создает новое почтовое сообщение. Чтобы создать настраиваемую группу для ленты, сначала добавьте элемент ленты в проект, а затем создайте группу в конструкторе лент. Эта настраиваемая группа поможет вам создавать последующие сообщения электронной почты клиентам, извлекая имена и журналы заказов из базы данных.

Порядок создания пользовательской группы

  1. В меню Проект выберите Добавить новый элемент.

  2. В диалоговом окне Добавление нового элемента выберите элемент Лента (визуальный конструктор).

  3. Измените имя новой ленты на CustomerRibbon и нажмите кнопку "Добавить".

    Файл CustomerRibbon.cs или CustomerRibbon.vb открывается в конструкторе лент и отображает вкладку и группу по умолчанию.

  4. Щелкните конструктор лент, чтобы выбрать его.

  5. В окне "Свойства" щелкните стрелку раскрывающегося списка рядом со свойством RibbonType, а затем щелкните Microsoft.Outlook.Mail.Compose.

    Это позволяет ленте отображаться, когда пользователь создает новое почтовое сообщение в Outlook.

  6. В конструкторе ленты нажмите кнопку Group1 , чтобы выбрать ее.

  7. В окне "Свойства" установите метку "Покупки клиентов".

  8. На вкладке "Элементы управления лентой Office" панели элементов перетащите comboBox в группу "Покупки клиентов".

  9. Щелкните ComboBox1 , чтобы выбрать его.

  10. В окне "Свойства" задайте для клиентов метку.

  11. На вкладке "Элементы управления лентой Office" панели элементов перетащите меню в группу "Покупки клиентов".

  12. В окне "Свойства" задайте значение "Метка", чтобы приобрести продукт.

  13. Задайте для dynamic значение true.

    Это позволяет добавлять и удалять элементы управления в меню во время выполнения после загрузки ленты в Приложение Office ликацию.

Добавление настраиваемой группы на встроенную вкладку

Встроенная вкладка — это вкладка, которая уже находится на ленте outlook Обозреватель или инспектора. В этой процедуре вы сможете добавить пользовательскую группу на встроенную вкладку, а затем указать положение этой группы на вкладке.

Порядок добавления пользовательской группы на встроенную вкладку

  1. Щелкните вкладку TabAddins (встроенная), чтобы выбрать ее.

  2. В окне "Свойства" разверните свойство ControlId и задайте для OfficeId значение TabNewMailMessage.

    При этом группа "Покупки клиентов" добавляется на вкладку "Сообщения" ленты, которая отображается в новом почтовом сообщении.

  3. Щелкните группу "Покупки клиентов", чтобы выбрать ее.

  4. В окне "Свойства" разверните свойство Position, щелкните стрелку раскрывающегося списка рядом со свойством PositionType и нажмите кнопку "ПередOfficeId".

  5. Задайте для свойства OfficeId значение GroupClipboard.

    Эта группа позиционирует группу "Покупки клиентов" перед группой буфера обмена на вкладке "Сообщения".

Создание источника данных

С помощью окна Источники данных добавьте типизированный набор данных в свой проект.

Создание источника данных

  1. В меню Данные выберите команду Добавить новый источник данных.

    Откроется мастер настройки источника данных.

  2. Выберите "База данных" и нажмите кнопку "Далее".

  3. Выберите набор данных и нажмите кнопку "Далее".

  4. Выберите подключение к образцу базы данных Microsoft SQL Server Compact 4.0 или добавьте новое подключение с помощью кнопки "Создать Подключение ion".

  5. После выбора или создания подключения нажмите кнопку "Далее".

  6. Нажмите кнопку "Далее", чтобы сохранить строка подключения.

  7. На странице "Выбор объектов базы данных" разверните таблицы.

  8. Установите флажок рядом с каждой из следующих таблиц.

    1. Клиенты

    2. Сведения о заказе

    3. Заказы

    4. Товары

  9. Нажмите кнопку Готово.

Обновление элементов управления в пользовательской группе во время выполнения

Используйте объектную модель ленты для выполнения следующих задач.

  • Добавьте имена клиентов в поле со списком "Клиенты ".

  • Добавьте элементы управления меню и кнопки в меню "Приобретенные продукты", представляющее заказы на продажу и продукты, проданные .

  • Заполните поля "Кому", "Тема" и "Текст" новых почтовых сообщений с помощью данных из поля "Клиенты " и меню "Приобретенные продукты".

Порядок обновления элементов управления в пользовательской группе с помощью объектной модели ленты

  1. В меню Проект выберите пункт Добавить ссылку.

  2. В диалоговом окне "Добавить ссылку" щелкните вкладку .NET, выберите сборку System.Data.Linq и нажмите кнопку "ОК".

    Эта сборка содержит классы для использования запросов LINQ (Language-Integrated Queries). Запросы LINQ будут использоваться для заполнения элементов управления в пользовательской группе данными из базы данных Northwind.

  3. В Обозреватель решений щелкните CustomerRibbon.cs или CustomerRibbon.vb, чтобы выбрать его.

  4. В меню Вид выберите пункт Код.

    Файл кода ленты открывается в редакторе кода.

  5. Добавьте следующие операторы в начало файла кода ленты. Эти операторы обеспечивают легкий доступ к пространствам имен LINQ и к пространству имен основной сборки взаимодействия 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. Добавьте следующий код в CustomerRibbon класс. Этот код объявляет таблицу данных и адаптеры таблиц, которые будут использоваться для хранения информации из таблиц «Заказчики», «Заказы», «Сведения о заказе» и «Продукт» базы данных 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. Добавьте следующий блок кода в класс CustomerRibbon. Этот код добавляет три вспомогательных метода, которые создают элементы управления для ленты во время выполнения.

    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. Замените обработчик событий CustomerRibbon_Load следующим кодом. Этот код использует запрос LINQ для выполнения следующих задач.

    • Заполните поле со списком "Клиенты" с помощью идентификатора и имени 20 клиентов в базе данных Northwind.

    • Вызов вспомогательного метода PopulateSalesOrderInfo. Этот метод обновляет меню ProductsPurchased с номерами заказов на продажу, которые относятся к выбранному клиенту.

      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. Добавьте в класс CustomerRibbon приведенный далее код. Этот код использует запросы LINQ для выполнения следующих задач.

    • Добавляет подменю в меню ProductsPurchased для каждого заказа на продажу, связанного с выбранным клиентом.

    • Добавление кнопок в каждое подменю для продуктов, относящихся к заказу на продажу.

    • Добавление обработчиков событий для каждой кнопки.

      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. В Обозреватель решений дважды щелкните файл кода ленты.

    Открывается конструктор лент.

  11. В конструкторе ленты дважды щелкните поле со списком "Клиенты ".

    В редакторе кода открывается файл кода ленты и появляется обработчик событий ComboBox1_TextChanged.

  12. Замените обработчик событий ComboBox1_TextChanged следующим кодом. Этот код выполняет следующие задачи:

    • Вызов вспомогательного метода PopulateSalesOrderInfo. Этот метод обновляет меню "Продукты, приобретенные " с заказами на продажу, которые относятся к выбранному клиенту.

    • Вызов вспомогательного метода PopulateMailItem и передача текущего текста, представляющего собой имя выбранного заказчика. Этот метод заполняет поля "To", "Тема" и "Текст" новых почтовых сообщений.

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

  13. Добавьте следующий обработчик событий Click в класс CustomerRibbon . Этот код добавляет имя выбранных продуктов в поле "Текст" новых почтовых сообщений.

    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. Добавьте в класс CustomerRibbon приведенный далее код. Этот код выполняет следующие задачи:

    • Заполняет строку "To" новых почтовых сообщений с помощью адреса электронной почты выбранного клиента.

    • Добавляет текст в поля "Тема" и "Текст" новых почтовых сообщений.

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

Тестирование элементов управления в пользовательской группе

При открытии новой формы почты в Outlook на вкладке "Сообщения" ленты появится пользовательская группа с именем "Покупки клиентов".

Чтобы создать сообщение электронной почты клиента, выберите клиента и выберите продукты, приобретенные клиентом. Элементы управления в группе "Покупки клиентов" обновляются во время выполнения с данными из базы данных Northwind.

Порядок тестирования элементов управления в пользовательской группе

  1. Нажмите клавишу F5 для запуска проекта.

    Запускается Outlook.

  2. В Outlook в меню "Файл" наведите указатель мыши на "Создать" и нажмите кнопку "Почта".

    Происходят следующие действия:

    • Откроется новое окно инспектора сообщений электронной почты.

    • На вкладке "Сообщение" ленты группа "Покупки клиентов" появится перед группой буфера обмена.

    • Поле со списком "Клиенты " в группе обновляется с именами клиентов в базе данных Northwind.

  3. На вкладке "Сообщение" ленты в группе "Покупки клиентов" выберите клиента в поле со списком "Клиенты".

    Происходят следующие действия:

    • Меню "Приобретенные продукты" обновляется, чтобы отобразить каждый заказ на продажу для выбранного клиента.

    • Каждое подменю заказов на продажу обновится и будет показывать продукты, приобретенные в рамках данного заказа.

    • Выбранный адрес электронной почты клиента добавляется в строку "To " сообщения, а тема и текст сообщения заполняются текстом.

  4. Щелкните меню "Покупки продуктов", наведите указатель на любой заказ на продажу и выберите продукт из заказа на продажу.

    Имя продукта добавляется в тело сообщения электронной почты.

Следующие шаги

Дополнительные сведения о настройке пользовательского интерфейса Office см. в следующих разделах:

  • Добавление пользовательского интерфейса на основе контекста к настройкам уровня документа. Дополнительные сведения см. в обзоре области действий.

  • Расширение стандартной или пользовательской формы Microsoft Office Outlook. Дополнительные сведения см. в пошаговом руководстве. Проектирование области формы Outlook.

  • Добавление настраиваемой области задач в Outlook. Дополнительные сведения см. в разделе "Пользовательские области задач".