我们可以使用InfoPath 2007创建表单,并使创建的表单既可以运行在InfoPath 2007客户端,也可以运行在网页浏览器中。在后者中,我们可以利用自定义操作来实现表单的参数传递,从而实现与业务数据目录(BDC)的集成。
不管我们是要传递参数到InfoPath 2007的表单文件还是浏览器,首先,我们都需要更新表单模板的Loading事件。Loading事件的LoadingEventArgs 类提供了一个InputParameters 属性。 该属性可以取得一个 IDictionary 对象,其中包含了输入参数(由启动表单文件的URL所指定)。
在本文中,将使用InfoPath 2007中带的“状态报告”示例来获取一个从浏览器的URL中传过来的参数。
Loading事件编程
现在,我们给表单代码文件添加一个 Loading 事件。在工具菜单中,点编程,点Loading事件。然后我们使用InputParameters属性返回的Idictionary对象的TryGetValue方法来获取一个参数值。接着,我们使用XPathNavigator对象的SetValue方法来设置表单文件中相应结点的值。在下面的例子中,通过URL传递过来的CustomerID参数来设置项目一栏的值。该值由数据源中的projectName结点决定。string customerId = string.Empty;
try
{
e.InputParameters.TryGetValue("CustomerID", out customerId);
}
catch (Exception ex)
{
customerId = ex.Message.ToString();
}
finally
{
MainDataSource.CreateNavigator().SelectSingleNode
("/my:myFields/my:projectName", NamespaceManager).SetValue(customerId);
}
}
注:我们可以在添加代码前选择所要使用的编程语言。点工具菜单,点表单选项,点编程一节,然后就可以设置表单模板代码语言列表的值了。
部署表单模板
在浏览器的情况下,表单模板使用托管代码。因此,管理员需要进行一个部署的过程。首先,我们要将表单模板发布到一个网络共享位置。
步骤:
- 在InfoPaht 2007中,点文件菜单下的发布。
- 在发布向导的第一页中,点具有或不具有InfoPath Forms Services 的SharePoint服务器,点下一步。
- 在接下来的发布向导页中,在请输入SharePoint或InfoPath Forms Services网站的位置一栏中输入SharePoint站点的URL。点下一步。
- 在接下来的发布向导页中,确保经管理员核准的表单模板选项被选中,点下一步。
- 在接下来的发布向导页中,点浏览,导航到一个网络共享位置,输入StatusReport作为文件名,点保存。点下一步。
- 在接下来的发布向导页中,根据需要指定要发布的栏,点下一步。
- 在接下来的发布向导页中,点发布。
- 在接下来的发布向导页中,点关闭。
表单模板发布到网络共享位置后,服务器管理员就可以上传表单模板到InfoPath表单服务并在特定的WSSv3站点集上激活该表单模板了。
- 进入SharePoint 3.0管理中心。
- 在管理中心页面中,点应用程序管理标签。
- 在InfoPath Forms Services一节中,点管理表单模板。
- 在管理表单模板页面中,点上载表单模板。
- 点浏览,导航到刚刚发布到网络共享位置中的StatusReport.xsn,双击它。
- 点上载,确定。
- 等待上载完成后(状态从正在安装转为就绪),在StatusReport.xsn上的菜单中,点激活到网站集。
- 根据需要更改激活位置一节中的网站集下拉列表的值并点击确定。
创建自定义业务数据目录操作
我们必须更新BDC元数据文件,以便包含一个自定义操作。本节中我们将使用MSDN Visual系列中前面章节创建的文件。下面的示例添加了一个自定义操作到已存在的Customer实体(在</Entity>结束标记前)来在浏览器中启动一个状态报告表单并传递参数CustomerID。
注:您需要替换URL属性中的URL_to_WebApplication为实际Web应用程序的URL。
<Action Name="Status Report" Position="1" IsOpenedInNewWindow="true" Url=
"URL_to_WebApplication/_layouts/formserver.aspx?xsnlocation=
/formservertemplates/statusreport.xsn&
openin=browser&CustomerID={0}">
<ActionParameters>
<ActionParameter Name="customerID" Index="0"/>
</ActionParameters>
</Action>
</Actions>
注:请确保在保存并上传元数据文件到BDC共享服务前已经提升了LobSystem元素的Version属性值。
上传元数据文件到BDC共享服务
在元数据文件更新完成后,打开管理中心,点左侧导航栏中的共享服务(通常名为SharedServices1)。在BDC一节中,点导入应用程序定义。点浏览,找到刚刚修改完成的元数据文件,双击。其他的应用程序定义项都用默认值就好,点导入。
添加业务数据列表部件并调用Status Report操作
在我们的SharePoint站点中添加业务数据列表部件,并与我们定义的Customer实体相关联。OK,现在我们就可以点击Customer名称上下列列表中的Status Report项了。
图1. 调用 Status Report 操作
综述
在InfoPath 2007中,我们可以构建表单来接收来自命令行或浏览器URL的参数。在后者中,我们可以定义自定义操作传递参数给一个浏览器中的表单文件从而实现与业务数据目录的整合。为此,我们需要做下面几件事:
* 添加自定义代码到表单模板的Loading事件,通过InputParameters属性返回Idictionary,并利用其TryGetValue方法获取参数值。当确实得到参数值后,我们可以使用XpathNavigator对象的SetValue方法更新表单数据源中的某个结点值。
* 上载表单模板到InfoPath Forms Services并激活到SharePoint网站集。使用InfoPath 发布向导来保存表单模板到一个网络共享位置。然后,服务器管理员在管理中心里进行上载和激活操作。
* 添加Action元素到业务数据目录元数据文件来指向浏览器表单的URL并传递参数。记住,在将新的应用程序定义文件导入到管理中心里之前,必须先提升LobSystem元素的版本号。
(至此,本MSDN Visual系列已全部为大家呈现完了。在此对长期关注这里的朋友们表示感谢,多谢大家的支持)
查看视频