Thread: LDAP access
View Single Post
  #6  
Old December 5th 08, 04:01 PM posted to microsoft.public.outlook.program_addins
[email protected]
external usenet poster
 
Posts: 24
Default LDAP access

On Dec 2, 11:19šam, Sergeichik
wrote:
I have write:

bool ReadAD()
{

// Initialize MAPI.
HRESULT hRes = S_OK;

if (FAILED(hRes = MAPIInitialize(NULL)))
{
š š š š return false;

}

HRESULT hr;
LPMAPISESSION pSess;
hr = MAPILogonEx(0, NULL, NULL, MAPI_EXTENDED, &pSess);
if(FAILED(hr))
{
š š š š MAPIUninitialize();
š š š š return false;

}

// open address book
LPADRBOOK pAddr;
hr = pSess-OpenAddressBook(0, 0, 0, &pAddr);
if(FAILED(hr))
{
š š š š pSess-Logoff(0, 0, 0);
š š š š MAPIUninitialize();
š š š š return false;

};

// open root container by passing a NULL entry ID
ULONG obj_type;
LPMAPICONTAINER rootContainer = NULL;
hr = pAddr-OpenEntry( 0, NULL, NULL, 0, &obj_type,
(LPUNKNOWN*)&rootContainer);

//Get าierarchy table
LPMAPITABLE hierh_table;
hr = rootContainer-GetHierarchyTable(0, &hierh_table);

//The rest is actual code:
SizedSPropTagArray( 1, columns) = { 1, PR_ENTRYID};

SPropValue criteria[ 2];
SRestriction restrictions[ 2];
SRestriction andNode;

criteria[ 0].ulPropTag = PR_AB_PROVIDER_ID;
criteria[ 0].Value.bin.cb = 16;
const BYTE muid[] = MUIDEMSAB;
criteria[ 0].Value.bin.lpb = (BYTE *) muid;
restrictions[ 0].rt = RES_PROPERTY;
restrictions[ 0].res.resProperty.relop = RELOP_EQ;
restrictions[ 0].res.resProperty.ulPropTag = PR_AB_PROVIDER_ID;
restrictions[ 0].res.resProperty.lpProp = &criteria[ 0];

criteria[ 1].ulPropTag = PR_EMS_AB_CONTAINERID;
criteria[ 1].Value.l = 0;
restrictions[ 1].rt = RES_PROPERTY;
restrictions[ 1].res.resProperty.relop = RELOP_EQ;
restrictions[ 1].res.resProperty.ulPropTag = PR_EMS_AB_CONTAINERID;
restrictions[ 1].res.resProperty.lpProp = &criteria[ 1];

andNode.rt = RES_AND;
andNode.res.resAnd.cRes = 2;
andNode.res.resAnd.lpRes = &restrictions[ 0];

LPSRowSet rows = NULL;

if( SUCCEEDED( HrQueryAllRows( hierh_table,
š (LPSPropTagArray) &columns, &andNode, NULL, 0, &rows)))
{
š š š š if( rows-cRows)
š š š š {
š š š š š š int rows_count = rows-cRows;
š š š š }
š š š š FreeProws( rows);

}

if (hierh_table) hierh_table-Release();
if (rootContainer) rootContainer-Release();
if (pAddr) pAddr-Release();
if (pSess) pSess-Release();

MAPIUninitialize();

return true;

}

But rows_count is 0, although Outlook have connected AD with several
contacts in it.

What's wrong ?


Look through your address book containers using OutlookSpy/MFCMAPI or
else take out the restriction and dump those properties for all the
rows and see what's not matching up. You're looking for a container
which is probably called "Global Address List", but querying by name
is unwise.
Ads