登录  |  注册
热点推荐
ZOL首页 > 网络设备 > 产业 > 提供SQL报表为SharePoint增强团队协作

提供SQL报表为SharePoint增强团队协作


互联网 【转载】 2009年12月01日 19:36 评论

  假设您所在的公司有一个关键的数据库应用程序,它不断地记录新的传入信息。该数据库可能存储定单信息、销售联系人信息,或者任何其他类型的数据。现在假设,您公司内的一组员工根据有关该数据的报表(也许是月结帐单的趋势分析)进行关键的业务决策。这些报表根据定时任务创建:每日、每周或每月。听起来很熟悉吧?您的公司可能已经拥有了类似系统。差不多任何类型的公司都有可能这样。

  Microsoft SQL Server Reporting Services 允许用户订阅报表并将报表自动传递给用户,从而简化了这种情况。尽管这是一个有用的功能,但它只解决了更大目标的一个方面。用户在收到报表后,很可能希望不仅限于通览数据。也许他们需要为员工创建并分配任务,或者他们可能希望允许小组内的成员对数据进行建设性的讨论,或者他们可能只需要将数据合并到一个 Microsoft PowerPoint? 演示文稿中。

  问题是,系统通过电子邮件或将报表粘贴到公司内部的文件共享(这是订阅的两种现成的传递方法),从而将报表的副本传递给每个员工。这两种情况都不支持有关组内报表的协作。一个更有趣的解决方案是将报表传递给 Microsoft SharePoint? 文档库,其中的讨论和协作功能都能很容易地与报表一起使用。本文详细介绍如何创建一个自定义的 SQL Server Reporting Services 传递扩展,它会将报表存储在一个 Windows? SharePoint Services (WSS) 文档库中。

  体系结构

  在我所描述的情况中,报表的时间很重要。不管用户何时查看报表,报表必须对所有用户都是一样的。因此,我不能依赖于这样的模型:每个用户在他们碰巧访问 SharePoint 站点时按需运行报表。(使用 SQL Server 2000 Reporting Services Service Pack 2 中新增的报表查看器 Web 部件可以很轻松地实现按需解决方案,但是 SharePoint 的协作功能并不适用。)相反,自定义传递扩展必须按计划的时间运行报表,并且以完全自动的方式传递它们。由于 SharePoint 能够存储文档,因此,我的传递扩展会将报表呈现为一个 PDF 文件,并将其存储在指定的文档库中。

  那么,文件生成后如何存储到文档库中呢?解决方案包括一个自定义的 SharePoint Web 服务,它提供一个接口来接收报表文件,然后通过 WSS 对象模型将文件存储在适当的库中。使用自定义的 Web 服务可以增加灵活性,这样您除了存储文件还可以包括其他任务。

  为了方便在请求中包含二进制文件,Web 服务将使用带有 WS-Attachment 功能的 Web Service Enhancements (WSE) 进行直接 Internet 消息封装(Direct Internet Message Encapsulation,DIME)。我之所以选择该方法,而不选择 XML 消息中二进制数据的 base64 编码,是因为在 Unicode 字符格式中,base64 编码方法增加了请求的大小。通过 DIME 发送附件会将文件移到 SOAP 信封外。图 1 以较高级别显示该体系结构。

  该体系结构的优点在于,最终结果只是文档库中的一个文件。这样,用户就可以使用 SharePoint 必须提供的所有常规功能,包括协作和 SharePoint 警报。如果有人需要确认某个报表是有效的并在上面签字,然后其他用户才能够查看该报表,她可以打开内容审批。如果报表的内容必须是可搜索的,则只需安装一个 PDF IFilter。

  构建 Web 服务

  自定义的 SharePoint Web 服务只有一个方法,就是 UploadDocument。该方法只接受带有一个文件附件的 SOAP Web 服务请求。为了接收来自客户端的一组参数,Web 服务公开了一个 DocInfo 类,该类是专门为提供灵活性以及版本复原而设计的。

  至少,该 Web 服务必须接收两个字符串:文件名和库名。但是,解决方案必须保持灵活性,以便将来能够支持其他参数。事实上,该 Web 服务很可能为您的 SharePoint 实现增加功能,而不仅仅是存储报表。有关构建一个类以使其序列化开放的详细信息,请参见 Doug Purdy(Microsoft 的一位项目经理)在 MSDN? TV 节目中有关该主题的讨论"Loosely Coupled Web Services"。

  DocInfo 类中的元素和属性数组允许我将来添加字段,而不破坏向后兼容性。同时,版本标识符使 Web 服务方法能够发现在发出请求的客户端的级别,以便它可以作出相应的反应。

  一旦 UploadDocument Web 服务方法已经确认该请求有一个附件,它就会使用 BinaryReader 将附件读入字节数组中。在示例代码(下载代码中提供 C# 和 Visual Basic 两种版本)中,您将了解 RequestSoapContext 的使用方法。该类提供对 Web 服务的特定于 WSE 的扩展的访问。通过其 Attachments 集合,您可以访问传递扩展正发送的实际 PDF 报表文件。收到附带的报表后,UploadDocument 方法继续使用 SharePoint 对象模型进行处理,以确定客户端针对的是哪个"web": Dim site As SPWeb = SPControl.GetContextWeb(Me.Context)

  在该上下文中,"web"是一个通用的 SharePoint 对象模型术语。它可以指 Windows SharePoint Services (WSS) 站点或 SharePoint Portal Server (SPS) 区域。正确的 Web 是通过 SharePoint 上下文对象确定的,它基于客户用来发出请求的 URL。SharePoint 站点的 Web 服务以下述方式部署:可以通过任何 web 的 vti_bin 文件夹引用它们。要获得该功能,您必须确保部署 Web 服务的方式与部署现成服务的方式相同。我在本文的部署部分中详细介绍该主题。

  一旦 UploadDocument 方法确定在报表应该存储在哪个 web 中,GetFolder 方法将用于检索正确的文档库。然后,库使用给定的文件名将字节数组添加到其文件集合中: Dim folder As SPFolder = site.GetFolder(info.Folder)

  Dim file As SPFile = folder.Files.Add(info.FileName, fileData, True)

  该过程将报表保存到 SharePoint 文档库中。本调用中指定的 True 参数指明当前文件将覆盖任何具有相同名称的现有文件。如果用户启用了对 SharePoint 库的版本控制,则新文件实际上将更新现有的文件。如本文后面所述,传递扩展还可以选择将时间戳附加到文件名中。如果用户不希望启用库的版本控制,但还想保持全部的报表实例,这会很方便。

 
提示:试试“← →”可以实现快速翻页
1 2 下一页
本文导航
  • 第1页:体系结构
频道热词:工作站  云计算  服务器  
视觉焦点
企业网络产业热点
排行 文章标题
TOP10周热门无线上网卡排行榜
  • 热门
  • 新品
查看完整榜单>>