Microsoft KB Archive/194955

= How To Change the Aging Properties on a Folder =

Article ID: 194955

Article Last Modified on 8/25/2005

-

APPLIES TO


 * Microsoft Messaging Application Programming Interface

-



This article was previously published under Q194955



SUMMARY
The Aging Properties determine the length of time an item will stay in a particular folder before it is archived. The two properties that can be set to control this are PR_AGING_PERIOD and PR_AGING_GRANULARITY.

PR_AGING_PERIOD contains a number that indicates the number of units to set. PR_AGING_GRANULARITY contains a constant indicating the units for the period. For example, if you want to set the length of time to 14 days, you would set the PR_AGING_PERIOD to 14 and the PR_AGING_GRANULARITY to 2 (representing days; see below for a list of the constants).

Here are the define statements for the properties and the constants: #define PR_AGING_PERIOD        PROP_TAG(PT_LONG,0x36EC) #define PR_AGING_GRANULARITY   PROP_TAG(PT_LONG,0x36EE)

#define AG_MONTHS 0 #define AG_WEEKS  1 #define AG_DAYS   2



MORE INFORMATION
The code below demonstrates how to set the aging properties on the Inbox Folder. It is important to remember to enable archiving on the Inbox folder in order for these property changes to take effect.

This sample depends on the file RulesCls.dll, which can be built from source files included on the Microsoft Platform SDK (Software Development Kit).

The additional libraries required to make the code compile are:  kernel32.lib user32.lib msvcrt.lib mapi32.lib edkdebug.Lib edkmapi.lib rulecls.lib</li> edkutils.lib</li> addrlkup.lib</li> edkguid.lib</li> version.lib</li>  advapi32.lib #include <edk.h>   #include <mapidefs.h>

#define PR_AGING_PERIOD        PROP_TAG(PT_LONG,0x36EC) #define PR_AGING_GRANULARITY  PROP_TAG(PT_LONG,0x36EE)

#define AG_MONTHS 0 #define AG_WEEKS  1 #define AG_DAYS   2

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pszCmd,                      int nCmdShow) {     LPMAPISESSION   lpSession              =     NULL; LPMDB          lpStore                =     NULL; HRESULT        hr                     =     NULL; CHAR           szFolder[MAX_PATH + 1] =     {0}; LPMAPIFOLDER   lpFolder               =     NULL; ULONG          cbEIDFolder            =     0; LPENTRYID      lpEIDFolder            =     NULL; LPMAPITABLE    lpTable                =     NULL; ULONG          cbEntryID              =     0; LPENTRYID      lpEntryID              =     NULL; ULONG          ulFlags                =     MAPI_BEST_ACCESS; ULONG          ulObjType              =     0; LPSRestriction lpRes                  =     NULL; ULONG          lpulCount              =     NULL; LPSRowSet      lpRows                 =     NULL; LPMAPIPROP     lpMAPIProp             =     NULL;

MessageBox ( 0L, "Begin changing aging properties.",                  "Windows", MB_OK );

hr = MAPIInitialize(NULL); if (FAILED(hr)) {        return 1; }     hr = MAPILogonEx(0, "", NULL,              MAPI_LOGON_UI | MAPI_NEW_SESSION |  MAPI_EXPLICIT_PROFILE,              &lpSession); if (FAILED(hr)) {        MessageBox(NULL,"MAPI Logon failed",NULL,MB_OK); goto cleanup; }

hr = HrOpenExchangePrivateStore(lpSession,&lpStore); if (FAILED(hr)) {        MessageBox(NULL,"Message Store Not Opened",NULL,MB_OK); goto cleanup; }     strcpy(szFolder, "Top of Information Store\\Inbox");

hr = HrMAPIFindFolderEx(lpStore, '\\', szFolder,                       &cbEIDFolder, &lpEIDFolder); if (FAILED(hr)) {        MessageBox(NULL,"Inbox Not Found",NULL,MB_OK); goto cleanup; }

hr = HrMAPIOpenFolderEx (lpStore,'\\',szFolder,&lpFolder); if (FAILED(hr)) {        MessageBox(NULL,"Inbox Could Not Be Opened",NULL,MB_OK); goto cleanup; }

hr = lpFolder->GetContentsTable(MAPI_ASSOCIATED,&lpTable); if (FAILED(hr)) {        MessageBox(NULL,"GetContentsTable Failed",NULL,MB_OK); goto cleanup; }     {         SizedSPropTagArray(2, Columns) = {           2,  // number of properties {               PR_ENTRYID, PR_MESSAGE_CLASS }        };

hr = lpTable->SetColumns( (LPSPropTagArray)&Columns, NULL ); if (FAILED(hr)) {           MessageBox(NULL,"SetColumns Failed",NULL,MB_OK); goto cleanup; }     }

hr = HrStringToRestriction(           "PR_MESSAGE_CLASS = \"IPC.MS.Outlook.AgingProperties\"",            NULL, &lpRes); if (FAILED(hr)) {        MessageBox(NULL,"HrStringToRestriction Failed",NULL,MB_OK); goto cleanup; }

if (FAILED(hr = lpTable->Restrict(lpRes,0L))) {        MessageBox(NULL,"Restrict Failed",NULL,MB_OK); goto cleanup; }

if (FAILED(hr = lpTable->GetRowCount(0,&lpulCount))) {        MessageBox(NULL,"GetRowCount Failed",NULL,MB_OK); goto cleanup; }

if (lpulCount > 0) {        if (FAILED(hr = lpTable->QueryRows(lpulCount,                              TBL_NOADVANCE, &lpRows))) {           MessageBox(NULL,"QueryRows Failed",NULL,MB_OK); goto cleanup; }

cbEntryID = lpRows->aRow[0].lpProps[0].Value.bin.cb; lpEntryID = (LPENTRYID) lpRows->aRow[0].lpProps[0].Value.bin.lpb; if (FAILED(hr = lpFolder->OpenEntry(cbEntryID,                                    (LPENTRYID) lpEntryID, NULL,                                     MAPI_MODIFY, &ulObjType,                                     (LPUNKNOWN *) &lpMAPIProp))) {           MessageBox(NULL,"OpenEntry Failed",NULL,MB_OK); goto cleanup; }

SPropValue spvProp = {0}; spvProp.ulPropTag = PR_AGING_PERIOD; spvProp.Value.l = 14;

if (FAILED(hr = HrSetOneProp(lpMAPIProp,&spvProp))) {           MessageBox(NULL,"HrSetOneProp Failed",NULL,MB_OK); goto cleanup; }

spvProp.ulPropTag = PR_AGING_GRANULARITY; spvProp.Value.l = AG_DAYS;

if (FAILED(hr = HrSetOneProp(lpMAPIProp,&spvProp))) {           MessageBox(NULL,"HrSetOneProp Failed",NULL,MB_OK); goto cleanup; }

if (FAILED(hr = lpMAPIProp->SaveChanges(KEEP_OPEN_READWRITE))) {           MessageBox(NULL,"SaveChanges Failed",NULL,MB_OK); goto cleanup; }     }

cleanup:

if ( S_OK == hr ) MessageBox ( 0L, "Finished saving changes to aging properties.",                     "Windows", MB_OK ); if (lpRows) FREEPROWS(lpRows);

if (lpSession) {        lpSession->Logoff(0, 0, 0); ULRELEASE(lpSession); }

MAPIUninitialize;

return 0; }                       </li></ul>

Keywords: kbhowto kbmsg KB194955

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.