Introduction to the Office 2003 Research Services Class Library
Chris Kunicki
OfficeZealot.com
September 2004
Applies to:
Microsoft Office 2003 Editions
Summary: One of four articles, this article describes using the Microsoft Office 2003 Research Service Class Library (RSCL) Wizard. The wizard includes a pluggable architecture that allows you to add new data providers to the wizard or connect to existing providers. (15 printed pages)
Download Office2003_ResearchServicesDevelopmentExtras.msi.
Contents
Introduction
Requirements
List of Samples
Creating a Research Service with the Research Service Class Library
Using the Research Service Class Library Wizard
Wizard-Generated Code
Handling Requests for Registration
Handling a Search Request
Manually Creating an RSCL-Enabled Research Service without the Research Service Class Library Wizard
Additional Documentation for the Research Service Development Extras Toolkit
Introduction
The Research Services Class Library (RSCL) is an object model wrapper around the XML schema API for Microsoft Office 2003 Research Services, as defined in the Office 2003 Research Services Software Development Kit (SDK).
The RSCL simplifies the creation of Research services by abstracting often-used features of the Microsoft Office 2003 Research task pane into a simple object model wrapper. The wrapper produces the XML defined by the Research Service's XML schemas. Using the Research Services Class Library, you can focus on the business logic of the solution rather than the XML code of Research Services.
This document assumes a basic understanding of the Research Services API and XML schemas as defined in the Office 2003 Research Services Software Development Kit (SDK).
Requirements
The RSCL and samples require:
- The Microsoft .NET Framework 1.1
- Microsoft Office 2003 Editions (any version)
List of Samples
RSCL includes several code samples designed as teaching aids to assist in learning the various objects in the RSCL. Each sample provided with RSCL is available in Microsoft Visual C# and Microsoft Visual Basic .NET languages. To reinforce the fundamental concepts of this class library, walk through the included samples while exploring this documentation.
You can find the samples in the following directory:
C# version:
C:\Program Files\Microsoft Office 2003 Developer Resources\Research Service Development Extras\CSharp
Visual Basic .NET version:
C:\Program Files\Microsoft Office 2003 Developer Resources\Research Service Development Extras\VBNET
Table1. List of Samples
Sample Directory Name | Description |
---|---|
SimpleSample | A simple sample that demonstrates how to use a Document response type |
SimpleFormSample | A simple sample that demonstrates how to use a Form response type and a Form request object |
SimpleContentSample | A simple sample that demonstrates how to use a complex Content response type |
IBuySpy | A detailed example showing many aspects of the RSCL. This sample is migrated from the IBuySpy sample found in the Research Services SDK. |
A Research service built with RSCL that queries the search engine for http://www.google.com/ using the Google Web service API | |
Feedster | A Research service that queries the search engine for http://www.feedster.com/ specializing in searching Web logs (blogs) |
DataDocSample | A sample that shows how to bind data to the results returned by RSCL |
CookiesTester | A simple sample that illustrates how to use HTTP cookies sent from the client and how to respond with cookies to the client from the server |
Creating a Research Service with the Research Service Class Library
To simplify the creation of a RSCL-enabled project, the toolkit provides the Research Service Class Library Wizard. The wizard collects information about the new research service and generates the appropriate C# or Visual Basic .NET project and source code.
You can also create the RSCL-enabled research service manually. To learn more about creating a RSCL-enabled research service manually read the section Manually Creating an RSCL-Enabled Research Service without the Research Service Class Library Wizard.
Using the Research Service Class Library Wizard
Complete the following procedure to launch the Research Service Class Library Wizard.
- In Microsoft Visual Studio .NET 2003, on the File menu, click New Project. The New Project dialog box appears.
- In the New Project dialog box, expand either the Visual Basic Projects or Visual C# Projects folder.
- Select the Research Service Wrapper project from the list of project types.
- Type a URL for the project, and then click OK. The Research Service Class Library Wizard appears.
The first page of the wizard collects information about the research service provider, as shown in Figure 1.
Figure 1. The wizard collects information about the research service provider
Table 2. Information collected about the research service provider
Information | Description |
---|---|
Name | Name of the provider. Typically, the provider name is the name of the organization responsible for the research service being built. |
Message | A message the provider displays to the client when they register the research service. |
About Path | A URL the client can use to find out more information about the provider. |
ID | A unique ID for the provider. The provider ID needs to be a GUID. You can either provide your own GUID or click New GUID to generate a new one. |
The second page of the wizard collects information about the research service, as shown in Figure 2.
Figure 2. The wizard collects information about the research service
Table 3. Information collected about the research service
Information | Description |
---|---|
Name | The name of the research service. This name displays in the Research task pane in any Microsoft Office 2003 application. |
Description | A description of the research service. This description is viewable in the Research Service Properties page accessed through the Research task pane in any Office 2003 application. |
Category | The Research task pane category for the research service in any Office 2003 application |
ID | A unique ID for the research service. The research service ID needs to be a GUID. You can either provide your own GUID or click New GUID to generate a new one. Note This ID must differ from the ProviderID. |
The third page of the wizard collects license information to display to the client when they register the research service through the Research task pane in any Office 2003 application, and in the property page for the research service. If Require License is set to yes, the client is required to click a check box accepting the license before they can continue registering the Research service. Figure 3 shows the License Information page of the wizard.
Figure 3. The License Information page gathers licensing information.
The fourth page provides the option to specify a data provider that connects the generated research service to a database. To generate an RSCL-enabled research service not connected to a database select "No Data Provider" in the Data Provider drop down list.
To learn more about connecting the generated research service to a database using the wizard see, Connecting to Databases Using the Office 2003 Research Service Class Library Wizard.
Figure 4. The data provider collection page is straightforward.
The next page provides formatting options and displays only when you select a data provider.
The final page provides a Finish button. Once you click Finish, the wizard generates the project and code for the new research service.
Wizard-Generated Code
The generated project and source code are ready to use. The web.config file holds the information about the provider. ResearchService.asmx is the page the client uses to register and query the new research service. ResearchService.asmx includes a sample query response. You can use this as a starting point for building your own query response.
At this point, the research service compiles and runs. However, because no business logic is provided in the Query() method, you can only register the research service, and it does not return search results. The remaining sections in this white paper discuss the Registration() and Query() methods in which the business logic is contained.
Handling Requests for Registration
Before users can access a research service, they must register the research service with the Microsoft Office System. The research service receives a registration request through the Registration() method. The Registration() method gives you an opportunity to customize the registration information returned to the user.
Note By default, information about the research service stored in the <RSCL.ResearchService> custom configuration section of the web.config file is returned to the user. Therefore, the Registration() method is optional if you define the <RSCL.ResearchService> custom configuration section in the web.config file. It is a good practice to store common information about the research service provider in the web.config and minimize the use of Registration() method.
Using the Registration() Method
The Registration() method receives a RegistrationRequest object and returns a RegistrationResponse object.
A RegistrationRequest object represents an individual request from a client to use the research service. The RegistrationRequest object provides information about the language abilities of the client computer. You can use it to customize the registration response.
A RegistrationResponse object is returned from Registration() method and contains information about the research service the user is registering to use. For example, RegistrationResponse specifies the name of the research service, a description, and a unique service ID.
Handling a Search Request
Research Services provide an API that connects the Office 2003 Research task pane with a remote Web service designed for searching. A user types in a search request in the Research task pane and it is submitted to the Research service. RSCL exposes the search request and response through the Query() method.
Using the Query() Method
The Query() method receives a QueryRequest object and returns a QueryResponse object.
A QueryRequest object represents an individual search request from the client. The QueryRequest object contains a number of properties to expose information about the user's submitted search. The most common property is QueryRequest.QueryText. This returns the text the user typed in the Search for: textbox in the Research task pane.
A QueryResponse object is returned from the Query() method and contains the results of the search. These results are then displayed in the Research task pane. The Research Service SDK defines three types of results that you can return to the Office System:
- Document. A simple response type with a title, description, and URL.
- Content. A rich response type that allows for text, images, hyperlinks, buttons, smart tags, and more.
- Form. Form controls for collecting complex data. The form controls are similar to the controls used in HTML.
The QueryResponse object can return each of these result types and can even return multiple result types in one response. To return a result type through a QueryResponse object, an object of the type ResponseWriter is sent as a parameter to the QueryResponse.WriteResponse method. RSCL includes five ResponseWriter objects.
- DocumentResponseWriter. Defines a document result, which typically consists of a title, a description, and a link. See the SimpleSample sample to see how to use DocumentResponseWriter.
- ContentResponseWriter. Defines rich content and actions that you can return as results in the query response. See the SimpleContentSample sample to see how to use ContentResponseWriter.
- FormResponseWriter. Forms enable a research service to interact with the user by providing extensive data entry choices. For example, Research Services support labels, text boxes, drop-down lists, check boxes, and more. See the SimpleFormSample sample to see how to use FormResponseWriter. Also, see the IBuySpy sample for a complex example of FormResponseWriter.
- DatabaseDocumentResponseWriter. DatabaseDocumentResponseWriter derives from DocumentResponseWriter and returns a group of results based on the data contained in an ADO.NET DataTable object. See the DataDocSample sample to see how to use DatabaseDocumentResponseWriter.
- ResponseWriter. ResponseWriter is the base object for all response writers. You can use ResponseWriter to return generic user-defined XML.
The following is an excerpt from the SimpleSample sample that illustrates how the Query() method is used in Visual Basic .NET:
Public Overloads Overrides Function Query(ByVal request _
As QueryRequest) As QueryResponse
Dim response As New QueryResponse
Dim doc As New DocumentResponseWriter
Select Case request.QueryText.ToLower()
Case "word"
doc.WriteItem("Word - Office Online", _
"Useful resources for Word 2003", _
"http://office.microsoft.com/word", _
"Go to Office Online")
Case "excel"
doc.WriteItem("Excel - Office Online", _
"Useful resources for Excel 2003", _
"http://office.microsoft.com/Excel", _
"Go to Office Online")
Case Else
doc.WriteItem("Example Search Terms for this Sample are", _
"Word and Excel.")
End Select
response.WriteReponse(doc)
Return response
End Function
In C:
public override QueryResponse Query(QueryRequest request)
{
QueryResponse response = new QueryResponse();
DocumentResponseWriter doc = new DocumentResponseWriter();
switch (request.QueryText.ToLower().Trim())
{
case "word":
doc.WriteItem("Word - Office Online",
"Useful resources for Word 2003",
"http://office.microsoft.com/word",
"Go to Office Online");
break;
case "excel":
doc.WriteItem("Excel - Office Online",
"Useful resources for Excel 2003",
"http://office.microsoft.com/Excel",
"Go to Office Online");
break;
default:
doc.WriteItem("Example Search Terms for this Sample are",
"Word and Excel.");
break;
}
response.WriteReponse(doc);
return response;
}
SimpleSample Code Walkthrough:
- A QueryResponse object named response is instantiated and is returned to the client.
- A DocumentResponseWriter object named doc is instantiated. This variable holds the results of type Document that are returned to the client.
- A request.QueryText contains the value of the search term sent to the research service. Using request.QueryText, you can formulate a response based on the business logic of the solution.
- The WriteItem method of the doc object is used to add Document items to the response.
- The doc variable is passed as a parameter to the WriteReponse method of the response object.
- The response object is returned from the Query() method.
This concludes the walkthrough of building a simple RSCL-enabled research service. We recommend that you work through the RSCL samples to become familiar with the abilities of the Research Services Class Library.
Manually Creating an RSCL-Enabled Research Service without the Research Service Class Library Wizard
Creating a research service with RSCL is similar to developing a standard Web service with Visual Studio .NET.
In Visual Studio .NET, create an ASP.NET Web Service project using either C# or VB.NET in the New Project Wizard.
After you create the project, add a reference to the RSCL.dll assembly. By default, the RSCL.dll file is found in the directory, install_path\bin\release.
Note If the RSCL.dll assembly is not compiled yet, go to install_path\Classlibrary and open the RSCL.s file in the Visual Studio .NET solution file. Then, compile the project. After compiling, you can link to the RSCL.dll assembly file.
Next, make the changes described in the next section to Service1.asmx created by the ASP.NET Web Service New Project Wizard.
Step 1: Include the RSCL namespaces to use in this code file
In Visual Basic .NET:
Imports Microsoft.Samples.Office.ResearchService
Imports Microsoft.Samples.Office.ResearchService.Registration
Imports Microsoft.Samples.Office.ResearchService.Query
In C:
using Microsoft.Samples.Office.ResearchService;
using Microsoft.Samples.Office.ResearchService.Registration;
using Microsoft.Samples.Office.ResearchService.Query;
Step 2: Change Service1 class to derive from ResearchWebService
In Visual Basic .NET, change:
Public Class Service1
Inherits System.Web.Services.WebService
to:
Public Class Service1
Inherits ResearchWebService
In C, change:
public class Service1 : System.Web.Services.WebService
to:
public class Service1 : ResearchWebService
The ResearchWebService base class derives from System.Web.Services.WebService. This gives ResearchWebService all the abilities of a Web service with the extra plumbing needed by the research service's API.
Step 3: Create the two default methods required by a research service
In Visual Basic .NET:
Public Overloads Overrides Function Registration(ByVal request _
As RegistrationRequest) As RegistrationResponse
End Function
Public Overloads Overrides Function Query(ByVal request _
As QueryRequest) As QueryResponse
End Function
In C:
public override RegistrationResponse Registration(RegistrationRequest
request)
{
return base.Registration(request);
}
public override QueryResponse Query(QueryRequest request)
{
return base.Query(request);
}
The Registration() method receives a RegistrationRequest object that represents an Office 2003 client request to use the research service. The Registration() method returns a RegistrationResponse object that contains the information the client needs to use the research service.
After the Office 2003 client registers to use the research service, the user can send search requests. Search requests are sent to the Query() method of the research service. QueryRequest represents the search request that the user submitted and a QueryResponse is returned to the client with results of the search.
Step 4: Configure the web.config file
RSCL centralizes commonly used information in the ASP.NET web.config file in a custom configuration section. The use of the web.config file is optional, although most developers use it because it reduces the amount of code used in a RSCL research service.
In the web.config file, after the opening <configuration> node, include the following XML:
<configSections>
<section name="RSCL.ResearchService" type=
"Microsoft.Samples.Office.ResearchService.Config.RSCLConfigLoader,RSCL,1.1.4322.573,
Culture=neutral, PublicKeyToken=null" />
</configSections>
<!-- RSCL web.config section -->
<RSCL.ResearchService>
<Provider>
<Name>Provider Name</Name>
<Message>Provider Welcome Message</Message>
<ID>Unique GUID for the provider</ID>
</Provider>
<Service>
<Name>Service Name that appears in Office Research Task Pane</Name>
<Description>Description of research service</Description>
<Category>RESEARCH_GENERAL</Category>
<License>License Text here</License>
<ID>Unique GUID for the provider</ID>
</Service>
</RSCL.ResearchService>
The <configSections> defines a section handler and is required for ASP.NET to recognize the <RSCL.ResearchService>.
The <ID> node for both the provider and research service require unique GUIDs. Visual Studio .NET includes a tool to generate GUIDs, named Create GUID, which****is found on the Tools menu in Visual Studio .NET.
The <Category> node defines the category under which the Research service shows in the Research task pane in the Microsoft Office System. The available categories are documented in the Microsoft.Search.Types.xsd schema file included with the Office 2003 Research Services Software Development Kit (SDK).
Also note, if you use this custom configuration section, the Registration() method as defined in the previous step is optional. If it is there, RSCL pulls the information from the web.config file by default. You can use the Registration() method to override any values stored in the web.config file.
Additional Documentation for the Research Service Development Extras Toolkit
Read the following articles for more information about the Research Service Development Extras Toolkit:
- Getting Started with the Research Service Development Extras Toolkit for Office 2003 Editions. Describes the items included with the Research Services Development Extras toolkit in detail.
- Connecting to Databases Using the Office 2003 Research Service Class Library Wizard. Describes how to use the Research Services Class Library (RSCL) Wizard to connect to existing databases.
- Building Wizard Data Provider Plug-ins for the Office 2003 Research Service Class Library. Describes how to use the RSCL Wizard to build plug-ins for use with custom data providers.
About the Author
Chris Kunicki is a longtime enthusiast of Office development and has been evangelizing Office as an important platform for building solutions for many years. As the founder of OfficeZealot.com, a leading Web site on Office solutions development, Chris builds enterprise solutions, designs tools for developers, delivers presentations, and writes extensively on the topic of Microsoft Office. Find out more about Chris and Office at www.OfficeZealot.com or send him an e-mail message at chris@officezealot.com.