Receive a Search Response

The following code example demonstrates how to receive a user search response. The operations in the Initialize RTC and Register to Receive Events (RTCE_USERSEARCH events) code examples must be performed before using this example.

C++ Code Example

IRTCUserSearchResultsEvent *pUserSearchResultsEvent = NULL;
IRTCEnumUserSearchResults  *pUserSearchResults = NULL;
IRTCUserSearchResult       *pUserSearchResult = NULL;

// This returns the status of the search.
LONG   lStatusCode;
// This is used to match the return object with the request made.
LONG  lReturnCookie;
ULONG ulFetched = 0;
// This Boolean value informs the user of more possible results.
VARIANT_BOOL  fMoreAvailable = FALSE;
// These strings are for storing the search results.
BSTR  bstrURI = NULL;
BSTR  bstrDisplayName = NULL;
BSTR  bstrTitle = NULL;
BSTR  bstrOffice = NULL;
BSTR  bstrPhone = NULL;
BSTR  bstrCompany = NULL;
BSTR  bstrCity = NULL;
BSTR  bstrState = NULL;
BSTR  bstrCountry = NULL;
BSTR  bstrEmail = NULL;
// This HRESULT is for receiving errors.
HRESULT   hr = 0;

// Create the UserSearch results event object from 
// the IDispatch object returned with the event.
hr = pIDispatch->QueryInterface( IID_IRTCUserSearchResultsEvent, 
                                 reinterpret_cast<void**> 
                                 (&pUserSearchResultsEvent));

// Release the IDispatch object.

// If (hr != S_OK), process the error here.

// Retrieve the cookie from the search.

hr = pUserSearchResultsEvent->get_Cookie(&lReturnCode);

// If (hr != S_OK), process the error here.

// You can use this cookie to match the response with 
// the request.

// Retrieve the status code from the search.
hr = pUserSearchResultsEvent->get_StatusCode(&lStatusCode);

// If (hr != S_OK), process the error here.

// If (lStatusCode != S_OK), the UserSearch operation failed;
// process the error here.

// Check whether there are more results available.
hr = pUserSearchResultsEvent->get_MoreAvailable(&fMoreAvailable);

// If (hr != S_OK), process the error here.

// If (fMoreAvailable), there might be more results 
// available if the search is narrowed.

// Enumerate through the user search results.
hr = pUserSearchResultsEvent->EnumerateResults(&pUserSearchResults);

// Release the IRTCUserSearchResultsEvent object.

// If (hr != S_OK), process the error here.

while( S_OK == pUserSearchResults->Next(1, &pUserSearchResult, &ulFetched) )
{
    hr = pUserSearchResult->get_Value(RTCUSC_URI, &bstrURI);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_DISPLAYNAME, &bstrDisplayName);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_TITLE, &bstrTitle);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_OFFICE, &bstrOffice);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_PHONE, &bstrPhone);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_COMPANY, &bstrCompany);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_CITY, &bstrCity);
	
    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_STATE, &bstrState);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_COUNTRY, &bstrCounty);

    // If (hr != S_OK), process the error here.

    hr = pUserSearchResult->get_Value(RTCUSC_EMAIL, &bstrEmail);

    // If (hr != S_OK), process the error here.

    // Add the necessary code for printing or processing 
    // strings here.

    // Release IRTCUserSearchResult and all BSTRs 
    // before the end of the loop.

}

// Release the IRTCEnumUserSearchResults object.

FakePre-3c7d75f1a6b049768e8d831719181815-c1ef5b6efd804f21903f4a5d931984a6

Visual Basic Code Example

' The application must perform the operations in the
' "Initialize RTC"  and "Register to Receive Events"
' (RTCE_USERSEARCH events) before using this example.

' Set the error handling routine here. 
' On Error GoTo MyErrorRoutine 

Dim objUserSearchResultsEvent  As IRTCUserSearchResultsEvent
Dim objUserSearchCollection    As IRTCCollection
Dim objUserSearchResult        As IRTCUserSearchResult

Dim lStatusCode      As Long
Dim lCookie          As Long
Dim lResultCount     As Long
Dim lResultLoopVar   As Long
Dim fMoreAvailable   As Boolean
Dim strURI           As String
Dim strDisplayName   As String
Dim strTitle         As String
Dim strOffice        As String
Dim strPhone         As String
Dim strCompany       As String
Dim strCity          As String
Dim strState         As String
Dim strCountry       As String
Dim strEmail         As String

' objEvent is the IDispatch object that was returned 
' with the event. The IRTCUserSearchResultsEvent can  
' be extracted from it if the event was an 
' RTCE_USERSEARCH event.  
Set objUserSearchResultsEvent = objEvent

' Retrieve the cookie from the search. You can use 
' this cookie to match the response with the request.
lCookie = objUserSearchResultsEvent.Cookie

' Retrieve the status code from the search.
lStatusCode = objUserSearchResultsEvent.StatusCode

' If (Hex(lStatusCode) > 0) the UserSearch operation
' failed, process the error here. 

' Check if there are more results available.
fMoreAvailable = objUserSearchResultsEvent.MoreAvailable

' If (fMoreAvailable = TRUE) there might be more results 
' available if the search is narrowed.

' Retrieve the results from the 
' IRTCUserSearchResultsEvent object.
Set objUserSearchCollection = objUserSearchResultsEvent.Results

' Retrieve the number of results returned.
lResultCount = objUserSearchCollection.Count

' Loop through the results that were returned.
For lResultLoopVar = 1 To lResultCount

    ' Retrieve this individual result
    Set objUserSearchResult = objUserSearchCollection.Item(lResultLoopVar)

    strURI =         objUserSearchResult.Value(RTCUSC_URI)
    strDisplayName = objUserSearchResult.Value(RTCUSC_DISPLAYNAME)
    strTitle =       objUserSearchResult.Value(RTCUSC_TITLE)
    strOffice =      objUserSearchResult.Value(RTCUSC_OFFICE)
    strPhone =       objUserSearchResult.Value(RTCUSC_PHONE)
    strCompany =     objUserSearchResult.Value(RTCUSC_COMPANY)
    strCity =        objUserSearchResult.Value(RTCUSC_CITY)
    strState =       objUserSearchResult.Value(RTCUSC_STATE)
    strCountry =     objUserSearchResult.Value(RTCUSC_COUNTRY)
    strEmail =       objUserSearchResult.Value(RTCUSC_EMAIL)

    ' Add necessary code for printing or processing strings here.

    ' Release this individual result
    Set objUserSearchResult = Nothing

Next lResultLoopVar

' Release Collection and Event objects
Set objUserSearchCollection = Nothing
Set objUserSearchResultsEvent = Nothing