首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

8.3  InfoPath表单容器XmlFormView

8.3.1   XmlFormView表单容器简介

OSS 2007默认的表单呈现页面是FormServer.aspx页面,它位于layouts目录下。我们用文本编辑器打开这个文件,可以发现其实这个页面包含的就是一个XmlFormView控件。XmlFormView是一个InfoPath表单容器控件。当我们要在自定义页面中嵌入InfoPath表单的时候需要用到该控件。该控件属于Microsoft.Office.InfoPath.Server.Controls名称空间,其所在的程序集Microsoft.Office.InfoPath.Server.dll可以在安装了InfoPath Froms Servcies的服务器的C:\Program Files\Microsoft Office Servers\12.0\Bin目录下找到。

XMLFormView不仅仅是一个普通的ASP.NET 2.0的Web控件,它同时还继承自System.Web.UI.WebControls.WebParts.WebPart类,是一个ASP.NET 2.0的Web Part。所以在MOSS中注册一下XmlFormView Web Part,就可以在MOSS的Web部件页中直接使用它。接下来我们将分别介绍XmlFormView作为Web Part和普通Web控件的使用方法。

8.3.2   XmlFormView Web Part的使用

在使用XmlFormView Web Part之前,我们首先要部署这个Web Part。因为InfoPath Forms Services是部署在前端服务器上的一个服务器场层次的服务,所有Web应用程序都可以访问,所以我们把这个Web Part直接部署在GAC中方便让所有网站都可以使用这个Web Part。(当然单独部署某个Web应用程序IIS对应目录的bin目录也是可以的,这里不做介绍)。

首先,我们在前面提到的路径中找到Microsoft.Office.InfoPath.Server.dll,把它拖到GAC(通常是C:\WINDOWS\assembly)中(见图8-40)。

XmlFormView part1

图8-40

接着,在Web应用程序对应的IIS目录下的Web.config文件的SafeControls节中加入:

<SafeControl Assembly="Microsoft.Office.InfoPath.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.Office.InfoPath.Server.Controls" TypeName= "XmlFormView" Safe="True" />注册XmlFormView Web Part。

然后,到网站集的Web部件库页面,点击工具栏的“新建”进入新建Web部件页面,选择导入Microsoft.Office.InfoPath.Server.Controls.XmlFormView部件之后,即可使用。

一个Web部件也只能包含一个XmlFormView Web Part,该Web Part包含以下自定义属性(见表8-1)。

表8-1

类别

属性

说明

功能

ShowHeader

是否显示XmlFormView的顶部工具条

ShowFooter

是否显示XmlFormView的底部工具条

EditingStatus

设置编辑状态,包括Init、Closed、Editing 3个选项

Options

可设置参数,支持DisableSave参数设置,设置是否显示保存按钮

数据绑定

XsnLocation

表单模板所在的地址

形如:http://localhost/DocLib1/Forms/template.xsn

XmlLocation

要装载的表单文件的地址

形如:http://localhost/DocLib1

SaveLocation

填写的表单XML文件的存储地址

形如:http:// localhost /DocLib1/test.xml

在页面上放置一个XmlFormView Web Part载入的表单可以和Web部件页很好地整合在一起(见图8-41)。

XmlFormView part2

图8-41

8.3.3   XmlFormView控件实战:在自定义Web页面中嵌入InfoPath表单

XmlFormView控件的使用方法和一般的ASP.NET 2.0的控件一样。XmlFormView的主要属性和事件如表8-2所示。

表8-2

属性

EditingStatus

设置控件显示表单的方式,有3种方式可选。

Init:表单不显示

Editing:表单显示,并可以使用

Closed:表单关闭,显示给用户“表单已关闭”提示信息

Options

参数,支持设置DisableSave,设置保存按钮可见性

ShowHeader

控件上端工具条显示状态

ShowFooter

控件底部工具条显示状态

SaveLocation

保存表单文件的地址

XmlLocation

载入的表单文件的地址

XsnLocation

表单模板的地址

XmlForm

代表当前表单的数据。在XmlFormView中,我们可以和控件装载的表单进行数据交互,利用它的事件我们可以把页面Url的参数或者自定义页面控件的值传递给表单,也可以把表单内的值取出来传递给页面其他控件。但只有在XmlFormView的以下事件中才能访问XmlForm属性:Initialize、NotifyHost、SubmitToHost和Close

事件

Close

表单关闭事件

Initialize

表单初始化事件

NotifyHost

表单向宿主环境进行数据交互的事件,一般是在表单中的按钮调用NotifyHost方法的时候会触发该事件

SubmitToHost

向宿主环境提交表单的事件

更多信息可访问:http://msdn2.microsoft.com/en-us/library/ms772268.aspx

