Article ID: 201438 - View products that this article applies to.
This article was previously published under Q201438
For a Microsoft Outlook 2002 version of this article, see 290656
For a Microsoft Outlook 98 version of this article, see 185050
For a Microsoft Outlook 97 version of this article, see 183352
This article discusses considerations solution developers should take into account when planning, implementing, and deploying a solution using Outlook custom forms and user-defined fields. Unlike most other database-related software, Outlook can store different sets of user-defined fields in different items in a folder. While this means that items in a folder are very flexible "containers" for storing data, it also means that developers need to be aware of how this flexibility may impact an Outlook-based solution.
This article contains the following topics:
Overview of Outlook Standard and User-Defined Fields
Adding User-Defined Fields
Deleting User-Defined Fields
Determining Where Fields Exist
What Can Go Wrong?
Overview of Outlook Standard and User-Defined FieldsIn a database program such as Microsoft Access, fields are defined at the "table level," meaning that once you add a field to a table of data, the field will exist in all records in the table. Outlook items are like records in a database, and Outlook folders are conceptually equivalent to a table or flat-file database. This database analogy breaks down when you consider how Outlook and Microsoft Exchange implement the concept of fields, or properties.
In Exchange, items in a folder can have any set of fields. It is up to the application to determine the "field schema" for items in a folder. Outlook has separate field schemas for each of the different predefined items such as Contacts, Appointments, Tasks, and such. Each of these items has a set of standard fields specific to that type of item. Note that some fields exist in more than one type of item, such as the Start field in Appointments and Journal entries, and some fields exist in all items, like Mileage and Billing Information.
In addition to the standard fields that Outlook makes available for each type of item, Outlook allows you to create user-defined, or custom fields to store additional information with an item. While these user-defined fields serve the same purpose as the standard fields, you typically use them in a different manner. The most important difference between standard fields and user-defined fields is that standard fields are always available when working with a particular type of item, but this is not necessarily true when working with user-defined fields. User-defined fields can exist in:
This article will discuss Outlook behavior in various circumstances to assist you in understanding where fields exist, how Outlook creates them on-the-fly, and how you can determine where the fields actually are so you can determine how user-defined fields may be impacting your solution.
Adding User-Defined FieldsWhen you use the Field Chooser to create a field, either while in a view or while in design mode of a form, the field will be added to the folder. If you are in form design mode and then drag the field onto the form, the field will be added to the item and Outlook will automatically create a control and bind the field to the control.
If you are in form design mode and right-click a control to access its properties, you can create a new user-defined field by clicking the New button on the Value tab of the Properties dialog box. Creating a field in this manner will result in the new field being added to both the item and the folder.
Fields can also be introduced into a folder solution by copying or moving an item from another folder into the solution folder. Fields can also be introduced if you programmatically create fields on-the-fly or as part of a solution to import items into a folder.
It is important to keep in mind that there are scenarios that can cause user-defined fields to not exist in one or more of the three locations, and this can adversely affect a solution.
The following table summarizes Outlook behavior when creating new user-defined fields.
Action Field added to ------ -------------- Using New button on Field Chooser in a view Folder New button on Field Chooser in form design mode Folder Dragging field from Field Chooser to form Item Using New button in the Properties dialog box Item and folder of a control when binding the control to a field
Deleting User-Defined FieldsUse the following table to determine how to delete a field that exists in the following locations:
To delete field from Do this ---------- ------- Folder Use the Field Chooser and set the list to show "User-defined fields in <folder name>." Item Use the All Fields tab of the item. Form Create a new item based on the existing custom form, delete the field using the All Fields tab of the form, and republish the form.
Determining Where Fields ExistUse the following table to determine where a field exists:
To verify fields are in Do this ------------- ------- Folder Use the Field Chooser and set the list to show "User-defined fields in <folder name>" Item Use the All Fields tab of the item and set the list to show "User-defined fields in this item." Note that you may want to temporarily display this page of the form while you are developing the solution. Form Create a new item based on the existing custom form and then check the All Fields page of the form as above.
What Can Go Wrong?Here are some of the symptoms you may see when user-defined fields are not consistent in a folder-based solution.
Avoid Creating Items Until the Solution is Fully Finished.Ideally, you should create a custom form that contains all of the user-defined fields that you need for the solution. When that is done, you can publish the form to the folder and all items that are created in the folder will be based on the custom form and therefore inherit the user-defined fields. This scenario ensures that each user-defined field exists in all locations and therefore the solution has consistency.
If you create items for testing your solution as you develop it, you should delete these items and create new ones if you add user-defined fields into the form.
If you must add fields into a folder solution after you created the items, consider making sure all of the items get the new fields added to them. You can do this either programmatically (Item.UserProperties.Add), or by displaying the items in a table view, adding the user-defined field to the view, temporarily adding a value into the field so that Outlook adds the field into the item on-the-fly, and then deleting the temporary values.
Importing ItemsIf you will be importing data into a folder as items, you cannot create the user-defined fields in the items using the Outlook Import/Export utility. If you use the utility to import the items, consider creating a procedure that will programmatically add all of the user-defined fields in the item. Consider creating a procedure that will programmatically create and import all of the items.
For additional information about programmatically importing items, please see the following article in the Microsoft Knowledge Base:
(http://support.microsoft.com/kb/208232/EN-US/ )How to programmatically import Outlook items from Microsoft Access
Fields Added to an Item Only If They Have a ValueBe aware that under various circumstances you can see different behavior depending on whether or not a field contains a value. For example, if you open a new contact item and create a new user-defined field on the All Fields page of the form, the field will be added to the folder, but will not be listed under "User-defined fields in this item" until you enter a value into the field. In other words, in scenarios where the fields exist in a folder but not an item, Outlook will automatically add the field to an item if the field is given a value. This can also commonly happen when entering data into a table view using the "in-cell editing" feature.
Copying or Moving ItemsIf you copy or move items from one folder to another, the user-defined fields in the items will be moved but the fields will not be associated with the new destination folder. Depending on what you are trying to accomplish you can either make a copy of the entire folder instead of moving individual items, or you can use the Field Chooser to redefine the user-defined fields in the new folder.
Find and Restrict MethodsYou can use the Find or Restrict method in the Outlook object model to find all items in a folder that match certain criteria. For example, you may want to get all items where the OrderDate (a user-defined field) is sometime this year. For these methods to work the user-defined field must exist in the folder, not just the items in the folder. You can use the Field Chooser to create a new field to match the one you are working with in code. You can also use the AddToFolderFields argument for the UserProperties.Add method to make sure that when you add a field into an item it is also added into the folder set of fields.
Save Items When Changing Field ValuesIf you write code to change a field value you must save the item via code (Item.Close 0). If you do not save the item, the value will not change and it may give you the impression that the field doesn't exist in the item or cause other unexpected behavior that may seem confusing.
Example SolutionMicrosoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. The following is a lengthy series of steps that creates a sample folder-based solution. The scenario is that you work at a veterinary hospital and want to keep track of customers and the pets they own. To do this, create a new Customers subfolder in your default Contacts folder.
Create a Folder for the Contacts
Create and Publish a Simple Custom Contact FormThe initial form will keep track of the customer's pet names and types.
There are no existing items in the folder because we just created it; we now have the fields existing in the folder and in the form. Because all new items will be based on the published form, all items will also have the two user-defined fields. This is an ideal scenario, because the user-defined fields will now exist in every possible location when working in this folder.
Set the View for the FolderThe following steps will set up a table view and add fields to the view so that it's easier to monitor Outlook field behavior.
Create Two Contact Items for Customers
Add an Additional Field to the Published FormAdd an additional field to track whether or not each pet has been neutered.
Note that in the Phone List view the two items do not have a box next to them. This indicates that the fields are not actually in the item but are coming from the published form. This visual discrepancy may make it appear as though the fields are not part of the item, and while technically they are not, for practical purposes they are available.
Add an Additional Field to the FolderNow you will add an additional field for the neutering date but not use the published form to do so.
Create a Third Contact Item
NOTE: The item can be relinked to the published form by programmatically changing the Message Class back to IPM.Contact.Customer, but the size of the item will not be reduced.
For more information about the Message Class field and how to change it, please see the following article in the Microsoft Knowledge Base:
201087Now assume you wish to copy the contacts into an Exchange public folder to share them, but instead of making a copy of the folder you want to create a new folder and drag the contacts into it. In these steps we'll use a standard folder instead of an actual public folder.
(http://support.microsoft.com/kb/201087/EN-US/ )How to update existing items in an Outlook folder to use a new custom form
Create a Folder for the Contacts
Create a Programming ExampleUse the following VB or VB Automation code to retrieve those pet owners who have dogs. Be sure to reference the Outlook object library first.
You will receive a run-time error:
Now go back to the Customers2 folder and display the Field Chooser. Create a new field named Pet Type. Leave the Type and Format set as Text. This will add Pet Type as a user-defined field to the set of fields available for the folder. If you try the above code again, it does not return an error.
The property Pet Type is unknown.
For additional information about available resources and answers to commonly asked questions about Microsoft Outlook 2000 solutions, please see the following article in the Microsoft Knowledge Base:
(http://support.microsoft.com/kb/146636/EN-US/ )Frequently asked questions about custom forms and Outlook solutions