As part of the Microsoft Office 2000 Resource Kit, Microsoft released four new free tools for Outlook administrators:
- The Outlook 2000 Modify Profile Utility is a replacement for newprof.exe that lets you create new profiles and modify existing MAPI profiles automatically to add new services.
- The Outlook TCO Migration Utility lets you lock down workstations but still let users access certain Outlook files.
- The Outlook 2000 Forms Administrator lets you substitute your custom forms for Outlook's default forms by handling the necessary Windows Registry changes.
- The Outlook 2000 Existing Items Converter converts items in a folder to use a different custom form.
To download these tools or to get more information about them, see http://www.microsoft.com/office/ork/2000/journ/outtoolsintro.htm.
Why do my users sometimes get the message The form required to view this message cannot be displayed when they open a custom form?
Before I talk about the error messages, let's review how the forms cache works. When you open an item that requires a custom form, Outlook stores a copy of the form on your local hard disk. The next time you need to use the form, Outlook checks the forms cache. If the form is in the cache, Outlook goes to the form's original location to check the form's Modified timestamp. If a user has modified the form since Outlook cached it, Outlook opens the form from its original location and updates the cache with the modified version. If no one has modified the form since Outlook cached it, Outlook loads the form from the cache, which is usually much faster than opening it from the original location.
If the required form isn't in the cache, Outlook looks in other locations, in this order:
- Current folder's forms library
- Personal Forms library
- Organization Forms library
- Web Forms library (if you've enabled it by clicking Web Services, which you see in Screen 1)
The messages The form required to view this message cannot be displayed and Can't create item usually signal corruption related to a custom form—either in the form itself or in the data file on the client that stores forms cache information. Outlook uses the frmcache.dat file to maintain a summary of cached forms and pointers to the cached files. You can set the size of this file in the Custom Forms dialog box that you see in Screen 1. The maximum size is 2048KB.
The frmcache.dat file resides in the Forms folder. In Outlook 97 and Outlook 98, the forms cache folder is the \Windows\Forms folder. In Outlook 2000 without Windows user profiles, the forms cache folder is in C:\Windows\Local Settings\Application Data\Microsoft\Forms, as Screen 2 shows. In Outlook 2000 with user profiles, look in C:\Windows\Profiles\%username%\LocalSettings\Application Data\Microsoft\Forms.
To clear the forms cache, exit Outlook, and delete the frmcache.dat file. When you restart Outlook, it will create a new frmcache.dat file with information about the cached forms. If that technique doesn't resolve the problem, try deleting not just the frmcache.dat file but also the folders for the individual forms. (However, Microsoft warns not to delete the \Forms\Configs folder that appears on Outlook 97 and 98 installations.) In Outlook 98, you'll also need to run Outlook setup and, through the Add New Components function, reinstall support for the Corporate/Workgroup mail component. For more information about the forms cache, see the Microsoft article "OL2000: How the Forms Cache Works" (http://support.microsoft.com/ support/kb/articles/q232/3/03.asp).
By the way, the forms' retrieval order explains a common problem with forms. Suppose a user publishes a new form in the Personal Forms library. Later, the user makes changes to the form and saves the revised form under the same name but in a different library—Organization Forms. When the user opens an item that uses the custom form for the first time, Outlook loads the version in the Personal Forms Library because Outlook checks that location first, but that version won't include the revisions on the version the user saved in the Organization Forms Library.
The stumbling block is the copy in the Personal Forms library. The solution is to delete that copy by using the Manage Forms dialog (Tools, Options, Other, Advanced Options, Custom Forms to get to the Custom Forms dialog in Screen 1, then click Manage Forms). After you delete that copy, the Organization Forms copy usually loads fine. If it doesn't, make sure that you're incrementing the version number on the form's (Properties) page. You can also try using the form to create a new item. When opening a previously created item doesn't load the updated form into the cache, creating a new item sometimes does the job.
I want to modify outgoing messages in Outlook 2000 only if they're going to external Exchange Server recipients. How can I tell what kind of recipients are in the To and Cc fields?
Outlook 2000 includes an Application.ItemSend event that facilitates going beyond the Rules Wizard in managing outgoing items. For example, I have a small routine that reminds me to add a file attachment if I send a message that contains the words Attached is but doesn't include an attached file.
The Application.ItemSend event is part of Outlook's object model. If this territory is new for you, I highly recommend that you work through "The Super-Easy Guide to the Microsoft Outlook Object Model," a great online tutorial at http://www.microsoft.com/office/ enterprise/prodinfo/supreasy.htm.
Each MailItem object representing a message includes a Recipients collection. Within the Recipients collection are individual Recipient objects, and each Recipient object has an AddressEntry property that is itself an object. The AddressEntry object contains all the recipient's juicy details, including the email address and type of address.
Listing 1 illustrates how to use these objects. Place the code for the Application_ItemSend event handler in the built-in ThisOutlookSession module in Outlook 2000's Visual Basic for Applications (VBA) window. The blnIsOnlySMTP flag will be True if all the recipients are SMTP and False if any recipient is anything other than SMTP.
The For Each objRecip ... Next loop tests each message recipient in turn, checking the Type property found in the recipient's AddressEntry. If the Type is anything other than SMTP, the routine sets blnIsOnlySMTP to False and exits the For loop. The Exit statement means that the procedure needs to find only one non-SMTP recipient; it doesn't need to test every recipient. Finally, the If blnIsOnlySMTP ... End If statement gives you a place to add whatever statements you want to use with your SMTP-only messages.
Note that if you have any recipients from the Global Address List (GAL) who are custom recipients with SMTP addresses, this code won't detect them because Outlook uses the internal Exchange Server address to send to them. One way to distinguish such recipients from the Internet recipients in your Contacts folder is with the AddressEntry's DisplayType property. The DisplayType is 6 for custom recipients in the GAL and 0 for Contacts entries.
How can I allow only certain people to assign tasks?
You can create a custom Outlook task form on which you use code to disable the Assign Task menu command and toolbar button. In the code, you use the CommandBars object to customize the command bars. To find out how to write this code, see the Microsoft article "OL97: How to Use Command Bars in Outlook Solutions" (http://support.microsoft.com/support/kb/articles/q173/6/04.asp). In Outlook 2000, you can substitute the custom form for the usual form with the Outlook 2000 Forms Administrator, which I mentioned in the first question.
Another technique is to use the ItemSend event in the ThisOutlookSession module of the Outlook 2000 VBA window to cancel the sending of any task request. Enter the code you see in Listing 2. In both techniques, you need a relatively locked-down installation of Outlook to prevent users from reversing those changes.
However, I think using technological solutions for what are really people problems is wrong. If someone isn't supposed to assign tasks, tell him or her so. If necessary, also tell the people who might receive those task requests to simply delete them. A task isn't completely assigned until the user accepts it. The person making task assignments improperly will get the message quickly if no one ever accepts any of those assignments.
Can I structure the display of my contacts in the Address Book dialog box by category?
No. As I've written in this column several times, you can't customize the display of information in the Address Book dialog box other than to change whether Outlook shows entries from Outlook Contacts folders in last name or first name order. You can't filter. You can't rearrange columns. You can't perform complex sorts. However, as an administrator, you can create Address Book Views (ABVs) that group GAL recipients in a particular way. (For information about creating ABVs, see Mark Ott, "Using Address Book Views in Exchange Server," January 1999.) If you want complex views of your Contacts, use the Contacts folder rather than the Address Book.