Querying an exchange server

- 2 mins read

We can use asynchronous data retrieval, inside of a WebContent webpart, this is a little sample of how to do it.

Part 1

Querying an exchange server and retry results inside of sharepoint webpart, this first sample use the Search web dav method using XMLHTTP request (Exchange Store WebDAV Protocol), query the last five elements from user inbox and gets the date received, the sender name and the subject.

SELECT "urn:schemas:httpmail:datereceived", 
       "urn:schemas:httpmail:sendername", 
       "urn:schemas:httpmail:subject" 
FROM scope(shallow traversal of )

WHERE "DAV:ishidden"=False AND "DAV:isfolder"=False

In the code, replace the sUser, sExchangeServer and sFolder vars, add a web content webpart and paste the code inside.

<script language=javascript>
 
var sUser = "USERNAME";
var sExchangeServer = "http://SERVER";
var sFolder = "FOLDER";
 
var xmlHttpReq;
 
function getMessages()
{
   var sURL = sExchangeServer + "/exchange/" + sUser + "/" + sFolder;
    
    if (sUser!="" && sURL!="")
    {
      xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");  
    
      xmlHttpReq.open("SEARCH", sURL, true);
      xmlHttpReq.setRequestHeader("Content-type:", "text/xml");
      xmlHttpReq.setRequestHeader("Depth", "1″);
     
      xmlHttpReq.onReadyStateChange = checkState;
     
      // Our webDav query
      var sDavQuery = ‘SELECT "urn:schemas:httpmail:datereceived", ‘ +
                              ‘"urn:schemas:httpmail:sendername", ‘ +
                              ‘"urn:schemas:httpmail:subject" ‘ +
                           ‘ FROM scope(\’shallow traversal of " + sURL + "\’ )’ +
                           ‘ WHERE "DAV:ishidden"=False AND "DAV:isfolder"=False ‘;
 
      // The request package                           
      var sSearchRequest = "<?xml version=1.0 ?>" +
                           "<a:searchrequest xmlns:a=DAV:><a:sql>" + 
                                 sDavQuery +     
                           "</a:sql></a:searchrequest>";
      
      // Max results
      xmlHttpReq.SetRequestHeader("Range", "rows=0-4);
    
      xmlHttpReq.Send(sSearchRequest);
    }
}
 
function checkState()
{
  if (xmlHttpReq.readyState == 4)
  { 
     var xml = xmlHttpReq.responseXML.documentElement;
    
     // Parse xml – table to present results 
     var xmlResults = xml.getElementsByTagName(a:prop);
        
     var domTableResults = document.createElement(TABLE);
        
     domTableResults.setAttribute(cellPadding,5);
        
     var tmp = document.createElement(TBODY);
        
     domTableResults.appendChild(tmp);
     var domTableRow = document.createElement(TR);
     domTableRow.setAttribute(class,ms-TPHeader;);
        
     // Table header
     for (j=0;j<xmlResults[0].childNodes.length;j++)
     {
        if (xmlResults[0].childNodes[j].nodeType != 1) 
            continue;
        
        var container = document.createElement(TH);
        var theData = document.createTextNode(xmlResults[0].childNodes[j].nodeName);
        
        container.appendChild(theData);
        domTableRow.appendChild(container);
     }
    
     tmp.appendChild(domTableRow);
        
     // Table rows
     for (i=0;i<xmlResults.length;i++)
     {
        var domTableRow = document.createElement(TR);
        domTableRow.setAttribute(class,ms-WPBody;);
            
        for (j=0;j<xmlResults[i].childNodes.length;j++)
        {
            if (xmlResults[i].childNodes[j].nodeType != 1) 
            continue;
            
          var container = document.createElement(TD);
          var theData = document.createTextNode(xmlResults[i].childNodes[j].firstChild.nodeValue);
                
          container.appendChild(theData);
          domTableRow.appendChild(container);
        }
            
        tmp.appendChild(domTableRow);
     }
    
     document.getElementById(divOutput).appendChild(domTableResults);
  }
}
getMessages();
</script>
<div id='divOutput'></div>