InfoPath 内置错误查找功能的局限及原因
 
InfoPath 内置的错误查找功能只能定位当前视图的错误, 并且一次只能定位一个.
 
这样看似匪夷所思的设计, 其实是因为InfoPath整体设计导致的. 首先, 这里所说的错误是针对数据而言的, 例如field1不能为空. 考虑以下情况:
 
1. field1在view1和view2中都有绑定的控件.
2. field1没有任何绑定的控件.
 
对于情况1, 从视图的角度来看, 应该有2个错误分别存在于view1和view2中; 以数据而言, 只有1个错误.
对于情况2, 从视图的角度来看, 没有错误; 以数据而言, 有1个错误.
 
很显然, 为了正确地判断错误信息, 应该从数据的角度来看待错误, InfoPath正是这样看待错误的. 因此, InfoPath的错误信息中并不保存视图信息, 这也导致"Go to Next Error"只能定位到当前视图上含有错误信息的控件.
 
扩展InfoPath错误查找功能
 
InfoPath内置查看功能的最大局限就在于无法跨视图定位含有错误的Field绑定的所有控件。为了扩展其功能,需要2个步骤:
 
1. 获取当前表单的所有错误字段。
2. 获取字段绑定的控件所在视图。
3. 切换到错误控件所在视图并选中该控件。
 
对于步骤1,可以使用Microsoft.Office.Interop.InfoPath.XDocument.Errors.
 
对于步骤2,首先要获取当前表单的模板(xsn)位置,可以使用
Microsoft.Office.Interop.InfoPath.XDocument.Solution.URI
. 其次解压xsn文件,再在*.xsl文件中查找错误字段。
 
对于步骤3,使用Microsoft.Office.Interop.InfoPath.XDocument.View.SwitchView 切换视图,并使用Microsoft.Office.Interop.InfoPath.XDocument.View.SelectText选中错误字段绑定的控件。
 
完成了以上3个步骤,扩展错误查找功能基本就完成了。
 
InfoPath 错误查看器 (InfoPath Error Viewer)
 
可以利用InfoPath Add-in的开发技术将错误查找功能集成到InfoPath中,这样,一个新的插件InfoPath Error Viewer就诞生了。
 
 
注意:安装时请右键-〉以管理员身份运行