0

gytnet

 3 years ago
source link: https://www.cnblogs.com/gytnet/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

2010年1月17日 #

InfoPath 表单调用 Web Service 在列表中查询数据(带参数)

场景: 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
  1. 首先在服务器上部署Codeplex下载的解决方案包(具体步骤就不写了), 此时服务器就有了一个可以调用的Proxy.asmx的Web Service.
  2. 在InfoPath模板设计中调用此Web Service
    image
     
    image

     
    webID是指要连接的网站ID(也可以不填)


    image
     
    image
  3. 设计的示例模板如下
    其中"查找ID” 是我们需要输入的参数, 使用主数据源, 重复表的数据则来自于查询返回的结果, 使用刚建立的来自于Web Service的数据源, “确定”按钮无实质意义, 目的只是让焦点从 "查找ID” 中移开, 让其规则生效.


    image
     
  4. 查找ID 的更新规则如下:
    image

     
    其中前两个规则对Web Service的两个参数进行设置, rowLimit 是返回的行数, 可按实际设置(最好不要设置成1). query 是查询参数, 是设置的重点, 使用CAML查询, 并调用表单中的 [查找ID] 字段作为参数变量, 公式中输出为字符串即可, 公式如下:


    image
     
    最后一个规则 [使用数据连接进行查询] 是对刚才输入的参数进行查询.
  5. 表单内不需要写任何代码, 设计好后发布到SharePoint表单库, 并设置为在浏览器中打开(具体步骤不写了)
  6. 在浏览器中打开表单并填写 [查找ID] 后点击 [确定] 就可以返回相应的值, 效果如下:
    image

     

    查询后的结果



    image

在实际的应用中, 可以使用此方法实行精确或模糊查询, 只要是CAML能使用的查询方法都行, 可以调用多个参数变量. 也可以实现多级联动的下拉列表查询, 且不用在表单中写代码, 功能还是很强大的, 性能比起在表单中写代码也要好.

posted @ 2010-01-17 15:29 gytnet 阅读(2208) 评论(3) 推荐(0) 编辑

2009年12月21日 #

SQL Server 数据存储与 NTFS 簇的大小

摘要:首先感谢微软发明的NTFS文件系统,确实是非常健壮的文件系统,功能强大。 簇是磁盘进行I/O读写时的最基本单位(就是NTFS中的分配单元)。 今天来说一下在SQL Server的数据存储中与NTFS簇大小有关的话题。NTFS在超过2GB的分区中,格式化时会默认使用4KB的簇,这基本上就成了现在大部分硬盘的簇大小。在簇不大于4KB时,可以使用碎片整理。 NTFS簇大小可以设置成从512B~64... 阅读全文

posted @ 2009-12-21 01:38 gytnet 阅读(3244) 评论(16) 推荐(0) 编辑

2009年12月16日 #

在Windows 7使用Windows资源管理器打开SharePoint文档库慢的解决方法

摘要:SharePoint 2007提供了一个非常好用的功能,就是直接使用Windows资源管理器打开文档库,大大方便了文档库的管理,其使用WebDAV进行连接,这在以前的版本中也可以这样使用,但用起来没那么方便。 这个功能以前在Windows XP的客户端使用时都很顺利,但却发现在Windows 7的浏览器中使用时变得异常缓慢,不但打开慢,连上传与下载文件也非常慢,在内网中速度也只有几十KB/S,实... 阅读全文

posted @ 2009-12-16 00:50 gytnet 阅读(2260) 评论(1) 推荐(0) 编辑

2009年11月11日 #

如何定制或修改Project Server 2007 项目工作环境模板

摘要:在Project Server 2007中,默认只有一个项目工作环境的模板,但我们可以开发定制或修改原有模板,以满足企业需求,本文就以修改原有模板成新模板为例来说明整个过程: 第一步:创建空白的项目工作环境网站(在管理中心) 安装好Project Server 2007以后,会多一个叫“Microsoft Office Project 工作环境”的模板   打开... 阅读全文

posted @ 2009-11-11 03:14 gytnet 阅读(1495) 评论(1) 推荐(0) 编辑

2009年9月11日 #

在Windows Server 2008 上安装 SharePoint 2007 报表服务集成插件

摘要:不能直接使用安装包进行安装,需要一些特殊的步骤。 环境: Windows Server 2008 SP1 x64 Reporting Services 2005 + SP3 x64 SharePoint Server 2007 + SP2 x64 SharePoint 2007 报表服务集成插件(2005 SP3版本, 要注意使用相应版本的插件)x64 步骤: 1- 首先安装 SSRS 200... 阅读全文

posted @ 2009-09-11 12:01 gytnet 阅读(602) 评论(0) 推荐(0) 编辑


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK