Background
 
InfoPath 是Microsoft出品的一个制作电子表单的工具,可能是因为当初没有想到会有这么多Developer会使用InfoPath (全拜SharePoint所赐),InfoPath中居然没有调试功能。试想一下,一个Button触发m个rule, 一个rule有n个action, 随着Form的业务逻辑增加,没有调试功能的缺陷被逐渐放大。一个Button会改变十几个Data Field的值,而这些变化没办法监测,只能在文档中记载,以至于文档成为了InfoPath Developer的调试工具。
 
好在InfoPath还可以添加托管代码,可以将过于复杂的业务逻辑写到托管代码中。但这样的坏处也不少:发布时需要Full Trust,会降低整个应用程序的效率等等。如果所有的业务逻辑都写成托管代码,InfoPath Form几乎就是个空壳了。
 
InfoPath Debugger
 
由于本人多次遇到“一个Button引发的血案”,所以下定决心制作一个能调试InfoPath Form的工具,于是有了InfoPath Debugger. 其实目前这个版本,叫做Monitor更好,因为除了监控之外,并没有让用户输入调试数据的地方。取这个名就当作是为以后做打算吧。
 
InfoPath Debugger 的界面相当简单,点击File->Open InfoPath Form, 选择需要Debug的Form就可以了。 这里就以InfoPath自带的Travel form做为例子。
 
Open
 
在Form的下方有一个Tab控件,Auto页监控一次操作后所有Fields的变化,Watch页监控你指定的Fields.
 
在 "Name:" text box 中输入 "Jim Ma",在Auto页中立刻显示该操作带来的变化。其中Path是变化的Field的XPath,可以方便在InfoPath中查找。不过InfoPath没有查找功能也是一个让人头疼的问题,我的另一个Tool --> InfoPathFormInsideViewer还在Beta阶段,专门针对InfoPath查找数据的问题,不久应该能发布。我说"应该"。。。
 
每次操作后,请点击"Clear"按钮清空记录。InfoPath Debugger不会自动清空上一次的记录。
 
接下来,点击Trip左上角的图标,选择insert,这次操作会导致多个Field变化,都罗列在Auto页中:
 
切换到Watch页。Watch页用于监控指定的Field,当操作导致指定的Field变化时,Watch页中对应的记录会变红。点击Watch页右下角的Add按钮,弹出选择Field对话框:
 
点击OK后,选择的记录会显示到Watch页中。当操作影响到监控的Field时,对应的记录会变红,如图:
 
右键可以选择Remove或Clear Change.
 
Conclusion
 
总的说来,我做这个工具是迫于无奈,因为InfoPath应该自带这项功能。