Save Auto-Archive Properties of a Folder in Solution Storage
This topic shows a solution that saves its private data in a few MAPI auto-archive properties. The solution stores these properties in a StorageItem object of the folder to which the auto-archive properties apply. StorageItem objects are stored as hidden data in the associated portion of a folder, and because solutions can optionally encrypt their data, they offer the privacy required of solution data. Because the MAPI auto-archive properties are not exposed as explicit built-in properties in the Outlook object model, the solution uses the PropertyAccessor on the StorageItem object to set these properties.
The following illustrates the procedure:
ChangeAgingPropertiesfunction accepts the following as input parameters:
oFolderis the Folder object to which the aging properties apply and where their values are stored.
AgeFolderindicates whether to archive or delete items in the folder as specified.
DeleteItemsindicates whether to delete, instead of archive, items that are older than the aging period.
FileNameindicates a specific file for archiving aged items. If this is an empty string, the default archive file, archive.pst, will be used.
Granularityindicates the unit of time for aging, whether archiving is to be calculated in units of months, weeks, or days.
Periodindicates the amount of time in the given granularity. Together, the
Periodvalues indicate an aging period. Items in the given folder older than this aging period are to be archived or deleted as specified. For example, a
Granularityof 2 and
Periodof 14 specifies an aging period of 14 days, when items in the given folder older than 14 days should be either archived or deleted as specified.
Defaultindicates which settings should be set to the default. The possible values are 0, 1, and 3:
- 0 indicates nothing assumes a default value.
1 indicates that only the file location assumes a default value. This is the same as checking Archive this folder using these settings and Move old items to default archive folder in the AutoArchive tab of the Properties dialog box for the folder.
3 indicates all settings assume a default value. This is the same as checking Archive items in this folder using default settings in the AutoArchive tab of the Properties dialog box for the folder.
The validity of the parameters is checked.
If the parameters are valid, ** Folder.GetStorage** is used to create or get an existing StorageItem object with the message class, IPC.MS.Outlook.AgingProperties.
PropertyAccessor is then used to set the auto-archive properties on the StorageItem, ** StorageItem.Save** is used to save changes to the StorageItem.
TestAgingPropsprocedure sets the auto-archive settings for the aging properties of the current folder so that items older than six months are moved to the default archive file.
Place the code in the built-in ThisOutlookSession module.
TestAgingPropsprocedure to set aging properties on the current folder in the active explorer.
Note Whether it is implemented as a VBA macro or a COM add-in, the solution is a trusted caller and can therefore access the PropertyAccessor. To improve this example, wrap the following VBA code in a .NET class for better error trapping and enumeration for Granularity.
Function ChangeAgingProperties(oFolder As Outlook.Folder, _ AgeFolder As Boolean, DeleteItems As Boolean, _ FileName As String, Granularity As Integer, _ Period As Integer, Default As Integer) As Boolean '6 MAPI properties for aging items in a folder Const PR_AGING_AGE_FOLDER = _ "https://schemas.microsoft.com/mapi/proptag/0x6857000B" Const PR_AGING_DELETE_ITEMS = _ "https://schemas.microsoft.com/mapi/proptag/0x6855000B" Const PR_AGING_FILE_NAME_AFTER9 = _ "https://schemas.microsoft.com/mapi/proptag/0x6859001E" Const PR_AGING_GRANULARITY = _ "https://schemas.microsoft.com/mapi/proptag/0x36EE0003" Const PR_AGING_PERIOD = _ "https://schemas.microsoft.com/mapi/proptag/0x36EC0003" Const PR_AGING_DEFAULT = _ "https://schemas.microsoft.com/mapi/proptag/0x685E0003" Dim oStorage As StorageItem Dim oPA As PropertyAccessor ' Valid Period: ' 1-999 ' ' Valid Granularity: ' 0=Months, 1=Weeks, 2=Days ' ' Valid Default: ' 0=All settings do not use a default setting ' 1=Only the file location is defaulted ' "Archive this folder using these settings" and ' "Move old items to default archive folder" are checked ' 3=All settings are defaulted ' "Archive items in this folder using default settings" is checked If (oFolder Is Nothing) Or _ (Granularity < 0 Or Granularity > 2) Or _ (Period < 1 Or Period > 999) Or _ (Default < 0 Or Default = 2 Or Default > 3) _ Then ChangeAgingProperties = False End If On Error GoTo Aging_ErrTrap 'Create or get solution storage in given folder by message class Set oStorage = oFolder.GetStorage( _ "IPC.MS.Outlook.AgingProperties", olIdentifyByMessageClass) Set oPA = oStorage.PropertyAccessor If Not (AgeFolder) Then oPA.SetProperty PR_AGING_AGE_FOLDER, False Else 'Set the 6 aging properties in the solution storage oPA.SetProperty PR_AGING_AGE_FOLDER, True oPA.SetProperty PR_AGING_GRANULARITY, Granularity oPA.SetProperty PR_AGING_DELETE_ITEMS, DeleteItems oPA.SetProperty PR_AGING_PERIOD, Period If FileName <> "" Then oPA.SetProperty PR_AGING_FILE_NAME_AFTER9, FileName End If oPA.SetProperty (PR_AGING_DEFAULT), Default End If 'Save changes as hidden messages to the associated portion of the folder oStorage.Save ChangeAgingProperties = True Exit Function Aging_ErrTrap: Debug.Print Err.Number, Err.Description ChangeAgingProperties = False End Function Sub TestAgingProps() Dim oFolder As Outlook.Folder Set oFolder = Application.ActiveExplorer.CurrentFolder If ChangeAgingProperties(oFolder, True, False, "", 0, 6, 1) Then Debug.Print "ChangeAgingProperties OK" Else Debug.Print "ChangeAgingProperties Failed" End If End Sub