接下来,我们将进行XmlFormView的实战部分,在实际的示例中介绍这个控件的使用方法。实战示例的表单模板将在前面用到的“员工信息”搜集表单模板的基础上,添加一个“提交”按钮,用以把填写好的表单数据提交到文档库中。我们在设计模式下打开“员工信息”表单模板,添加一个按钮,双击显示按钮属性,在属性页中,把操作设置为“提交”。点击“提交选项”,在提交选项设置窗口中,选择将表单提交到“SharePoint文档库”。再点“添加”按钮,添加一个提交连接(见图8-42)。

xmlview02

图8-42

设置提交连接的时候,提交文档地址库设置为http://localhost/DocLib1(一个名为“员工信息”的文档库),默认存储的文件名使用表单中的Name域值,并设置覆盖已存在的文档(见图8-43)。

xmlview03

图8-43

根据以上步骤添加完“提交”按钮以后,把表单发布到MOSS网站中,最后我们得到了表单模板相关的几个地址:

表单模板地址(XsnLocation):http://localhost/DocLib1/Forms/template.xsn

表单文件存储位置(SaveLocation):http://localhost/DocLib1/

表单文件地址(XmlLocation):http://localhost/DocLib1/[Name].xml

在实战中,我们要实现的自定义页面效果如图8-44所示。

xmlview10

图8-44

该Web程序从文档库中取出已有的所有员工信息,加载到所有员工列表中。点击某个员工,在右边的XmlFormView中加载员工详细信息。点击“新建员工信息”,把XmlFormView中信息清空。点击“提交”,把增加的员工信息提交到文档库。“刷新”按钮重新加载员工列表。

(1)在Visual Studio新建一个WebSite,名称“XmlFormView”,添加对Microsof.SharePoint.dll和Microsoft.Office.InfoPath.Server.dll的引用,设计如图8-45所示界面。并设置XmlFormView控件的EditingStatus为Editing,ShowFooter和ShowHeader均设置为False。

xmlview11

图8-45

Visual Studio要安装在InfoPath Forms Services所在的机器上。XmlFormView控件如果没有出现在工具箱中,可以在工具箱窗格上右键选择“选择项”,弹出“选择工具箱项”窗口(见图8-46)。

xmlview12

图8-46

如果在该窗口种仍未找到,则单击“浏览”定位到C:\Program Files\Microsoft Office Servers\12.0\Bin\Microsoft.Office.InfoPath.Server.dll,加载进来即可。

(2)给设计的界面编写响应代码

新建一个刷新员工列表lbstuffs(ListBox)的函数:

private void RefreshList()

{

    lbstuffs.Items.Clear();

    SPSite mysite = new SPSite("http://localhost");

    SPWeb myweb = mysite.RootWeb;

    SPList StuffList = myweb.Lists["员工信息"];

    foreach (SPListItem StuffItem in StuffList.Items)

    {

        lbstuffs.Items.Add(new ListItem(StuffItem.Title, StuffItem.Url));

    }

    lbstuffs.SelectedIndex = 0;

}

给Page_Load添加如下代码:

if (!Page.IsPostBack)

{

    RefreshList();

}

给butnew_Click添加如下相应代码:

//XFVInfo为添加的XmlFormView的ID

//清空载入的表单文件

XFVInfo.XmlLocation = "";

//设置加载的表单模板

XFVInfo.XsnLocation = "http://localhost/DocLib1/Forms/template.xsn";

给lbstuffs_SelectedIndexChanged添加如下代码:

//设置加载的表单文件为选中的员工对应的信息xml文件

XFVInfo.XsnLocation = "";

XFVInfo.XmlLocation = "http://localhost/" + lbstuffs.SelectedItem.Value;

给butrefresh_Click添加如下代码:

RefreshList();

(3)在http://localhost网站对应的Web应用程序对应的IIS目录下,本例中为C:\Inetpub\wwwroot\wss\VirtualDirectories\80,新建一个文件夹XmlFormView,打开IIS管理器(见图8-47)。

xmlview13

图8-47

右键单击XmlFormView,选择“属性”,弹出属性窗口(见图8-48)。

xmlview14

图8-48

创建应用程序,选择与所在的Web应用程序相同的应用程序池。

(4)返回Visual Studio,选择“生成”菜单的“发布网站”菜单项(见图8-49)。

xmlview15

图8-49

选择发布到C:\Inetpub\wwwroot\wss\VirtualDirectories\80\XmlFormView目录下,点击“确定”按钮。

(5)发布完成,打开浏览器,访问http://localhost/XmlFormView/default.aspx(见图8-50)。

xmlview10

图8-50

现在,我们就在一个普通的ASP.NET页面中,放入一个使用InfoPath Forms Services生成的HTML格式的电子表单。