The release of Outlook 2000 included an add-on product named the Outlook View control. The Outlook View control is an ActiveX wrapper around the Outlook views, such as the Table, Calendar, Card, and Timeline views. You can use this ActiveX control either inside a Web application, such as an Active Server Pages (ASP) application, or inside your folder home page. This control prevents you from having to rewrite significant portions of code to mimic Outlook functionality. Figure 10-3 shows the second folder home page example (FullContacts.htm) hosting the View control.
Figure 10-3. A folder home page (FullContacts.htm) hosting the Outlook View control.
The environment you place the View control in determines the control's functionality. For example, when you place the View control in a folder home page, the control provides full access to the Outlook object model as well as automatic merging of menu commands with the Outlook container, as shown in Figure 10-4. In contrast, in a stand-alone Web page scenario, the control does not allow access to any user data nor does it give you the entire Outlook object model. This restriction prevents the control from downloading all the Outlook data when a user accesses the Web page. In either scenario, the View control does require Outlook to be installed on the machine. The control does not install Outlook for you.
Figure 10-4. When hosted in a folder home page, the View control automatically merges menu commands with its Outlook container. Notice that the custom actions appear in the Actions menu for an Account Tracking form selected in the control.
The View control allows you to programmatically change control properties so that you can place more than one control on a single page in your application. For example, you might want to show a side-by-side view of two calendars, or maybe a contacts list and all tasks associated with the currently selected contact. When multiple View controls are on a single page, merging their menus is based on the control with the focus.
Using a machine that has Outlook 2000 with the Visual Basic Scripting Support and Collaboration Data Objects components installed, follow the next set of steps to set up the second folder home page, which uses the Outlook View control:
NOTE
The Outlook View control shipped after Outlook 2000. Microsoft made the control available for downloading from the Outlook and Microsoft Exchange Server Web sites. The control is also available on the companion CD. To use it, install the Team Folders Wizard.
The following section outlines how to add the View control to a web page and how to program it.
Adding a View control to your folder home page or web page is actually quite easy. All you need to do is add the <OBJECT> tag to your page and give the control an ID that you will use in your program. For the Account Tracking folder home page, this Object tag was inserted into the HTML page:
<OBJECT ID="oViewControl" WIDTH=100% HEIGHT=84% style="border-bottom:1px silver solid" CLASSID="CLSID:0006F063-0000-0000-C000-000000000046"> <param NAME="Namespace" VALUE="MAPI"> <param NAME="Folder" VALUE=""> <param NAME="View" VALUE="Accounts"> </OBJECT> |
This tag creates the View control object. Also notice the Param tags—you can use these tags to pass parameters to the control. In this example, I pass in MAPI for the Namespace parameter. I also pass in the folder. I pass a blank value for the folder so that the control defaults to the default folder the user is currently looking at. Finally, I pass in, as a string, the default view I want in the control. The Accounts view is the default view for the Account Tracking folder.
After you insert the control, you can add code in the folder home page to grab the Outlook Application object, Window.External.OutlookApplication, using the technique we saw earlier. Because I know this script must be running in the Account Tracking folder (as this is the folder home page for that folder), I set a variable to the current folder so that I can use that variable later in the script.
After the folder variable is set, my code needs to accomplish one more task. Recall that the View control is going to bring up the default folder that the user is viewing. This folder, however, might not be the Account Tracking folder. To ensure that the control displays the Account Tracking folder, the code finds the full path to the Account Tracking folder and passes this path as one of the control's properties, Folder. For example, if the Account Tracking folder were a top-level folder in the Favorites folders, the path would be \\Public Folders\Favorites\Account Tracking\. The code then fills in the total number of accounts, contacts, and tasks in the folder. The code for this process is shown below.
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript> '****************************************************** 'In-line code ' 'These lines of code are run when the browser reaches 'them while parsing the document. They set up the global 'variables that are needed throughout the application. '****************************************************** Set oApplication = window.external.OutlookApplication Set oNS = oApplication.GetNamespace("MAPI") Set oCurrentFolder = oApplication.activeExplorer.currentfolder Set oAccountFolder = oCurrentFolder 'AvailWidth = document.body.clientWidth '****************************************************** 'Function StrFullPath ' 'This function creates and returns the full path to the 'folder '****************************************************** function StrFullPath() If oCurrentFolder Is Nothing Then strFolderName = "" End If Set olCollabFolder = oCurrentFolder strFolderName = "" Set olRoot = oCurrentFolder While (olRoot <> "Mapi") strFolderName = oCurrentFolder.Name & "\" & strFolderName Set olRoot = oCurrentFolder.Parent If olRoot <> "Mapi" Then Set oCurrentFolder = oCurrentFolder.Parent End If Wend strFullPath = "\\" & strFolderName end function '****************************************************** 'Sub FillTotals() ' 'This subroutine gets the count for the different types 'of items in a folder, such as accounts, contacts, and 'tasks. It also fills in the HTML page with this 'information. '****************************************************** Sub FillTotals() RestrictString = "" RestrictString = "[Message Class] = ""IPM.Post.Account info""" Set oAccounts = oAccountFolder.Items.Restrict(RestrictString) oAcctCount = oAccounts.Count AccountTotal.innerHTML = "<STRONG>" & oAcctCount & "</STRONG>" RestrictString = "" RestrictString = _ "[Message Class] = ""IPM.Contact.Account contact""" Set oContacts = oAccountFolder.Items.Restrict(RestrictString) oContactCount = oContacts.Count ContactTotal.innerHTML = "<STRONG>" & oContactCount & "</STRONG>" RestrictString = "" RestrictString = "[Message Class] = ""IPM.Task""" Set oTasks = oAccountFolder.Items.Restrict(RestrictString) oTasksCount = oTasks.Count TaskTotal.innerHTML = "<STRONG>" & oTasksCount & "</STRONG>" End Sub Fullpath = StrFullPath() oViewControl.Folder = FullPath '****************************************************** 'Sub Window_onLoad() ' 'This subroutine is called when the HTML page is loaded '****************************************************** Sub Window_onLoad() oViewControl.Folder = Fullpath 'oViewControl.width = AvailWidth txtFolder.innerHTml = oAccountFolder.Name FillTotals() End Sub |
Now that some of the information for the HTML page is filled in, we need to add some buttons to the page to allow the user to call our subroutines, which automate the View control. I've left out the HTML code that actually creates the buttons (you can look at this code in the FullContacts.htm file on the companion CD), but we will take a look at the automation code that drives the View control from these buttons.
There are actually six buttons and a drop-down list from which the user can change the View control. The drop-down list enables the user to change the view of the control to one of the other views in the Outlook folder. Figure 10-5 shows another view of the Account Tracking folder home page.
Figure 10-5. The folder home page for the Account Tracking application, which contains the Outlook View control. This time the view is showing account contacts.
The View control has no methods to create new views, so the views must already exist in the folder. To change the view by using code, set the View property on the control as the name of the desired new view. Since a fully functional Outlook application is running in the control, users can right-click on view columns to bring up the Field Chooser or customize the view directly in the page. The following code implements changing the views of the control:
'****************************************************** 'Sub WhatView_onChange ' 'This subroutine changes the view of the Outlook control 'depending on what the user picked in the drop-down list '****************************************************** Sub WhatView_onChange oViewControl.view = WhatView.value window.focus end sub |
Implementing the functionality for the buttons is actually pretty straightforward as well. From the buttons, the user can create new accounts, expand groups, collapse groups, add a folder to a favorites list, find an item in a folder, and view the address book. Most of these actions are already contained in the View control as methods. For example, to view the address book, all the code has to do is call the AddressBook method on the View control. Same thing for adding the folder to the favorites—all the code has to do is call the AddtoFavorites method on the View control. Here's the code for the buttons:
'****************************************************** 'Sub CreateAccount ' 'This subroutine creates a new account info form and 'displays it for the user to fill in '****************************************************** Sub CreateAccount() set oAccount = oAccountFolder.Items.Add("IPM.Post.Account info") oAccount.Display() End Sub '****************************************************** 'Sub Actions_onClick(Action) ' 'This subroutine executes the correct action depending 'on what the user picked in the Web page, such as 'finding an item, creating a new account, and so on. '****************************************************** Sub Actions_onClick(Action) Select Case Action case "AddressBook" oViewControl.AddressBook() case "AddtoFavorites" oViewControl.AddtoFavorites() case "ExpandAllGroups" oViewControl.ExpandAllGroups() case "CollapseAllGroups" oViewControl.CollapseAllGroups() case "AdvancedFind" set oExplorer = oApplication.ActiveExplorer set oCommandBar = _ oExplorer.CommandBars.Item("Menu Bar") set oMenu = oCommandBar.Controls("Tools") set oAF = oMenu.Controls("Advanced Find…") oAF.Execute case "CreateAccount" CreateAccount() End Select End Sub |
You can also take advantage of other methods and properties in your applications that use the Outlook View control. To see a complete list of them, just add a reference to the Outlook View control either in the VBA that ships with Outlook 2000 or in Microsoft Visual Basic, and use the object browser. Most of the methods and properties are self-explanatory, such as the ReplyInFolder and ReplyAll methods. Below are a few of the more interesting properties and methods for the View control that we haven't discussed yet and that you can use in your code.
<param NAME=Restrict VALUE="[Message Class] = 'IPM.Task'"> |
By using the Restriction property, you can place two View controls on a single page and have one view control show a restricted set of items based on what the users pick in the other View control.