最近开发一个小型的考勤系统,InfoPath2007 表单都快做完了,于是拿到同事那里打算测一下,在同事的机器上打开InfoPath2007的xml文件的时候报了一个错,说找不到form template,郁闷!回想起来,之前使用基于网络路径的方式部署,但选择了一个本地路径,所以当这些xml文件在其它机器上打开时,InfoPath会试图去寻找在我机器上的那个路径,找得到才怪!
InfoPath2007生成的xml文件其实是标准的xml文件,无非加上了一个InfoPath2007的标签,如:
<?mso-infoPathSolution name="urn:schemas-microsoft-com:office:infopath:Attendance:-myXSD-2007-05-31T02-02-21" href="file:///C:/tonyqus/other/publish/Attendance.xsn" PIVersion="1.0.0.0" solutionVersion="1.0.0.122" productVersion="12.0.0" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?>
在资源管理器中,之所以InfoPath的xml文件的图标与普通xml文件的不同也就是因为这个,如果把这段标签去掉的话,你会发觉图标就不是InfoPath文件的图标了,资源管理器无法识别出它是不是InfoPath文件。
看了一下相关资料,大部分都是说如何基于InfoPath Form Server或SharePoint来部署,这个成本太高了,自然不会考虑,不过还有一个选项即使用Installable form template(可安装表单模板),这个选项可以在发布向导中找到,但要注意如果要使用这个功能必须安装Visual Studio 2003或2005。
它会要求你填写公司名称和语言种类,这里的公司名称是有用的,最终的文件将被安装到%Program Files%/<公司名称>/<表单名称>/表单模板文件(.xsn)。不过接下来大家要注意一点,制作好安装文件之后现在自己机器上装一遍,然后用%Program Files%/<公司名称>/<表单名称>/目录下的模板文件来生成用于填写的表单,这样的话有一个好处,生成的文件头不会带有一个href标记,如下:
<?mso-infoPathSolution solutionVersion="1.0.0.135" productVersion="12.0.0" name="urn:schemas-microsoft-com:office:infopath:monthlyAttendance:-myXSD-2007-05-31T02-02-21" PIVersion="1.0.0.0" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?>
这样它就根本不会去找某个路径的monthlyAttendance模板,而是会让InfoPath负责查找,由于该模板已经由那个模板安装程序(msi)安装到InfoPath2007中,所以就可以轻易打开。对于部署而言,你唯一要做的就是让所有要用InfoPath2007打开这个表单的人安装那个可安装表单模板,其他就不用管了。
当然啦,如果你连安装也不想安装,还有一种方案,那就是用xslt。比如我们可以做一个叫做abc的xslt文件,然后我们可以在InfoPath2007的xml文件中加入xslt引用标签:
<?xml-stylesheet type="text/xml" href="abc.xslt">这样就可以在没有安装InfoPath的机器上通过IE浏览器查看InfoPath2007数据了,当然你得在abc.xslt里面做适当的xml数据转换。
原文地址:http://www.cnblogs.com/tonyqus/archive/2007/06/06/772432.html