内容摘要:
创建自定义web部件,使用查询对象模型对搜索组件执行查询,实现非常基础的搜索功能。
1. 创建项目
2. 编写查询代码
3. 部署web部件
4. 启动Search服务,设置爬网
OK,以上所述是笔者这个例子主要涉及到的四个部分内容概览,具体步骤请往下看
创建项目
打开visual studio 2005,新建一个类库,“名称”字段输入“CustomSearchWebPart”,然后单击“确定”。
删除名为“Class1”的类,添加新建项,在已安装模板中选择“Web自定义控件”,命名为“clsSearchQuery”。
添加对下列程序集的引用:
n Microsoft.SharePoint.dll
n Microsoft.Office.Server.dll
n Microsoft.Office.Server.Search.dll
配置项目生成后的命令行(具体操作请参阅前几篇文章内容)
编写代码
导入下列命名空间:
using Microsoft.SharePoint.WebPartPages;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Search.Query;
在类的声明之上添加代码:
[XmlRoot(Namespace = "CustomSearchWebPart")]
让类clsSearchQuery继承WebPart类:
public class clsSearchQuery : WebPart
在类中声明我们需要用到的控件:
Button cmdSearch; //搜索按钮
TextBox txtQueryText; //查询关键字
Label lblQueryResult; //提示查询结果
DataGrid grdResults; //用于显示结果
在类中重写WebPart的创建子控件方法,实现注册控件以及注册按钮的事件:
protected override void CreateChildControls()
{
Controls.Clear();
txtQueryText = new TextBox();
txtQueryText.Width = Unit.Parse("200px"); //设置文本框的长度
this.Controls.Add(txtQueryText);
cmdSearch = new Button();
cmdSearch.Text = "搜索";
cmdSearch.Width = Unit.Parse("70px");
cmdSearch.Click += new EventHandler(cmdSearch_Click); //按钮的事件处理
this.Controls.Add(cmdSearch);
lblQueryResult = new Label();
this.Controls.Add(lblQueryResult);
}
搜索按钮的事件:
void cmdSearch_Click(object sender, EventArgs e)
{
lblQueryResult.Text = string.Empty;
if (txtQueryText.Text != string.Empty)
{
keywordQueryExecute(txtQueryText.Text); //调用执行查询的方法
}
else
{
lblQueryResult.Text = "请输入您要检索的内容.";
}
}
通过关键字执行查询的方法:
private void keywordQueryExecute(string strQueryText)
{
KeywordQuery kRequest = new KeywordQuery(ServerContext.Current);
string strQuery = strQueryText;
kRequest.QueryText = strQuery;
kRequest.ResultTypes |= ResultType.RelevantResults; //一定要指定
ResultTableCollection resultTbls = kRequest.Execute();
if ((int)ResultType.RelevantResults != 0)
{
ResultTable tblResult = resultTbls[ResultType.RelevantResults];
if (tblResult.TotalRows == 0)
{
lblQueryResult.Text = "没有找到与关键字\""+strQueryText+"\"相关的结果.";
}
else
{
ReadResultTable(tblResult); //调用方法,将返回结果写入临时表中
}
}
}
结果写入临时表中:
void ReadResultTable(ResultTable rt)
{
DataTable relResultsTbl = new DataTable();
relResultsTbl.TableName = "Relevant Results";
DataSet ds = new DataSet("resultsset");
ds.Tables.Add(relResultsTbl);
ds.Load(rt, LoadOption.OverwriteChanges, relResultsTbl);
fillResultsGrid(ds);
}
数据源绑定到数据窗格控件:
private void fillResultsGrid(DataSet grdDs)
{
//实例化DataGrid控件,指定其数据源
grdResults = new DataGrid();
grdResults.DataSource = grdDs;
//设置DataGrid的显示属性.
grdResults.GridLines = GridLines.None;
grdResults.CellPadding = 4;
grdResults.Width = Unit.Percentage(100);
grdResults.ItemStyle.ForeColor = Color.Black;
grdResults.ItemStyle.BackColor = Color.AliceBlue;
grdResults.ItemStyle.Font.Size = FontUnit.Smaller;
grdResults.ItemStyle.Font.Name = "微软雅黑";
grdResults.HeaderStyle.BackColor = Color.Navy;
grdResults.HeaderStyle.ForeColor = Color.White;
grdResults.HeaderStyle.Font.Bold = true;
grdResults.HeaderStyle.Font.Name = "微软雅黑";
grdResults.HeaderStyle.Font.Size = FontUnit.Medium;
grdResults.AutoGenerateColumns = false;
//构造数据窗格显示两列,一列为标题,一列为作者
HyperLinkColumn colTitle = new HyperLinkColumn();
colTitle.DataTextField = "Title";
colTitle.HeaderText = "标题";
colTitle.DataNavigateUrlField = "Path";
grdResults.Columns.Add(colTitle);
BoundColumn colAuthor = new BoundColumn();
colAuthor.DataField = "Author";
colAuthor.HeaderText = "作者";
grdResults.Columns.Add(colAuthor);
//绑定数据到DataGrid
grdResults.DataBind();
//注册DataGrid控件
Controls.Add(grdResults);
}
部署web部件
生成项目,将生成CustomSearchWebPart.dll 复制到SharePoint网站的 bin 目录(如果你有编辑生成后的事件命令行,则省去复制这一操作)
注册该控件为SafeControl,打开SharePoint网站下的web.config(这个网站是您要向其添加web部件的站点),将下面标记添加到web.config 的 <SafeControls> </SafeControls> 部分:
<SafeControl Assembly="CustomSearchWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="CustomSearchWebPart" TypeName="*" Safe="True" />
别忘记保存,到此为止,部署还没完成,还有一个重要的事情没做,新建一个记事本,写入如下XML代码:
<?xml version="1.0"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
<Assembly>CustomSearchWebPart,Version=1.0.0.0,Culture=Neutral, PublicKeyToken=null</Assembly>
<TypeName>CustomSearchWebPart.clsSearchQuery</TypeName>
<Title>Custom Search Web Part</Title>
</WebPart>
保存为.dwp格式,笔者命名为CustomSearchWebPart.dwp
接下来,就可以在我们的站点上导入这个web part了,打开SharePoint网站,进入您要添加该web part的页面,依次点击“网站操作”->“编辑网页”,在web部件编辑区域点击“添加web部件”,选择“高级web部件库和选项”,如下图标记:
此时页面右边会弹出”添加web部件”边栏,点击”导入”按钮
浏览到.dwp所在目录,单击上载按钮
将上载成功的web part直接拖动到你要添加该部件的区域,然后选择右上角的“退出编辑模式”
启动Search服务,设置爬网
打开SharePoint管理中心,依次选择“操作”->“服务器场上的服务”,确保您已经启动了“Office SharePoint Server搜索”服务
进入“共享服务管理”,选择“搜索设置”项,点击“内容源和爬网计划”,启动“本地OSS网站”完全爬网,爬网时,你可以发现CPU的使用率基本是100%。
当您的CPU使用率降幅比较大时,这时候您就可以尝试一个Search,验证自定义搜索web部件是否有达到关键字搜索的目的,答案马上给您揭晓,回到SharePoint站点,笔者这里输入“doc”,结果列出了包含该关键字的所有文档,可见这个search是成功的。
最后笔者提醒一件事,如果你再次上传了一个文档却没有搜索到,请您到管理中心的共享服务里头,编辑您的共享服务,然后再新建一个增量爬网即可。具体操作,恳请查阅相关资料。