概要

在 Microsoft Office InfoPath 2003中,不能直接将表单中的域绑定到辅助数据源中的数据。但是,本文介绍如何以编程方式转换辅助数据源中的数据,然后在运行时将转换后的数据传送到主数据源中的域。



设计表单

1. 在 InfoPath 中启动一个新的空白表单。
2. 切换到“数据源”任务窗格。要向您的表单中添加域,请按照下列步骤操作:
a. 右键单击“myFields”组,然后单击“属性”。

此时出现“域或组属性”对话框。
b. 将组名称更改为 myBookstore,然后单击“确定”。
c. 右键单击“myBookstore”组,然后单击“添加”。

此时出现“添加域或组”对话框。
d. 键入名称 myBooks,从类型列表中选择“组”,然后单击“确定”。
e. 右键单击“myBooks”组,然后单击“添加”。

此时出现“添加域或组”对话框。
f. 键入名称 myBook,从类型列表中选择“组”,选择“重复”,然后单击“确定”。
g. 右键单击“myBook”组,然后单击“添加”。

此时出现“添加域或组”对话框。
h. 键入名称 myTitle,然后单击“确定”。
i. 重复步骤 g 和步骤 h,以创建一个名为 myISBN 的域和一个名为 myGenre 的域。
3. 将“myBook”组从“数据源”任务窗格移到您的表单中,然后单击“重复表”。
4. 在“数据源”任务窗格中,右键单击“myBookstore”组,然后单击“属性”。

此时出现“域或组属性”对话框。
5. 选择“明细数据”选项卡,然后记下名称空间。

名称空间将采用以下形式:

http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-09-30T04:46:51

单击“取消”关闭该对话框。
6. 将您的表单另存为 Bookstore.xsn。


创建 XML 文件和 XML 样式表

使用 XML 编辑器或文本编辑器(例如记事本)创建 XMLFile.xml 和 XSLTFile.xslt,如下所示:

XMLFile.xml
<?xml version='1.0' ?>
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
</book>
</bookstore>

XSLTFile.xslt
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-09-30T04:46:51">
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="bookstore">
<my:myBooks>
<xsl:apply-templates select="book" />
</my:myBooks>
</xsl:template>
<xsl:template match="book">
<my:myBook>
<my:myTitle>
<xsl:value-of select="title" />
</my:myTitle>
<my:myISBN>
<xsl:value-of select="@ISBN" />
</my:myISBN>
<my:myGenre>
<xsl:value-of select="@genre" />
</my:myGenre>
</my:myBook>
</xsl:template>
</xsl:stylesheet>
注意:更改 XSLTFile.xslt 中的 my 名称空间以与您在上一节的步骤 5 中创建的名称空间相匹配。



向表单中添加脚本以执行转换,然后将数据传送到表单域

1. 返回 InfoPath。

Bookstore.xsn 必须以设计模式打开。
2. 要将 XMLFile.xml 添加为您的表单的辅助数据源,请按照下列步骤操作:
a. 在“工具”菜单上,单击“辅助数据源”。

此时出现“辅助数据源”对话框。
b.

此时出现“数据源设置向导”。
c. 选择“XML 数据文件”作为数据源类型,然后单击“下一步”。
d. 在“打开”对话框中,找到 XMLFile.xml,然后单击“打开”。单击“下一步”。
e. 单击“完成”以完成“数据源设置向导”。如果提示您是否将该文件添加到您的表单中,请单击“否”。
f. 单击“关闭”以关闭“辅助数据源”对话框。
3. 要将 XSLTFile.xslt 添加为您的表单的辅助数据源,请按照下列步骤操作:
a. 在“工具”菜单上,单击“资源管理器”。

此时出现“资源管理器”对话框。
b. 单击“添加”,然后添加 XSLTFile.xslt。
c. 单击“确定”关闭“资源管理器”对话框。
d. 在“工具”菜单上,单击“辅助数据源”。

此时出现“辅助数据源”对话框。
e. 单击“添加”。

此时出现“数据源设置向导”。
f. 选择“XML 数据文件”作为数据源类型,然后单击“下一步”。
g. 单击“资源管理器”。在“资源管理器”对话框中,选择 XSLTFile.xslt,然后单击“确定”。单击“下一步”。
h. 单击“完成”以完成“数据源设置向导”。
i. 单击“关闭”以关闭“辅助数据源”对话框。
4. 在“工具”菜单上,指向“脚本”,然后单击“加载事件时”。

Microsoft 脚本编辑器将启动。
5. 将下面的代码添加到 XDocument::OnLoad 事件处理程序中:
//Update the data in the secondary data source, and then
//get a reference to the DOM of the secondary data source.
XDocument.DataObjects.Item("XMLFile").Query();
var XMLFileDOM = XDocument.GetDOM("XMLFile");

//Get the transform that is stored as a secondary data source.
var XSLTFileDOM = XDocument.GetDOM("XSLTFile");

//Transform XMLFile by using the style sheet that is named XSLTFile.
var TransformedDOM = new ActiveXObject("MSXML2.DomDocument.5.0");
TransformedDOM.async = false;
TransformedDOM.validateOnParse = true;
TransformedDOM.loadXML( XMLFileDOM.transformNode(XSLTFileDOM));

//Get a reference to the node in the primary document where you want to insert
//the secondary data.
var oBookstore = XDocument.DOM.selectSingleNode( "/my:myBookstore" );
var oBooks_Dest = oBookstore.selectSingleNode("my:myBooks");
var oBooks_Src = TransformedDOM.documentElement;

//Replace the node in the primary document with the data from the
//secondary data source.
oBookstore.replaceChild( oBooks_Src, oBooks_Dest );
6. 保存您对脚本所做的更改,然后关闭脚本编辑器。

使用 XML 转换测试表单

1. 在“文件”菜单上,指向“预览表单”,然后单击“默认”。
2. 当表单以预览模式打开时,XMLFile.xml 中的数据将使用样式表进行转换,然后表单的内容将被替换为转换结果。InfoPath 预览窗口的输出显示如下:

The Autobiography of Benjamin Franklin 1-861003-11-0 autobiography
The Confidence Man 0-201-63361-2 novel
The Gorgias 1-861001-57-6 philosophy

转自:http://support.microsoft.com/kb/827005/zh-cn

posted on 2007-05-30 10:47  Dragon-China  阅读(713)  评论(0编辑  收藏  举报