场景: SharePoint 2007 InfoPath Forms Services
读者: 适合对InfoPath表单设计有一定经验的朋友
在浏览器中使用InfoPath表单时, 经常要使用数据连接从数据源调用数据, 在浏览器中, 能使用参数查询(筛选)的就只有Web Service可以实现, 用参数查询数据库是要写代码了(如Dosboy翻译的 http://kb.cnblogs.com/a/1600492/ 谢谢!), 查询SharePoin的列表数据虽然可以直接使用, 但要实现筛选就比较困难, 在不写代码的情况下, 可以使用表单节控件的条件格式进行筛选, 但如果数据量大, 客户端浏览器的CPU占用就经常100%(客户端的AJAX代码), 返回数据量大, 也明显不是办法. SharePoint本身有Web Service, 但InfoPath数据连接不能直接调用(不知微软怎么想的!), 那只有写代码了(园子里有相关示例, 如: http://www.cnblogs.com/sean_zhang/archive/2009/07/23/1529436.html 谢谢!). 折腾了一番以后, 发现还是直接使用SharePoint本身的Web Service是比较好的办法, 返回数据量少, 查询性能也好, 为了更好地重用代码, 我比较建议在服务器上部署Web Service Proxy. 就以参数查询列表数据为例, CodePlex有个好的代码(http://spgestlistitemsproxy.codeplex.com/), 本文就以此为例.
核心代码(VB.NET)
Public Class GetListItems
<WebMethod()> _
Public Function GetListItems(ByVal listName As String, ByVal viewID As String, ByVal query As String, ByVal viewFields As String, ByVal rowLimit As String, ByVal queryOptions As String, ByVal webID As String) As XmlNode
Dim service As SharePointListsWS.Lists = GetWebServiceInstance(webID)
Dim queryElement As XmlNode = CreateNode("Query", query)
Dim viewFieldsElement As XmlNode = CreateNode("ViewFields", viewFields)
Dim queryOptionsElement As XmlNode = CreateNode("QueryOptions", queryOptions)
Return service.GetListItems(listName, viewID, queryElement, viewFieldsElement, rowLimit, queryOptionsElement, webID)
End Function
Private Function GetWebServiceInstance(ByVal webID As String) As SharePointListsWS.Lists
Dim service As New SharePointListsWS.Lists
service.Credentials = System.Net.CredentialCache.DefaultCredentials
service.Url = SPContext.Current.Web.Url + "/_vti_bin/Lists.asmx"
Return service
End Function
Private Function CreateNode(ByVal name As String, ByVal innerXml As String)
Dim document As New XmlDocument
Dim node As XmlNode = document.CreateElement(name)
node.InnerXml = innerXml
Return node
End Function
End Class
- 首先在服务器上部署Codeplex下载的解决方案包(具体步骤就不写了), 此时服务器就有了一个可以调用的Proxy.asmx的Web Service.
- 在InfoPath模板设计中调用此Web Service
webID是指要连接的网站ID(也可以不填)
- 设计的示例模板如下
其中"查找ID” 是我们需要输入的参数, 使用主数据源, 重复表的数据则来自于查询返回的结果, 使用刚建立的来自于Web Service的数据源, “确定”按钮无实质意义, 目的只是让焦点从 "查找ID” 中移开, 让其规则生效.
- 查找ID 的更新规则如下:
其中前两个规则对Web Service的两个参数进行设置, rowLimit 是返回的行数, 可按实际设置(最好不要设置成1). query 是查询参数, 是设置的重点, 使用CAML查询, 并调用表单中的 [查找ID] 字段作为参数变量, 公式中输出为字符串即可, 公式如下:
最后一个规则 [使用数据连接进行查询] 是对刚才输入的参数进行查询.
- 表单内不需要写任何代码, 设计好后发布到SharePoint表单库, 并设置为在浏览器中打开(具体步骤不写了)
- 在浏览器中打开表单并填写 [查找ID] 后点击 [确定] 就可以返回相应的值, 效果如下:
查询后的结果
在实际的应用中, 可以使用此方法实行精确或模糊查询, 只要是CAML能使用的查询方法都行, 可以调用多个参数变量. 也可以实现多级联动的下拉列表查询, 且不用在表单中写代码, 功能还是很强大的, 性能比起在表单中写代码也要好.
首先感谢微软发明的NTFS文件系统,确实是非常健壮的文件系统,功能强大。
簇是磁盘进行I/O读写时的最基本单位(就是NTFS中的分配单元)。
今天来说一下在SQL Server的数据存储中与NTFS簇大小有关的话题。NTFS在超过2GB的分区中,格式化时会默认使用4KB的簇,这基本上就成了现在大部分硬盘的簇大小。在簇不大于4KB时,可以使用碎片整理。
NTFS簇大小可以设置成从512B~64KB大小,当然必须在格式化时指定,否则就不可以更改了。簇太小,空间利用率高,但分区表较大,碎片多,性能较差;簇太大,空间利用率低,但碎片少,性能较好。于是4KB可谓是普遍的选择。
现在的硬盘,动则容量几百GB,空间似乎已经不再是问题。但磁盘的I/O一直是性能的瓶颈,为了提高磁盘读写速率,各位可谓是绞尽脑汁了。无论如何,硬盘只要选用了,改变它的物理设计似乎并不太可能,也不推荐这样做,于是就只能从其它的地方着手了,方法如用RAID陈列了、经常地整理碎片、用好的芯片、用好的数据线了等等,能用的都用了。
SQL Server服务器是对I/O要求高的应用,它的数据文件读写基本单位是页,每页的大小是8KB,连续的8个页组成一个区,也就是64KB的区,且一般数据文件都比较大,一般生产环境中,几GB以上是常见的。并且基本上不会有人在SQL Server的存储上用碎片整理了,因此我们可以将专用于SQL Server存储的磁盘分区格式化成为64KB的簇,这样在不浪费空间的前提下,又可以提高性能。
有没有风险?当然有了,在磁盘出现灾难时,丢的数据可能就会多一点,最少会丢64KB了,不过实践证明这种方案还是非常可行的,因为一般服务器的RAID陈列分块也是64KB,两个都是64KB,就无所谓了。
其它应用场景各位也可以参考,不对之处,欢迎批评。
SharePoint 2007提供了一个非常好用的功能,就是直接使用Windows资源管理器打开文档库,大大方便了文档库的管理,其使用WebDAV进行连接,这在以前的版本中也可以这样使用,但用起来没那么方便。
这个功能以前在Windows XP的客户端使用时都很顺利,但却发现在Windows 7的浏览器中使用时变得异常缓慢,不但打开慢,连上传与下载文件也非常慢,在内网中速度也只有几十KB/S,实在不能忍受。于是折腾了一番,最后发现了解决方法,但具体原因没去深究:
在IE-->Internet选项—>连接-->局域网设置 中,去掉“自动检测设置”选项即可,如图:
在Windows 7/VISTA中,可以使用这样的路径直接访问SharePoint文件夹 \\www.domain.com\davWWWroot\ ,其中关键是DavWWWroot不可缺少,代表WebDAV的根目录。
在Project Server 2007中,默认只有一个项目工作环境的模板,但我们可以开发定制或修改原有模板,以满足企业需求,本文就以修改原有模板成新模板为例来说明整个过程:
第一步:创建空白的项目工作环境网站(在管理中心)
- 安装好Project Server 2007以后,会多一个叫“Microsoft Office Project 工作环境”的模板
打开服务器场的管理中心(系统帐户登录),在其中创建一个子网站,使用这个模板
选中“使用独有权限”,其它不变, 点击"创建"
不用添加其它的用户或组, 使用默认的"系统帐户"即可,点击确定.
一个空白的项目工作环境就创建好了, 接下来就可以对它进行修改.
第二步: 修改创建好的网站
修改时需要注意:不能删除或修改“项目文档”“问题”“风险”“可交付结果”这几个库的的名称和结构,可以添加其它库类型的内容,可以修改网站或列表表现样式等等。在此示例中, 我把右边的WEBPART删除了。
第三步:将修改好的网站另存为模板
在“网站设置”里,选择“将网站另存为模板”
然后将模板从模板库导出到服务器的本地目录(如C:\)
第四步:在服务器场中注册模板
在服务器上,开始--》运行 输入 CMD 打开命令行窗口,先运行如下命令切换到STSADM的目录
cd %ProgramFiles%"\Common Files\Microsoft Shared\web server extensions\12\BIN"
再运行注册命令(根据实际情况修改命令行)
stsadm -o addtemplate -filename "c:\PJ_WS1.stp" -title "Project Workspaces 1"
然后输入IISRESET /NOFORCE 重启IIS即可生效
可使用 stsadm -o enumtemplates 检查服务器场中的模板
第五步:在PWA里应用自定义的模板
在PWA的 服务器设置--》项目工作环境设置 里面,选择需要的自定义模板即可。
不能直接使用安装包进行安装,需要一些特殊的步骤。
环境:
- Windows Server 2008 SP1 x64
- Reporting Services 2005 + SP3 x64
- SharePoint Server 2007 + SP2 x64
- SharePoint 2007 报表服务集成插件(2005 SP3版本, 要注意使用相应版本的插件)x64
步骤:
1- 首先安装 SSRS 2005 + SP3(假设已有现有的数据库)
2- 安装 MOSS2007 + SP2
3- 配置MOSS服务器场
4- 使用纯文件方式安装报表集成插件
a) 使用SharePointRS.msi SKIPCA=1 命令安装文件(SharePointRS.msi是安装文件包的名字)
b) 在“运行”里输入“%TEMP%%”导航到TEMP文件夹,找到其中的 “rsCustomAction.exe ”文件
c) 运行 rsCustomAction.exe /i 命令进行配置
5- 创建RS使用的IIS网站(非80端口),取消匿名访问,只用Windows验证。
6- 配置RS数据库
7- 设置WEB服务标识时会出错,需要手动更改RS配置文件的参数
a) C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\rsreportserver.config
b) 把 <WebServiceAccount>NORTHWIND\Administrator</WebServiceAccount> 的内容改成与WEB应用程序标识相同的帐户。
c) 检查配置向导,看有无错误。
d) 如果是改过名的机器,还要检查本地用户组中RS相关组的名字是否与机器名相同。
8- 在MOSS的管理中心配置MOSS与RS的集成
Technorati 标签:
sharepoint,
报表服务集成