Article ID: 196424
Article Last Modified on 8/25/2005
#include <stdio.h>
#include <iostream.h>
#include <mapidefs.h>
#include <mapitags.h>
#include <mapiutil.h>
#include <edkmdb.h>
#include <mapix.h>
HRESULT GetFormNames ( )
{
HRESULT hRes;
LPMAPISESSION lpSession = 0;
LPMAPITABLE lpMsgStoresTable = 0;
LPMAPITABLE lpEformRegTable = 0;
SPropValue RestrictProp = {0};
SRestriction Restrict = {0};
LPSRowSet lpRows = NULL;
LPMDB lpPubFolder = 0;
LPSPropValue lpspvEFormsRegEID = {0};
char sPubFold[] = "Public Folders";
char sOrgFormLib[] = "Organization Forms";
ULONG ulFlags = 0L;
//Initialize MAPI
hRes = MAPIInitialize(NULL);
ulFlags = MAPI_NEW_SESSION |
MAPI_EXTENDED |
MAPI_EXPLICIT_PROFILE |
MAPI_LOGON_UI;
//Log on to MAPI
hRes = MAPILogonEx(0,
NULL,
NULL,
ulFlags,
&lpSession);
hRes = lpSession->GetMsgStoresTable( NULL, &lpMsgStoresTable );
//Specify which columns I want to see
SizedSPropTagArray(2, Columns) =
{
2, // number of properties
{
PR_ENTRYID, PR_DISPLAY_NAME
}
};
//Set them up
hRes = lpMsgStoresTable->SetColumns((LPSPropTagArray)&Columns,
NULL);
//Limit the view of the table to rows
//which have a display name in them
RestrictProp.ulPropTag = PR_DISPLAY_NAME;
RestrictProp.Value.lpszA = sPubFold;
Restrict.rt = RES_PROPERTY;
Restrict.res.resProperty.relop = RELOP_EQ;
Restrict.res.resProperty.ulPropTag = PR_DISPLAY_NAME;
Restrict.res.resProperty.lpProp = &RestrictProp;
// Apply the restiction
hRes = lpMsgStoresTable->Restrict(&Restrict,TBL_ASYNC);
// Set to beginning of table
hRes = lpMsgStoresTable->SeekRow(BOOKMARK_BEGINNING,0,NULL);
// Get the first row
hRes = lpMsgStoresTable->QueryRows(1, 0, &lpRows);
//Use the ENTRYID from the row to open the public folder store.
hRes = lpSession->OpenMsgStore( NULL,
lpRows->aRow[0].lpProps->Value.bin.cb,
(LPENTRYID)lpRows->aRow[0].lpProps->Value.bin.lpb,
NULL,
NULL,
&lpPubFolder);
//Use the PubFolder interface to get the Eforms Registry ENTRYID
LPSPropValue lpspvFinderEID = NULL;
hRes = HrGetOneProp(lpPubFolder,
PR_EFORMS_REGISTRY_ENTRYID,
&lpspvEFormsRegEID);
// Open the EFORMS Registry Folder
LPMAPIFOLDER lpEformsFolder = NULL;
ULONG ulType = 0;
hRes = lpPubFolder->OpenEntry(lpspvEFormsRegEID->Value.bin.cb,
(LPENTRYID)lpspvEFormsRegEID->Value.bin.lpb,
NULL,
MAPI_BEST_ACCESS,
&ulType,
(LPUNKNOWN*)&lpEformsFolder);
//Get the folder hierarchy, because we are interested in
//a subfolder
hRes = lpEformsFolder->GetHierarchyTable( NULL, &lpEformRegTable );
//Use the same column settings on the hierarchy table
hRes = lpEformRegTable->SetColumns((LPSPropTagArray)&Columns,
NULL );
//And the same restriction.
RestrictProp.ulPropTag = PR_DISPLAY_NAME;
RestrictProp.Value.lpszA = sOrgFormLib;
Restrict.rt = RES_PROPERTY;
Restrict.res.resProperty.relop = RELOP_EQ;
Restrict.res.resProperty.ulPropTag = PR_DISPLAY_NAME;
Restrict.res.resProperty.lpProp = &RestrictProp;
// Apply the restiction
hRes = lpEformRegTable->Restrict(&Restrict,TBL_ASYNC);
// Set to beginning of the hierarchy table
hRes = lpEformRegTable->SeekRow(BOOKMARK_BEGINNING,0,NULL);
// Get the first row
hRes = lpEformRegTable->QueryRows(1, 0, &lpRows);
//Declare a folder interface variable to accept
//the Org Forms pointer
LPMAPIFOLDER lpOrgFormsFolder = NULL;
//Open the Org Forms Library
hRes = lpEformsFolder->OpenEntry(
lpRows->aRow[0].lpProps->Value.bin.cb,
(LPENTRYID)lpRows->aRow[0].lpProps->Value.bin.lpb,
NULL,
MAPI_BEST_ACCESS,
&ulType,
(LPUNKNOWN*)&lpOrgFormsFolder);
//Declare a table interface variable to accept the
//Org Forms contents table pointer
LPMAPITABLE lpOrgFormsContentsTable = NULL;
//Get the Contents Table
hRes = lpOrgFormsFolder->GetContentsTable( MAPI_ASSOCIATED,
&lpOrgFormsContentsTable );
//Set the desired columns on the Org Forms Contents Table
hRes =lpOrgFormsContentsTable->SetColumns((LPSPropTagArray)&Columns,
NULL );
// Get all of the rows in the contents table
hRes = HrQueryAllRows(lpOrgFormsContentsTable,
(LPSPropTagArray)&Columns,
NULL,
NULL,
0,
&lpRows);
// TODO: Add code to work with the rows in the contents table to
// suit.
// TODO: Add code to free and release all memory allocated by MAPI.
return hRes;
}
Additional query words: kbMAPI kbMAPI100 kbMsg kbEDK500 kbEDK550
Keywords: kbhowto kbcode KB196424