Pass Through Query using the Search Service
| December 2005 | |
|
Software Environment
| Feature | Tested on |
| Operating System | Windows 2000 Server SP4 |
| ProgrammingLanguage | C# |
| Compiler | Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.42 |
| Runtime | Microsoft (R) Windows (R) 2005 Framework version 2.0.50727 |
| DFC | 5.3 SP1 |
| Content Server | 5.3 SP1 |
| DFC PIA | 5.3.0.53 |
Abstract
This code snippet demonstrates executing a pass-through query using the Search Service introduced in DFC 5.3
Snippet
using System;
using System.Runtime.InteropServices;
using Documentum.Interop.DFC;
namespace CodeSnippets
{
public class PassThroughQueryExample
{
public static void Main(String[] args)
{
PassThroughQueryExample ss = new PassThroughQueryExample();
ss.ExecuteSearch();
}
public void ExecuteSearch()
{
IDfClientX clientX = null;
IDfClient localClient = null;
IDfSessionManager sessMgr = null;
IDfSearchService searchServ = null;
IDfSearchSourceMap srcMap = null;
IDfQueryManager queryMgr = null;
IDfQueryBuilder queryBldr = null;
IDfQueryProcessor queryProc = null;
IDfPassThroughQuery passThruQuery = null;
IDfResultsSet resultsSet = null;
try
{
clientX = new DfClientXClass();
localClient = clientX.getLocalClient();
sessMgr = CreateSessionManager();
searchServ = localClient.newSearchService(sessMgr);
srcMap = searchServ.getSourceMap();
queryMgr = searchServ.newQueryMgr();
passThruQuery = queryMgr.newPassThroughQuery("select r_object_id,object_name from dm_cabinet");
//passThruQuery.setMaxResultPerSource(5);
IDfEnumeration querySrc = srcMap.getAvailableSources();
while (querySrc.hasMoreElements())
{
IDfSearchSource searchSrc = (IDfSearchSource)querySrc.nextElement();
passThruQuery.addSelectedSource(searchSrc.getName());
Console.WriteLine("Added Source: " + searchSrc.getName());
}
queryProc = searchServ.newQueryProcessor(passThruQuery, false);
queryProc.blockingSearch(-1);
int numRes = queryProc.getResultsSize();
Console.WriteLine("Number of Results: " + numRes);
resultsSet = queryProc.getResults();
while (resultsSet.next())
{
IDfResultEntry entry = resultsSet.getResult();
Console.WriteLine(entry.getSource() + ": " + entry.getString("object_name"));
}
Console.ReadLine();
}
catch (COMException ce)
{
Console.WriteLine(ce.Message);
Console.WriteLine(ce.StackTrace);
}
finally
{
if (clientX != null) Marshal.ReleaseComObject(clientX);
if (localClient != null) Marshal.ReleaseComObject(localClient);
if (sessMgr != null) Marshal.ReleaseComObject(sessMgr);
if (searchServ != null) Marshal.ReleaseComObject(searchServ);
if (queryBldr != null) Marshal.ReleaseComObject(queryBldr);
if (queryMgr != null) Marshal.ReleaseComObject(queryMgr);
if (queryProc != null) Marshal.ReleaseComObject(queryProc);
if (srcMap != null) Marshal.ReleaseComObject(srcMap);
if (passThruQuery != null) Marshal.ReleaseComObject(passThruQuery);
if (resultsSet != null) Marshal.ReleaseComObject(resultsSet);
}
}
String username = "dmadmin";
String password = "dmadmin";
String repository = "devprog53sp1";
private IDfSessionManager CreateSessionManager()
{
IDfClientX clientX = null;
IDfClient localClient = null;
IDfSessionManager sessMgr = null;
IDfLoginInfo li = null;
try
{
clientX = new DfClientXClass();
li = clientX.getLoginInfo();
li.setUser(username);
li.setPassword(password);
localClient = clientX.getLocalClient();
sessMgr = localClient.newSessionManager();
sessMgr.setIdentity(repository,li);
//add multiple identities if you want the query to be run against
//multiple sources
/*
* IDfLoginInfo li2 = ...
* li2.setUser("dmadmin");
* li2.setPassword("dmadmin");
*
* sessMgr.setIdentity("devprog",li2);
*/
}
catch(COMException ex)
{
Console.WriteLine("Authentication Failed");
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
finally
{
if(clientX != null)Marshal.ReleaseComObject(clientX);
if(localClient != null) Marshal.ReleaseComObject(localClient);
if(li != null) Marshal.ReleaseComObject(li);
}
return sessMgr;
}
}
}
|
 |
|