科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道创建Web部件来显示SharePoint Portal Server的搜索数据

创建Web部件来显示SharePoint Portal Server的搜索数据

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

可以利用 Microsoft Office SharePoint Portal Server 2003 中的强大搜索数据集合,创建端对端的解决方案来执行搜索项数据的收集和查看。SharePoint Portal Server 会自动记录搜索项数据。

来源:microsoft 2007年10月31日

关键字: Microsoft 搜索 web SharePoint Office

  • 评论
  • 分享微博
  • 分享邮件

 

  简介

  可以利用 Microsoft Office SharePoint Portal Server 2003 中的强大搜索数据集合,创建端对端的解决方案来执行搜索项数据的收集和查看。SharePoint Portal Server 会自动记录搜索项数据。在本文中,我们会展示如何将这种数据从每天的日志文件合并到 SQL Server 数据库中,并且使其可用于快速检索和分析。我们将详细说明要实现该任务需要执行的下列高级步骤:

  1. 创建 SQL 数据库、相关的存储过程和 DTS 软件包,以便将日志文件数据加载到数据库中。

  2. 创建 Web 部件以查看并筛选来自 SQL 数据库的搜索数据。

  请注意,在 IIS 日志文件中记录并传输到数据库的搜索结果不包括查询的作用域信息(如果适用),也不包括仅属性查询的结果,例如查询由特定人员创建的文档。

  注 本文假设您对 SharePoint Portal Server、.NET Framework 技术(例如 ASP.NET)以及 Microsoft Visual C# 编程语言具有非常深入的理解。您应该将本文与 Microsoft SharePoint Products and Technologies 2003 Software Development Kit (SDK) 中的其他参考资料一起使用。

  存储数据:创建数据库、相关存储过程和 DTS 软件包

  对于中央存储和简单查询,我们建议将搜索项数据信息从 IIS 日志文件加载到 SQL Server 数据库中。要采取三个步骤,如下所示:

  1. 创建数据库和表。

  2.创建存储过程。

  3. 创建数据转换服务 (DTS) 软件包。

  步骤 1. 创建数据库和表

  使用“企业管理器”或相似的工具,在 SQL Server 计算机上创建数据库,以存储 IIS 日志文件信息、存储过程和 DTS 软件包。

  在新的 SQL 数据库中创建以下两个表:

  ? tblLogItems

  ? tblSearchTerms

  每个表都应该具有以下结构:

  

  [DateData][varchar](255)--注 对于 tblSearchTerms 表中的 [DateData],该字段的类型为 [datetime] (8)。

  [TimeData][varchar](255)

  [IP][varchar](255)

  [Type][varchar](255)

  [Page][varchar](255)

  [SearchTermData][varchar](255)

  [Port][varchar](255)

  [UserData][varchar](255)

  [IP2][varchar](255)

  [Browser][varchar](255)

  [HTTPCode][varchar](255)

  [Col012][varchar](255)

  [Col013][varchar](255)

  [Col014][varchar](255)

  [Col015][varchar](255)

  

  注 DateData、TimeData、SearchTermData 和 UserData 字段用于 Web 部件查询中。IIS 日志文件中收集的其他信息存储在表中,可以通过修改 Web 部件查询来使用。

  步骤 2. 创建存储过程

  在本步骤中,创建以下八个存储过程:

  ? sp_ReturnFileName

  ? sp_DeleteIDA

  ? sp_AppendTerms

  ? sp_UpdateSearchTermData

  ? sp_GetDateData

  ? sp_GetUserData

  ? sp_GetDatabyDate

  ? sp_GetDatabyUser

  存储过程 #1: sp_ReturnFileName

  下面的存储过程,由 DTS 软件包使用,它返回前一天的 IIS 日志文件名。可以为 @stPrefix 变量指定不同的本地路径或通用命名约定 (UNC) 值。IIS 日志文件存储在路径 \WINDOWS\system32\LogFiles\W3SVC1\ 中,但可以将这些文件复制到另一个位置以便将来导入到数据库中。

  注 您必须更改 @stPrefix 的变量声明,以便准确匹配您为本地路径或 UNC 路径指定的字符串的长度。

  

  CREATEPROCEDUREsp_ReturnFileName

  AS

  DECLARE@dtRetrieveFiledatetime,

  @stPrefixchar(25),

  @stSuffixchar(4),

  @stTempchar(2),

  @stYearchar(2),

  @stMonthchar(2),

  @stDaychar(2)

  SET@dtRetrieveFile=DateAdd(d, -1, GetDate())

  --may include UNC or local path in @stPrefix

  --change declaration to the number

  --of characters in @stPrefix

  SET@stPrefix='\\server_name\share\ex'

  SET@stSuffix='.log'

  --Get two-digit year

  SET@stYear=Cast(Right(DatePart(yy,@dtRetrieveFile), 2) Aschar(2))

  --Get two-digit month

  SET@stTemp=Cast(Datepart(mm,@dtRetrieveFile) Aschar(2))

  SELECT@stMonth=

  CASELen(@stTemp)

  WHEN1THEN'0'+@stTemp

  ELSE@stTemp

  END

  --Get two-digit day

  SET@stTemp=Cast(DatePart(dd,@dtRetrieveFile) Aschar(2))

  SELECT@stDay=

  CASELen(@stTemp)

  WHEN1THEN'0'+@stTemp

  ELSE@stTemp

  END

  SELECT@stPrefix+@stYear+@stMonth+@stDay+@stSuffix

  GO

  

  存储过程 #2: sp_DeleteIDA

  下面的存储过程,用于 DTS 软件包中,它从 tblLogItems 表中删除不相关的项。

  

  CREATEPROCEDUREsp_DeleteIDA

  AS

  DELETEtblLogItems WHERESearchTermData ='/default.ida'OrSearchTermData Like'%root.exe'

  GO

  

  存储过程 #3: sp_AppendTerms

  下面的存储过程用于 DTS 软件包中,它将包含搜索项目的记录从 tblLogItems 表添加到 tblSearchTerms 表中。DateData 字段从 IIS 日志文件格式 (yyyy-mm-dd) 转换为 USA 格式 (mm/dd/yyyy),以适应显示目的以及在 Web 部件代码中更简便的进行查询。

  

  CREATEPROCEDUREdbo.sp_AppendTerms

  ASINSERTINTOdbo.tblSearchTerms

  (DateData, TimeData, IP, Page, SearchTermData,

  Port, UserData, IP2, Browser, HTTPCode, Col012,

  Col013, Type)

  SELECTCAST(DateData ASDateTime), TimeData, IP, Page, SearchTermData,

  Port, UserData, IP2, Browser, HTTPCode, Col012, Col013, Type

  FROMdbo.tblLogItems

  WHERE(Type LIKE'POST') AND(NOT(UserData LIKE'-')) AND(NOT(SearchTermData LIKE'-'))

  GO

  

  存储过程 #4: sp_UpdateSearchTermData

  下面的存储过程用于 DTS 软件包中,它清除最近添加到 tblSearchTerms 表中的搜索项。

  

  CREATEPROCEDUREdbo.sp_UpdateSearchTermData

  ASUPDATEdbo.tblSearchTerms

  SETSearchTermData =REPLACE(SUBSTRING(SearchTermData, 64,

  PATINDEX('%+Search+Server+Name%', SearchTermData) -64), '+', '')

  WHERE(PATINDEX('%+Search+Server+Name%', SearchTermData) >0)

  GO

  

  存储过程 #5: sp_GetDateData

  下面的存储过程由 Web 部件使用,它从 tblSearchTerms 表中检索日期的列表。

  

  CREATEPROCEDUREdbo.sp_GetDateData

  ASSELECTDISTINCTDateData

  FROMdbo.tblSearchTerms

  GROUPBYDateData

  GO

  

  存储过程 #6: sp_GetUserData

  下面的存储过程由 Web 部件使用,它从 tblSearchTerms 表中检索不同用户的列表。

  

  CREATEPROCEDUREdbo.sp_GetUserData

  ASSELECTDISTINCTUserData

  FROMdbo.tblSearchTerms

  GROUPBYUserData

  GO

  

  存储过程 #7: sp_GetDatabyDate

  下面的存储过程由 Web 部件使用,它用于从 tblSearchTerms 表中检索特定日期或日期范围的搜索项。

  

  CREATEPROCEDUREdbo.sp_GetDatabyDate(@StartDateDATETIME,

  @EndDateDATETIME)

  ASSELECTSearchTermData, DateData, COUNT(SearchTermData) ASstrCount

  FROMdbo.tblSearchTerms

  WHERE(DateData >=@StartDate) AND(DateData <=@EndDate)

  GROUPBYSearchTermData, DateData

  GO

  

  存储过程 #8: sp_GetDatabyUser

  下面的存储过程由 Web 部件使用,它用于从 tblSearchTerms 表中检索特定用户的搜索项。

  

  CREATEPROCEDUREdbo.sp_GetDatabyUser

  (@UserNameVARCHAR(255))

  ASSELECTSearchTermData, DateData, COUNT(SearchTermData) ASstrCount

  FROMdbo.tblSearchTerms

  WHERE(UserData =@UserName)

  GROUPBYSearchTermData, DateData

  GO

  步骤 3. 创建 DTS 软件包
    数据转换服务 (DTS) 软件包是使用 SQL Server Enterprise Manager 中的 DTS 设计器创建的。要创建一个软件包,请右键单击 SQL Server 实例下的 Data Transformation Services 文件夹,然后选择 New Package。

    要创建 DTS 软件包,请执行以下七个步骤:

    ? 创建连接。
    ? 创建动态属性任务。
    ? 创建执行 SQL 任务。
    ? 创建连接间的工作流。
    ? 创建工作流的其余部分。 
    ? 重置动态属性任务。
    ? 保存 DTS 软件包并安排其每天运行一次。

    创建连接
    1. 插入新的 Text File (Source) 连接。
    2. 在 File Name 框中,浏览到现有 IIS 日志文件或键入到该文件的路径。
    3. 在“Text File Properties”向导的 Select File Format 步骤中,单击 Delimited,然后单击 Next。
    4. 在 Specify Column Delimiter 中,单击 Other,然后键入一个空格。现在,您应该看到在 Preview 框中的 IIS 日志文件项。
    5. 单击 Finish,然后单击 OK。
    6.键入新的 Microsoft OLE DB Provider for SQL Server 连接。
    7. 根据您的环境,选择 Server 和 Database,然后单击 OK。

    创建动态属性任务
    1. 键入新的动态属性任务。
    2.命名任务 ReturnFileName,然后在 Dynamic Properties Task Properties 中,单击 Add。
    3.在 Dynamic Properties Task: Package Properties 对话框中,选择 Text File (Source) 连接。
    4.选择 DataSource 属性,然后单击 Set。
    5.在 Add/Edit Assignment 对话框中,对于 Source,选择 Query。
    6.对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
    7.在 Query 框中,键入 execute sp_ReturnFileName。
    8.单击 Refresh,然后确认 Preview 框包含存储过程 sp_ReturnFileName 的结果。
    9.单击 OK,然后再次单击 OK。

    创建执行 SQL 任务
    ? 插入新的执行 SQL 任务。
    ? 命名新任务 DeleteIDA,然后对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
    ? 在 SQL statement 框中,键入 execute sp_DeleteIDA。
    ? 单击 Parse Query 确认该语法,单击 OK 关闭该消息,然后再次单击 OK。
    ? 插入新的执行 SQL 任务。
    ? 命名新任务 AppendTerms,然后对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
    ? 在 SQL statement 框中,键入 execute sp_AppendTerms。
    ? 单击 Parse Query 确认该语法,单击 OK 关闭该消息,然后再次单击 OK。
    ? 插入新的执行 SQL 任务。
    ? 命名新任务 UpdateSearchTermData,然后对于 Connection,选择 Microsoft OLE DB Provider for SQL Server。
    ? 在 SQL statement 框中,键入 execute sp_UpdateSearchTermData。
    ? 单击 Parse Query 确认该语法,单击 OK 关闭该消息,然后再次单击 OK。

    创建连接间的工作流
    1. 选择 Text File (Source) 连接。
    2.按下 Ctrl 键并保持不放,然后选择 Microsoft OLE DB Provider for SQL Server。
    3.右键单击 Transform Data Task 以选择它,然后双击从 Text File (Source) 连接指向 Microsoft OLE DB Provider for SQL Server 连接的箭头。
    4.在 Source 选项卡上,命名任务 Copy Log。
    5.在 Destination 选项卡上,选择 tblLogItems 表。
    6.在 Transformations 选项卡上,确认存在箭头(如果没有,按照前后顺序,将文本文件中的字段映射到表中),然后单击 OK。

    创建工作流的其余部分
    1. 选择 ReturnFileName 任务。
    2. 按下 Ctrl 键并保持不放,然后选择 Text File (Source) 连接。
    3. 在 Workflow 菜单上,单击 On Success。
    4. 选择 Microsoft OLE DB Provider for SQL Server 连接。
    5.按下 Ctrl 键并保持不放,然后选择 DeleteIDA 任务。
    6.在 Workflow 菜单上,选择 On Success。
    7.选择 DeleteIDA 任务。
    8.按下 Ctrl 键并保持不放,然后选择 AppendTerms 任务。
    9.在 Workflow 菜单上,单击 On Success。
    10.选择 AppendTerms 任务。
    11.按下 Ctrl 键并保持不放,然后选择 UpdateSearchTermData 任务。
    12.在 Workflow 菜单上,单击 On Success。

    重置动态属性任务
    1. 右键单击 ReturnFileName 任务,选择 Properties,然后单击 Edit。
    2.对于 Text File (Source) 连接,突出显示 DataSource,然后单击 Set。
    3.单击 Refresh。
    4.单击 OK,然后再次单击 OK。

    保存 DTS 软件包并安排其每天运行一次
    1. 在 Package 菜单上,单击 Save As,然后保存带有描述性名称的 DTS 软件包。
    2.关闭 DTS 软件包设计器。
    3.在 Data Transformation Services 文件夹中,右键单击该 DTS 软件包,然后选择 Schedule Package。
    4.在 Edit Recurring Job Schedule 对话框中,选择 Daily,然后将频率设置为每天进行一次,即某个服务器不忙的时间。

    注 DTS 软件包导入前一天的 IIS 日志文件。


    创建 Web 部件来显示搜索数据

    在将必要的数据存储在 SQL 表并且 DTS 软件包至少执行一次后,您可以使用 Web 部件来查询数据,可以筛选数据并显示在 SharePoint Portal Server 计算机上执行的搜索摘要。现在,我们研究一下如何创建一个允许您以下面三种方式来查看数据的用户界面:

    ? 某个日期范围内的数据。
    ? 某个日期的数据。
    ? 某个用户的数据。

    注 不需要创建自定义的 Web 部件,您可以使用 SharePoint 数据视图 Web 部件,并且可以在 Microsoft Office FrontPage 2003 中对它进行配置以查看 SQL 表中的数据。有关数据视图 Web 部件的详细信息,请参阅 Microsoft Office FrontPage 2003 帮助。

    创建基本的 Web 部件 

    开始创建 Web 部件来显示搜索数据。该过程并未在本文中进行阐述,但是您可以按照 MSDN 文章 Creating a Basic Web Part 中的步骤完成。要获得该过程的快速入门,可以下载 Web Part Templates for Visual Studio .NET (WebPartTemplatesforVSNetSample2.exe)。完成后,可以添加一个对 System.Data.dll 的引用。

    修改默认代码文件以添加演示代码
    可以对基本 Web 部件的默认代码进行基本的添加和修改,以允许它显示 tblSearchTerms 表中的数据,通过下列操作完成上述任务:

    ? 添加命名空间指令。
    ? 定义类级别的变量。
    ? 定义子控件。
    ? 编写单击事件的代码以获得基于用户选择的搜索统计。
    ? 修改 RenderWebPart 方法。

    添加命名空间指令
    1. 在 Visual Studio .NET 中,打开解决方案资源管理器,然后双击 WebPart1.cs。
    2. 在代码的顶端附近,将以下命名空间指令添加到 Web 部件。
    3.using Microsoft.SharePoint.Utilities;
    4.using Microsoft.SharePoint.WebPartPages;
    5.using Microsoft.SharePoint.WebControls;
    6.using System.Web.UI.HtmlControls;
    7.using System.Data;
    8.using System.Data.OleDb;
    9.using System.Data.SqlClient;

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章