EMC Developer Network

Pass Through Query using the Search Service

December 2005

Software Environment

FeatureTested on
Operating SystemWindows 2000 Server SP4
ProgrammingLanguageC#
CompilerMicrosoft (R) Visual C# 2005 Compiler version 8.00.50727.42
Runtime Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
DFC5.3 SP1
Content Server5.3 SP1
DFC PIA5.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;	
		}
	}
}