Changing Display Formats Programmatically for All Contacts in Outlook 2007
This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
Summary: Create an add-in to change the FileAs property programmatically for all contacts in Microsoft Office Outlook 2007.
Applies to: 2007 Microsoft Office System, Microsoft Office Outlook 2007, Microsoft Visual Studio 2005, Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Second Edition
Ken Getz, MCW Technologies, LLC
September 2007
Code It | Read It | Explore It
Code It
You can standardize your contacts so that if a contact item contains a LastName value, you file it using LastName, FirstName format; and if the contact is a business without a LastName property, you file it using the CompanyName field.
![]() |
---|
This example potentially modifies all the contacts in a specified Contacts folder. Make sure you either create a separate Contacts folder for testing or back up the Contacts folder before running the code in this article. Otherwise, you might modify a setting that you did not intend to change. |
In this example, you create a Microsoft Office Fluent Ribbon customization that adds a button that is available when you view a contact. You click the button to modify the FileAs behavior of each contact.
To create a new FileAs button on the Ribbon
In Visual Studio 2005 Tools for Office Second Edition, create an add-in for Outlook 2007. Name the new project ModifyFileAsAddin.
In the Solution Explorer window, right-click the project, select Add from the context menu, and then click New Item.
In the Add New Item dialog box, select Ribbon support. Click Add to insert the new Ribbon customization.
Modify the new Ribbon1.xml file by replacing the existing content with the following code.
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad"> <ribbon> <tabs> <tab idMso="TabAddIns"> <group id="MyGroup" label="File As"> <button id="button1" label="Modify File As" screentip="Modify FileAs Behavior" onAction="OnClick" /> </group> </tab> </tabs> </ribbon> </customUI>
In the Solution Explorer window, right-click the ModifyFileAsAddin project, and select Properties from the context menu.
In the Properties pane, select the Resources tab.
From the Solution Explorer window, drag the Ribbon1.xml file into the Properties pane.
This action adds the Ribbon1.xml file as a project resource.
Close the Properties pane, and click Yes when prompted to save.
In the Ribbon1.vb or Ribbon1.cs file, uncomment the ThisAddIn partial class.
In Microsoft Visual C# only, at the top of the code file, add the following using statement.
using Outlook=Microsoft.Office.Interop.Outlook;
In the Ribbon1 class, modify the existing GetCustomUI implementation so that it retrieves the Ribbon1 resource, and only returns the resource if the current ribbonID value is Microsoft.Outlook.Contact.
In C#, you must expand the IRibbonExtensibility members code region to find the procedure.
Public Function GetCustomUI(ByVal ribbonID As String) As String _ Implements Office.IRibbonExtensibility.GetCustomUI If ribbonID = "Microsoft.Outlook.Contact" Then Return My.Resources.Ribbon1 Else Return String.Empty End If End Function
public string GetCustomUI(string ribbonID) { if (ribbonID == "Microsoft.Outlook.Contact") { return Properties.Resources.Ribbon1; } else { return String.Empty; } }
In the Ribbon1 class, add the following declaration to make it simpler to refer to the Outlook Application object.
Private Application As Outlook.Application = _ Globals.ThisAddIn.Application
private Outlook.Application Application = Globals.ThisAddIn.Application;
In the Ribbon1 class, add the following callback procedure. Click the new button on the Ribbon to call this procedure.
Public Sub OnClick(ByVal control As Office.IRibbonControl) End Sub
public void OnClick(Office.IRibbonControl control) { }
Save the project, and run it.
In Outlook 2007, create a new contact. On the Ribbon, click the Add-Ins tab, and verify that you see the new button on the Ribbon. Close Outlook when you finish, returning to Microsoft Visual Studio 2005.
Start Outlook 2007, and select your Contacts folder.
Select File, select Folder, and then select New Folder. In the Create New Folder dialog box, create a new folder for Contact Items named ContactsBackup.
From your existing Contacts folder, copy some contacts into the ContactsBackup folder.
Close Outlook 2007 when you finish.
In the Ribbon1 class, add the following procedure.
Private Sub RefileContacts(folder As Outlook.Folder) Dim items As Outlook.Items = folder.Items If items.Count > 0 Then Dim contactItems As Outlook.Items = _ items.Restrict("[MessageClass]='IPM.Contact'") For Each item As Outlook.ContactItem In contactItems If item.LastName <> String.Empty Then item.FileAs = _ String.Format("{0}, {1}", _ item.LastName, item.FirstName) ElseIf Not String.IsNullOrEmpty(item.CompanyName) Then item.FileAs = item.CompanyName End If item.Save() Next End If MessageBox.Show("Your contacts have been re-filed.") End Sub
private void RefileContacts(Outlook.Folder folder) { Outlook.Items items = folder.Items; if (items.Count > 0) { Outlook.Items contactItems = items.Restrict("[MessageClass]='IPM.Contact'"); foreach (Outlook.ContactItem itemContact in contactItems) { if (itemContact.LastName != String.Empty) { itemContact.FileAs = String.Format("{0}, {1}", itemContact.LastName, itemContact.FirstName); } else if (itemContact.CompanyName != String.Empty) { itemContact.FileAs = itemContact.CompanyName; } itemContact.Save(); } MessageBox.Show("Your contacts have been re-filed."); } }
This procedure retrieves a reference to the items in the specified folder. If there are items in the folder (if the count is greater than 0), the code retrieves a restricted subset of items that includes only Contact items. (A Contacts folder can contain other items besides Contact items.) The code then loops through each item, and for each Contact, sets the FileAs property appropriately. Finally, the code calls the Save method of the Contact item, and stores it back in the Outlook data store.
To modify the existing OnClick procedure
Modify the existing OnClick procedure, so that it retrieves a reference to a Contacts folder (in this case, the ContactsBackup folder you created earlier), calls the RefileContacts method, and passes the reference to the appropriate Contacts folder.
Public Sub OnClick(ByVal control As Office.IRibbonControl) Dim folder As Outlook.Folder = _ TryCast(Application.Session.GetDefaultFolder( _ Outlook.OlDefaultFolders.olFolderContacts), Outlook.Folder) If folder IsNot Nothing Then folder = TryCast(folder.Folders("ContactsBackup"), _ Outlook.Folder) If folder IsNot Nothing Then RefileContacts(folder) End If End If End Sub
public void OnClick(Office.IRibbonControl control) { Outlook.Folder folder = Application.Session. GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder; if (folder != null) { folder = folder.Folders["ContactsBackup"] as Outlook.Folder; if (folder != null) { RefileContacts(folder); } } }
Save your project, and press F5 to run it.
To edit an existing contact (or create a new contact), on the Ribbon, click Add-Ins, and click the new button.
If you built the add-in correctly, you see the alert that indicates you refiled your contacts. Verify that the FileAs property is set appropriately for all contacts in the folder.
Read It
The Outlook 2007 object model provides several ways in which you can find a particular folder. To look for the default folder of any particular type, such as Inbox or Contacts, you can use the Application.Session.GetDefaultFolder method, passing in one of the OlDefaultFolders enumerated values. To look for a subfolder, you can retrieve a reference to the top-level folder, and use its Folders property to retrieve a specific subfolder. If you know the EntryID or the StoreID value for a specific folder, you can call the Application.Session.GetFolderFromID method.
Outlook provides several techniques for restricting the items within a folder. If your folder contains only a few items, the Items.Find method, passing in a filter string, provides the most efficient way to find a specific item. You can combine the Find method with the Items.FindNext method to search through all the matches for a particular filter. If, on the other hand, your folder contains a large number of items, the Restrict method provides a more efficient means of filtering a set of items. You can filter the items in a folder based on the message type, or you can filter based on specific value or values in one or more fields.