İzlenecek Yol: Şerit Denetimlerini Çalışma Zamanında Güncelleme
Bu izlenecek yol, Şerit, Office uygulamasına yüklendikten sonra Şerit denetimlerini güncellemek için Şerit nesne modelinin nasıl kullanılacağını gösterir.
Uygulama hedefi: Bu konudaki bilgiler, şu uygulamalar için belge düzeyi projeler ve uygulama düzeyi projelere yöneliktir: Excel 2013 ve Excel 2010; InfoPath 2013 ve InfoPath 2010; Outlook 2013 ve Outlook 2010; PowerPoint 2013 ve PowerPoint 2010; Project 2013 ve Project 2010; Visio 2013 ve Visio 2010; Word 2013 ve Word 2010. Daha fazla bilgi edinmek için, bkz. Office Uygulaması ve Proje Türüne Göre Kullanılabilir Özellikler.
Bu örnek Microsoft Office Outlook birleşik giriş kutusu ve menüsünü doldurmak için Northwind örnek veritabanından veri çeker.Bu denetimlerde seçtiğiniz öğeler e-posta iletisinin To ve Subject gibi alanlarına otomatik olarak doldurulur.
Bu örneklerde aşağıdaki görevler gösterilir:
Yeni Outlook eklenti projesi oluşturma.
Özel Şerit grubu tasarlama.
Özel grubu yapılandırma sekmesine ekleme.
Şerit denetimlerini çalışma zamanında güncelleme.
[!NOT]
Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arayüzü öğelerinden bazıları için farklı adlar veya konumlar gösterebilir.Bu öğeleri bilgisayarınızdaki Visual Studio sürümü ve kullandığınız ayarlar belirler.Daha fazla bilgi için bkz. Visual Studio'da Geliştirme Ayarlarını özelleştirme.
Önkoşullar
Bu örneği tamamlamak için aşağıdaki bileşenler gerekmektedir:
Microsoft Office geliştirici araçlarını içeren bir Visual Studio 2013 sürümü. Daha fazla bilgi edinmek için, bkz. Office Çözümleri Geliştirmek İçin Bilgisayarı Yapılandırma.
Microsoft Outlook 2010 veya Office 2013.
Yeni Outlook Eklenti Projesi Oluşturma
Önce Outlook eklenti projesi oluşturun.
Yeni Outlook eklenti projesi oluşturmak için
İçinde Visual Studio, oluşturma bir Outlook 2010 veya Outlook 2013 Çalışma_Zamanında_Şerit_Güncelleme adlı eklenti projesi.
Yeni Proje iletişim kutusunda Çözüm için Dizin Oluştur'u şeçin.
Projeyi varsayılan proje dizinine kaydedin.
Daha fazla bilgi için bkz. Nasıl Yapılır: Visual Studio'da Office Projeleri Oluşturma.
Özel Şerit Grubu Tasarlama
Kullanıcı yeni bir posta mesajı yazdığında bu örnek için Şerit belirecektir.Şerite özel bir grup oluşturmak için projenize önce bir Şerit öğesi ekleyin ve sonra bu grubu Şerit Tasarımcısında tasarlayın.Bu özel grup veri tabanından isimleri ve sipariş geçmişlerini çekerek müşteriler için takip e-posta iletisi oluşturmanıza yardımcı olur.
Özel bir grup tasarlamak için
Proje menüsünde, Yeni Öğe Ekle'yi tıklatın.
Yeni Öge Ekle iletişim kutusunda, Şerit (Görsel Tasarımcı)'yı seçin.
Yeni Şerit'in adını CustomerRibbon olarak değiştirin ve sonra Add'e tıklayın.
CustomerRibbon.cs ya da CustomerRibbon.vb dosyası Şerit Tasarımcısı'nda açılır ve varsayılan bir sekme ve grup görüntüler.
Seçmek için Şerit Tasarımcı'sına tıklayın.
Properties penceresinde RibbonType özelliğinin yanındaki açılır oku ve sonra Microsoft.Outlook.Mail.Compose'u tıklayın.
Bu, kullanıcı Outlook'ta yeni bir posta mesajı yazdığında Şerit'i etkinleştirir.
Seçmek için Şerit Tasarımcı'sında Group1'ı tıklayın.
İçinde özelliklerini penceresinde, etiketi Müşteri Harcamaları için.
Toolbox'ın Office Ribbon Controls sekmesinden ComboBox'ı Müşteri Harcamaları grubuna sürükleyin.
Seçmek için ComboBox1'ı seçin.
İçinde özelliklerini penceresinde, etiketi müşterileri için.
Toolbox'ın Office Ribbon Controls sekmesinden Menü'yü Müşteri Harcamaları grubuna sürükleyin.
İçinde özelliklerini penceresinde, etiketi için bir ürün satın.
Dynamic'i true olarak ayarlayın.
Bu, Şerit Office uygulamasına yüklendikten sonra çalışma zamanında menüye denetim eklemenizi veya menüden denetim çıkarmanızı sağlar.
Özel Grubu Yapılandırma Sekmesine Ekleme
Yapılandırma sekmesi Outlook Explorer veya Inspector Şeridinde önceden bulunan bir sekmedir.Bu yordamda özel grubu bir yapılandırma sekmesine ekleyecesiniz ve sonra bu özel grubun sekmedeki konumunu beliryeceksiniz.
Özel grubu yapılandırma sekmesine eklemek için
Seçmek için TabAddins (Built-In) sekmesine tıklayın.
İçinde özellikleri penceresinde genişletin ControlId özelliği ve ardından OfficeId için TabNewMailMessage.
Bu, yeni posta iletisinde görünen Şerit'in Müşteri Harcamaları grubunu Messages sekmesine ekler.
Seçmek için Müşteri Harcamaları grubuna tıklayın.
Properties penceresinde Position özelliğini genişletin, PositionType özelliğinin yanındaki açılır oku ve daha sonra BeforeOfficeId'yi tıklayın.
Set OfficeId özelliğini GroupClipboard.
Bu, Müşteri Harcamaları grubunu Messages sekmesinin Pano grubundan önce konumlandırır.
Veri Kaynağı Oluşturma
Projenize yazılmış veri kümesi eklemek için Veri Kaynağı penceresini kullanın.
Veri kaynağı oluşturmak için
Data menüsünden Yeni Veri Kaynağı Ekle 'yi tıklayın.
Veri Kaynağı Yapılandırma Sihirbaz'ını başlatır.
Veritabanı'nı seçin ve sonra İleri'yi tıklayın.
Veri Kümesi'ni seçin ve sonra İleri'yi tıklayın.
Microsoft SQL Server Compact 4.0 Northwind örnek veri tabanına bir veri bağlantısı seçin veya New Connection düğmesini kullanarak yeni bir bağlantı ekleyin.
Bağlantı seçildikten veya oluşturulduktan sonra İleri'yi tıklatın.
Bağlantı dizesini kaydetmek için İleri'yi tıklayın.
Veritabanı Nesnenizi Seçin sayfasında Tables'ı genişletin.
Aşağıdaki her tablonun yanındaki onay kutusunu seçin:
Müşteriler
Sipariş Detayları
Siparişler
Ürünler
Son düğmesini tıklatın.
Özel Grup Denetimlerini Çalışma Zamanında Güncelleme
Aşağıdaki görevleri gerçekleştirmek için Şerit nesne modelini kullanın:
Müşteri isimlerini Müşteriler birleşik giriş kutusuna ekleyin.
Menü ve düğme kontrollerini, satış siparişlerini ve satılan ürünleri gösteren Satın Alınan Ürünler menüsüne ekleyin.
Müşteriler birleşik giriş kutusu ve Satın Alınan Ürünler menüsünden verileri kullanarak yeni posta iletisinin To, Subject ve Body alanlarını doldurun.
Şerit nesne modelini kullanarak özel grup denetimlerini güncellemek için
Proje menüsünde, Başvuru Ekle'yi tıklatın.
Add Reference iletişim kutusunda .NET sekmesine tıklayın ve System.Data.Linq derleyicisini seçin ve sonra Tamam'ı tıklayın.
Bu derleyici Dil İle Tümleşik Sorgular'ı (LINQ) kullanmak için gereken sınıfları içerir.Özel grup denetimlerini Northwind veri tabanından veri ile doldurmak için LINQ kullanacaksınız.
Seçmek için Çözüm Gezgini'nde CustomerRibbon.cs veya CustomerRibbon.vb'ye tıklayın.
View menüsünde Code'u tıklayın.
Şerit kod dosyası Kod Düzenleyici'sinde açılır.
Şerit kod dosyanın en üstüne aşağıdaki deyimleri ekleyin.Bu deyimler LINQ isim uzayına ve Outlook birincil birlikte çalışma derlemesine (PIA) kolay erişim sağlar.
Imports System.Data.Linq Imports System.Linq Imports System.Data.Linq.Mapping Imports System.Linq.Expressions Imports Outlook = Microsoft.Office.Interop.Outlook Imports Ribbon_Update_At_Runtime.Northwind40DataSetTableAdapters
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;
Aşağıdaki kodu CustomerRibbon sınıfına ekleyin.Bu kod, Northwind veri tabanının Müşteri, Siparişler, Sipariş Detayları ve Ürün tablolarından bilgi yüklemek için kullanacağınız veri tablolarını ve tablo bağdaştırıcılarını bildirir.
'Declare the Northwind data set. Dim nwDataSet As Northwind40DataSet = New Northwind40DataSet() 'Declare the data tables. Dim customerTable As Northwind40DataSet.CustomersDataTable Dim orderTable As Northwind40DataSet.OrdersDataTable Dim orderDetailsTable As Northwind40DataSet.Order_DetailsDataTable Dim productsTable As Northwind40DataSet.ProductsDataTable 'Declare the data table adapters for each table. Dim customersTableAdapter As CustomersTableAdapter = New CustomersTableAdapter() Dim ordersTableAdapter As OrdersTableAdapter = New OrdersTableAdapter() Dim detailsTableAdapter As Order_DetailsTableAdapter = New Order_DetailsTableAdapter() Dim productsTableAdapter As ProductsTableAdapter = New ProductsTableAdapter()
//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();
Aşağıdaki kod bloğunu ekleyin CustomerRibbon sınıf.Bu kod Şerit'in çalışma zamanında denetim oluşturması için üç tane yardımcı yöntem ekler.
Private Function CreateRibbonDropDownItem() As RibbonDropDownItem Return Me.Factory.CreateRibbonDropDownItem() End Function Private Function CreateRibbonMenu() As RibbonMenu Return Me.Factory.CreateRibbonMenu() End Function Private Function CreateRibbonButton() As RibbonButton Dim button As RibbonButton = Me.Factory.CreateRibbonButton() AddHandler (button.Click), AddressOf Button_Click Return button End Function
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; }
CustomerRibbon_Load olay işleyicisi yöntemini aşağıdaki kod ile değiştirin.Bu kod aşağıdaki görevleri gerçekleştirmek için LINQ sorgusu kullanır:
Müşteriler birleşik giriş kutusunu Northwind veri tabanındaki 20 müşterinin isim ve kimlik numarasını kullanarak doldurun.
PopulateSalesOrderInfo yardımcı yöntemini çağırır.Bu yöntem mevcut seçilmiş müşteriye ait olan sipariş satış numalarının olduğu AlınanÜrünler menüsünü günceller.
Private Sub CustomerRibbon_Load(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonUIEventArgs) _ Handles MyBase.Load customerTable = nwDataSet.Customers customersTableAdapter.Fill(customerTable) Dim customerQuery = From customers In customerTable.AsEnumerable.Take(20) _ Select CustomerID = customers.Customer_ID, _ CustomerName = customers.Contact_Name ' Execute the query. For Each item In customerQuery Me.ComboBox1.Items.Add(CreateRibbonDropDownItem()) Me.ComboBox1.Items.Last().Label = item.CustomerID.ToString() _ + "|" + item.CustomerName Next item Me.ComboBox1.Text = Me.ComboBox1.Items.First().Label PopulateSalesOrderInfo() End Sub
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(); }
Aşağıdaki kodu CustomerRibbon sınıfına ekleyin.Bu kod aşağıdaki görevleri gerçekleştirmek için LINQ sorgularını kullanır:
Şeçili müşteriyle ilgili her satış siparişi için AlınanÜrünler menüsüne basamaklı bir menü ekler.
İlgili satış sipariş ürünleri için her basamaklı menüye düğmeler ekler.
Her düğmeye olay işleyicisi ekler.
Private Sub PopulateSalesOrderInfo() Dim tempArray As [String]() = comboBox1.Text.Split(New [Char]() {"|"c}) Menu1.Items.Clear() orderTable = nwDataSet.Orders orderDetailsTable = nwDataSet.Order_Details productsTable = nwDataSet.Products ordersTableAdapter.Fill(orderTable) detailsTableAdapter.Fill(orderDetailsTable) productsTableAdapter.Fill(productsTable) Dim orderQuery = From order In orderTable.AsEnumerable() _ Where order.Customer_ID.ToString() = tempArray(0) _ Select New With {.SalesOrderID = order.Order_ID} For Each orderItem In orderQuery Me.Menu1.Items.Add(CreateRibbonMenu()) Dim orderMenu As RibbonMenu = CType(Menu1.Items.Last(), RibbonMenu) orderMenu.Dynamic = True orderMenu.Label = orderItem.SalesOrderID.ToString() orderMenu.Tag = orderItem.SalesOrderID Dim productQuery = From orderDetail In orderDetailsTable.AsEnumerable(), _ product In productsTable.AsEnumerable() _ Where orderDetail.Product_ID = _ product.Product_ID _ And orderDetail.Order_ID = _ orderMenu.Tag _ Select productName = product.Product_Name For Each productItem In productQuery Dim button As RibbonButton = CreateRibbonButton() button.Label = productItem orderMenu.Items.Add(button) Next productItem Next orderItem End Sub
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); } } }
Çözüm Gezgini'nde Şerit kod dosyasına çift tıklayın.
Şerit Tasarımcı'sı açılır.
Şerit Tasarımcı'sında Müşteriler birleşik giriş kutusuna çift tıklayın.
Şerit kod dosyası Kod Düzenleyici'sinde açılır ve ComboBox1_TextChanged olay işleyicisi gözükür.
ComboBox1_TextChanged olay işleyicisini aşağıdaki kod ile değiştirin.Bu kod aşağıdaki görevleri gerçekleştirir:
PopulateSalesOrderInfo yardımcı yöntemini çağırır.Bu yöntem mevcut seçilmiş müşteriyle ilgili sipariş satış numalarının olduğu AlınanÜrünler menüsünü günceller.
PopulateMailItem yardımcı yöntemini çağırır ve müşteri isminin seçildiği mevcut metne geçirir.Bu yöntem yeni posta iletisinin To, Subject ve Body alanlarını doldurur.
Private Sub ComboBox1_TextChanged(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles ComboBox1.TextChanged PopulateSalesOrderInfo() PopulateMailItem(ComboBox1.Text) End Sub
private void comboBox1_TextChanged(object sender, RibbonControlEventArgs e) { PopulateSalesOrderInfo(); PopulateMailItem(comboBox1.Text); }
Aşağıdaki Click olay işleyicisini CustomerRibbon sınıfına ekleyin:Bu kod, seçilmiş ürünlerin adını yeni posta iletisinin Body alanına ekler.
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Dim application As Outlook.Application = Globals.ThisAddIn.Application Dim inspector As Outlook.Inspector = application.ActiveInspector() Dim myMailItem As Outlook.MailItem = CType(inspector.CurrentItem, _ Outlook.MailItem) Dim myButton As RibbonButton = CType(sender, RibbonButton) myMailItem.Subject = "Following up on your order" myMailItem.Body = myMailItem.Body + ControlChars.Lf + "* " _ + myButton.Label End Sub
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; }
Aşağıdaki kodu CustomerRibbon sınıfına ekleyin.Bu kod aşağıdaki görevleri gerçekleştirir:
Yeni posta iletisinin To satırını o anki seçilmiş müşterinin e-posta adresini kullanarak doldurur.
Metni yeni posta iletisinin Subject ve Body alanlarına ekler.
Private Sub PopulateMailItem(ByVal addressToLine As String) Dim application As Outlook.Application = Globals.ThisAddIn.Application Dim inspector As Outlook.Inspector = application.ActiveInspector() Dim myMailItem As Outlook.MailItem = _ CType(inspector.CurrentItem, Outlook.MailItem) myMailItem.To = "" Dim tempArray As [String]() = addressToLine.Split(New [Char]() {"|"c}) myMailItem.To = tempArray(1) + "@example.com" myMailItem.Subject = "Following up on your order" myMailItem.Body = "Hello " + tempArray(1) + "," _ + ControlChars.Lf + "We would like to get your feedback" + _ "on the following products that you recently ordered: " End Sub
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: "; }
Özel Grup Denetimlerini Test Etme
Outlook'ta yeni bir ileti formu açtığınızda Müşteri Harcamaları olarak adlandırılmış özel grup Şerit'in Messages sekmesinde belirir.
Müşteri takip e-posta iletisi oluşturmak için bir müşteri seçin ve sonra bu müşteri tarafından alınan ürünleri seçin.Müşteri Harcamaları grup denetimleri Northwind veri tabanından gelen veriler ile çalışma anında güncellenir.
Özel grup denetimlerini test etmek için
F5 tuşuna basarak projeyi çalıştırın.
Outlook başlatılır.
Outlook Dosya menüsünde Yeni'nin üzerine gelin ve Posta İletisi'ni tıklayın.
Aşağıdaki eylemler gerçekleşir:
Yeni bir posta iletisi Inspector penceresi belirir.
Şerit Message sekmesinde, Müşteri Harcamaları grubu Pano grubundan önce belirir.
Gruptaki Müşteriler birleşik giriş kutusu, Northwind veri tabanındaki müşterilerin isimleriyle güncellenir.
Şerit Message sekmesinde, Müşteri Harcamaları grubu Müşteriler birleşik giriş kutusundan bir müşteri seçin.
Aşağıdaki eylemler gerçekleşir:
Seçili müşterinin her satış siparişini göstermek için Alınan Ürünler menüsü güncellenir.
Her satış siparişi alt menüsü ürünlerin alış sırasını göstermek için güncellenir.
Seçilen müşterinin e-posta adresi, posta iletisinin To satırına eklenir ve posta iletisinin konu ve gövde kısımları metin ile doldurulur.
Alınan Ürünler menüsüne tıklayın, herhangi bir satış siparişini işaret edin ve bu satış siparişinden bir ürüne tıklayın.
Ürün adı posta iletisinin gövdesine eklenir.
Sonraki Adımlar
Aşağıdaki konulardan Office KA'nü nasıl özelleştireceğiniz hakkında daha fazla bilgi alabilirsiniz:
Bağlam tabanlı KA'nü herhangi bir belge düzeyi özelleştirmesine ekleyin. Daha fazla bilgi için bkz. Eylemler Bölmesine Genel Bakış.
Standart veya özel Microsoft Office Outlook formu genişletin.Daha fazla bilgi için bkz. İzlenecek Yol: Outlook Form Bölgesi Tasarlama.
Outlook'a özel görev bölmesi ekleyin.Daha fazla bilgi için bkz. Özel Görev Bölmeleri.
Ayrıca bkz.
Görevler
Nasıl Yapılır: Şerit Özelleştirmeye Başlama
İzlenecek Yol: Şerit Tasarımcısını Kullanarak Özel Sekme Oluşturma
Nasıl Yapılır: Şeritteki Sekmenin Konumunu Değiştirme
Nasıl Yapılır: Yerleşik Bir Sekmeyi Özelleştirme
Nasıl Yapılır: Backstage Görünümüne Denetimler Ekleme
Nasıl Yapılır: Şerit Tasarımcısından Şerit XML'ine Dışarıya Şerit Aktarma
Nasıl Yapılır: Eklenti Kullanıcı Arayüzü Hatalarını Gösterme
Kavramlar
Çalışma Zamanında Şerite Erişme
Şerit Nesne Modeline Genel Bakış
Outlook İçin Şerit Özelleştirme