在InfoPath Forms Services中实现联动下拉列表框(一)

来源:互联网 发布:js 除法 编辑:程序博客网 时间:2024/06/18 06:19
MS Office InfoPath 2007是一整套创建收集和共享信息的动态表单工具,它可以创建功能丰富的动态表单,供团队和组织收集、共享、重复使用和管理信息。InfoPath Forms Services是对InfoPath作的Web扩展,允许用户使用 Web 浏览器填写InfoPath表单,用户不需要在其计算机上安装 InfoPath 便可填写 InfoPath 表单,也不需要额外从 Web 上下载任何内容。这为开发纯B/S结构的应用提供了良好的平台。但是,在浏览器中填写表单的用户所能使用的功能集并不完全,不能实现InfoPath客户端的所有功能。也就是说,InfoPath Forms Services 不能兼容InfoPath客户端部分功能。

在表单中实现上下联动的下拉列表框能提供非常好的用户体验,这个功能在InfoPath客户端可以说是开箱即用的功能。在InfoPath客户端通过对控件数据源进行“筛选数据”就可以实现数据联动功能。然而,InfoPath Forms Services不支持“筛选数据”功能,不能按照InfoPath客户端那样实现数据联动。在InfoPath Forms Services中究竟可否实现数据联动呢?答案是肯定的,只不过方法稍微复杂一些。本文介绍第一种实现方法——“Web Service+规则”方法。后续文章会介绍VSTA编程方法以及在重复表中实现联动的下拉列表框的方法。

Microsoft Office SharePoint Server2007(MOSS2007)企业版包含了InfoPath Forms Services,以下操作在MOSS2007企业版+IE6.0环境下测试通过。
  

通过“Web Service+规则”实现联动下拉列表框

用InfoPath设计表单时,可以作为下拉列表框的外部数据源有四种,即XML文档,MS SQL Server 数据库,Web Service和SharePoint列表。在这四种数据源只有Web Service支持参数查询,所以本例中我们选择Web Service作为联动的下级下拉列表框的数据源。我们的思路是这样的:表单上有两个下拉列表框,在上级下拉列表框的属性中设定规则,当上级下拉列表框的值改变时设置下级下拉列表框数据源的查询参数,然后重新检索数据,这样就刷新了下拉列表框的选项内容。

下面我们详细说明实现过程。
  

第一步,准备Web Service。

首先,我们需要准备一个演示用的Web Service,这个Web Service有一个操作GetCitiesByProvince,通过传入参数——省的名称,可返回该省城市名称的列表。具体如何创建Web Service这里不再赘述,下面是代码。这段代码只作为演示用,不具实际意义,实际应用中应该从数据库里查询数据。
  1. <%@ WebService Language="C#" Class="ddlbws.ddlbws" %>
  2. using System;
  3. using System.Data;
  4. using System.Web;
  5. using System.Collections;
  6. using System.Web.Services;
  7. using System.Web.Services.Protocols;
  8. using System.ComponentModel;
  9. using System.Collections.Generic;

  10. namespace ddlbws
  11. {
  12.     [WebService(Namespace = "http://tempuri.org/")]
  13.     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

  14.     public class ddlbws : System.Web.Services.WebService
  15.     {
  16.         [WebMethod]
  17.         public string[] GetCitiesByProvince(string province)
  18.         {
  19.             List<string> items = new List<string>(4);
  20.             if (province.Equals("四川"))
  21.             {
  22.                 items.Add("德元");
  23.                 items.Add("成都");
  24.                 items.Add("广元");
  25.                 items.Add("绵阳");
  26.             }
  27.             else if (province.Equals("新 疆"))//禁用词,中间加了空格,使用代码时注意去掉空格
  28.             {
  29.                 items.Add("乌鲁木齐");
  30.                 items.Add("石河子");
  31.                 items.Add("哈密");
  32.                 items.Add("阿尔泰");
  33.             }
  34.             else 
  35.             {
  36.                 items.Add("No data yet.");
  37.             }
  38.             return items.ToArray();
  39.         }
  40.     }
  41. }
复制代码
将以上代码保存为文件ddlbws.asmx,放到SharePoint网站的_Layouts的虚拟目录,缺省物理路径为“c:\Program Files"Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS”。至于为什么放到这个目录中,我们在这里只作简要说明,有兴趣的朋友可以在网上搜索SharePoint中自定义Web Service的相关文章。一般认为,将Web Service文件放到_Layouts这个目录操作起来最简单,而且在InfoPath Forms Services中调用方便,不会有安全和信任方面的问题。

部署完ddlbws.asmx这个文件后可以试着在IE中访问该Web Service,观察是否部署成功,地址为:http://< SharePoint网站地址>/_layouts/ddlbws.asmx。如果部署成功,应该出现该Web Service的说明网页,如下图。