
简介Microsoft InfoPath 2007中文版产品数据手册面向企业信息化人员、IT管理员及Office高级用户系统介绍电子表单解决方案在信息收集、流程自动化与跨平台部署中的实际价值。文档涵盖通过Outlook邮件表单、浏览器及移动设备完成填写的应用场景同时说明无代码数据验证、屏幕提示、格式化条件等设计功能并提档到与SharePoint Server 2007、Visual Studio 2005及XML标准的集成能力。资源包内含1个doc格式文档大小849KB便于离线查阅与分享内容基于微软官方Datasheet翻译整理可作为快速了解InfoPath 2007新特性与部署选项的参考手册。已有129人在CSDN学习该资料适合需要选型评估或制作项目方案的读者直接下载使用。1. 为什么 2025 年还要翻 InfoPath 2007 的技术资料2025 年还在搜 “InfoPath 2007”多半不是图新鲜而是手里正好压着一个 .xsn 文件OA 里跑了好多年的请假单、报销流程、供应商登记表数据全灌进了 SharePoint 列表或 SQL Server可一到换服务器、迁移权限、加审批节点的时候没人说得清这张表单当年是怎么发布上去的。Datasheet 这类官方规格书讲的是“这产品能干什么”可它不讲的坑——模板结构、发布权限、完全信任签名、托管代码调试——才是在生产环境里接手的人真正要面对的东西。这篇按一线运维和开发的实际顺序展开先拆模板再讲发布然后给代码和排错方法最后落到迁移判断。适合要接手旧表单、做技术评估或者被要求“把这个表搬到新平台”的从业者。2. InfoPath 2007 表单模板的内部结构与命令行发布2.1 InfoPath 2007 设计器里的三个关联概念视图、字段和数据连接InfoPath 2007 设计器InfoPath Designer给人的错觉是“像 Word 一样画表单”但不能这么理解。一个 .xsn 模板同时包含三层东西视图决定用户看什么字段定义数据形状数据连接决定数据进出的通道。三者由 manifest.xsf 串起来。接手旧項目时最先要在设计器里点开的是“工具 → 数据连接”和“工具 → 表单选项”因为 Datasheet 里承诺的功能多人填写、离线缓存、提交到多个目标全是在这两个面板里做的配置而不是代码。一个经典误解是把视图切换当成页面跳转。InfoPath 2007 的视图切换只是同一份 XML 数据换一套 XSLT 展示字段值不会因为切换视图而重新创建。所以排查“下一页按钮点了没反应”时先看按钮的规则是“切换视图”还是“提交”再看切换目标视图是否正确不要去查代码——多半没有代码规则在 XSF 的 action 里就已经定义好了。字段维护上2007 模板与后来版本最大的差异是字段绑定方式。早期模板大量使用“重复表”Repeating Table而且默认把标题行也算进数据节点导致数据接收端多出一行看不见的元素。常见做法是接 SharePoint 列表时让表单的“提交数据”连接指向列表字段映射时手动排除标题行节点。2.2 解包 XSN用 expand 命令查看 InfoPath 2007 模板的真实文件结构不需要打开设计器也能看清一个 .xsn 里面是什么。.xsn 本质是一个 CABCabinet压缩包Windows 自带的 expand 命令就能解开。mkdir xsn_extract expand -F:* ApprovalForm.xsn xsn_extract\参数说明-F:* 表示解出压缩包内所有文件第二个参数是输出目录。解开后目录下通常会有 manifest.xsf、template.xml、view1.xsl、sample.xml若表单启用了托管代码还会看到 FormCode.cs 或 FormCode.vb编译后会在二进制文件夹里。这个手段在目标机器没有安装 InfoPath 时特别有用。拿到文件后按这个顺序读先看 manifest.xsf 的 xsf:formTemplate 节点它声明了版本号、安全级别、发布目标 URL然后看 xsf:dataObjects 里定义的 secondary data source二次数据源这里有对 SQL Server、Web 服务或 XML 文件的连接定义最后才看 view1.xsl 的顶部 namespace 声明确认视图绑定的命名空间是否有出入。注意expand 只负责解包改完任何文件后要重新打包成 CAB 并改扩展名为 .xsn 才能用。解包后文件作用改动风险manifest.xsf模板配置视图、安全级别、数据连接高结构错误会导致模板无法加载template.xml表单默认数据和初始字段中字段结构必须与 xsf 声明一致view1.xsl视图的展示逻辑低到中误改会改变布局或显示空白FormCode.cs托管代码入口高需重新编译签名2.3 用 stsadm 命令批量发布 InfoPath 2007 表单模板设计器里点“发布”会一步步要求填 SharePoint 站点地址、表单库类型、文件权限在一次性交付十几个模板时很不现实。常见做法是分两类走管理员批准的模板走 SharePoint 2007 的 stsadm提交到服务器场级表单模板库普通部门表单则直接通过前端站点上传到表单库不必经过服务器命令行。stsadm -o addformtemplate -filename D:\Forms\ApprovalForm.xsn -title 审批表单 -description OA审批流程测试 stsadm -o activateformtemplate -url http://oa.contoso.com/sites/hr -filename D:\Forms\ApprovalForm.xsn参数说明-filename 指向服务器本地 .xsn 路径-title 是显示名称-description 可选activateformtemplate 的 -url 指定要启用这个模板的站点集合。执行前确认执行账号在服务器上是场管理员Farm Administrators且 SharePoint 2007 管理中心里已经配置了 InfoPath Forms Services 默认状态。如果只做表单库下发更简单的路径是直接用浏览器进入表单库设置 → 高级设置 → 上传模板这一步适合不需要代码权限的模板。部署后验证不能只看“上传成功”。在浏览器里打开一个基于该模板的新表单确认页面没有出现“表单模板无法在浏览器中显示”的错误。这个错误的常见诱因有两种模板发布目标选择了“InfoPath Filler”而不是“浏览器兼容表单”或者服务器场里 Forms Services 服务没有启动。这两条在报错日志里往往不会写得很直接排查时先回设计器检查发布界面第二页的单选组。3. InfoPath 2007 发布到 SharePoint 的两种路径与数据连接配置3.1 管理员批准与用户直接发布权限模型对比InfoPath 2007 的发布路径在 Datasheet 里被称为 deployment options实际部署时只有两种结果发布到网站在线表单库或者发布到管理中心模板库。这两种对应的升级方式完全不同。发布路径最低权限模板存储位置升级方式适用场景在线表单库页面所有者站点下的 Forms 文件夹直接覆盖同名模板部门级内部单据管理中心模板库服务器场管理员服务器的 Forms 模板目录stsadm 或管理中心上传全公司统一流程首次发布选哪种取决于三个问题这个表单的数据会不会跨站点读取表单是否需要在浏览器中填写还是只在 InfoPath Filler 客户端填写。浏览器填写必须使用场级模板库这是 InfoPath 2007 的硬性限制如果只是客户端填写两种方式都能跑通。权限边界是个经常被误解的点发布到表单库并不意味着填写权限自动放开。表单库本身有自己的访问控制而模板里的数据连接还带着自己的认证方式。所以生产环境里常见到的“表单能打开、数量加载不出”的故障多半是数据连接的认证没有配置而不是发布权限不够。3.2 InfoPath 2007 三种数据连接的关键参数与写库坑点InfoPath 2007 模板的数据连接有四种主要类型XML 文档、SharePoint 列表、SQL Server 数据库和 Web 服务。前两种最常用这里给出参数层面的注意点。SharePoint 列表数据连接在设计器里通过“数据连接 → 添加 → 新建连接 → 接收数据”创建关键参数是站点地址、列表名称和站点语言。站点语言这一项经常被忽略它影响列表字段的显示名称解析语言不匹配时会出现字段无法映射的现象。SQL Server 连接的典型配置如下ProviderSQLOLEDB.1;Serversql01\instance01;DatabaseHRForms;Integrated SecuritySSPI;Connect Timeout30参数说明Provider 固定使用 SQLOLEDB.1Server 带实例名时用反斜杠分隔Integrated SecuritySSPI 表示使用调用进程的 Windows 身份。InfoPath 2007 在这里有一个明显坑点——表单在本机 Filler 打开时走当前用户身份一旦发布到 SharePoint 用浏览器打开身份就变成了应用池账号SQL 侧要预先授权这个账号否则就会出现“本机测试正常、发布后报错”的经典事故。把数据连接的超时从默认值改小是另一个调优点在连接属性里将 DataObject 的 Timeout 设定为 15 秒避免后端数据库慢查询时表单一直转圈。注意InfoPath 2007 的二次数据源每次加载后都会缓存在表单内同一个会话内的重复查询不会再打数据库。排查后端统计时发现只有第一条查询记录不一定是有问题也可能命中缓存。想强制刷新可以调用 DataSource.Query() 方法但要在完全信任模式下才能用它。提示InfoPath 2007 的浏览器兼容表单对 SQL 直接数据连接支持有限设计器发布前会给出兼容性检查结果务必在发布向导最后一步查看“兼容性报告”。3.3 完全信任与代码签名InfoPath 2007 沙盒之外的部署默认发布出来的 InfoPath 2007 模板运行在受限权限域只能访问表单库本域数据。只要表单里有“访问外部 Web 服务”“读写本地文件”“调用 COM 组件”等需求就得把安全级别提升为完全信任。完全信任模板必须使用代码签名证书签名没有签名的模板在客户端会弹出加载被拒绝的提示。开发环境里快速生成自签名证书的典型命令链如下makecert -r -pe -n CNHRForm Development -b 01/01/2025 -e 12/31/2029 -sky exchange -ss my devcert.cer regform /R ApprovalForm.xsn参数说明makecert 生成自签名证书-r 表示根证书-pe 导出私钥-n 指定主题名称-b 和 -e 是有效期regform /R 将表单模板注册到本机 InfoPath注册时读取 XSN 内嵌的签名信息。注意 -ss my 表示放入当前用户的证书存储区。证书安装到“受信任的根证书颁发机构”后再发布到 SharePoint表单才能加载完成。这个阶段最容易被忽略的是签名顺序先加代码再签名最后发布。如果发布后改了业务逻辑重新编译却没有重新签名模板文件会被 InfoPath 拒绝。服务器端的错误描述往往只显示通用签名错误代码不告诉你签名和代码的时间戳不匹配。4. InfoPath 2007 托管代码事件、对象模型与 Web 服务提交4.1 从设计器切换到 Visual StudioInfoPath 2007 托管代码项目的构建起点InfoPath 2007 支持两种代码模型脚本JScript 或 VBScript和托管代码C# 或 VB.NET。托管代码不是把逻辑写在设计器里而是在设计器中点击“工具 → 编程 → Microsoft Visual Studio Tools for Applications”后设计器会在后台生成一个 .cs 项目并把事件骨架放进 FormCode.cs。这个文件里的主类以参数形式接收 XmlForm 对象所有访问都从这个入口展开。打开文件后先看两个成员DataSource 和 NamespaceManager。前者代表主数据源后者持有表单 XML 的命名空间映射。这是接下来所有字段操作的基础。一个容易踩的坑是项目类型。InfoPath 2007 设计器只识别当前机器上安装的 Office 2007 体系如果机器上同时装了多个 Office 版本Visual Studio Tools 的菜单项会消失。此时应优先安装与目标模板版本对应的 Office 2007 Primary Interop Assemblies并调整项目的目标框架为 .NET 2.0。不要试图在 InfoPath 2013 的设计器里直接改 2007 的托管代码工程两个版本的项目格式和程序集引用不一致会导致编译失败。4.2 读字段、写字段XPathNavigator 与 NamespaceManager 的最小可运行代码字段访问是 InfoPath 2007 托管代码里最常见的场景典型代码是public void FormEvents_Loading(object sender, LoadingEventArgs e) { XPathNavigator root this.DataSource.CreateNavigator(); XPathNavigator empNode root.SelectSingleNode( /my:myFields/my:Employee/my:EmpName, this.NamespaceManager ); if (empNode ! null string.IsNullOrEmpty(empNode.Value)) { empNode.SetValue(默认员工姓名); } }逻辑说明FormEvents_Loading 在表单每次打开时触发先拿主数据源创建 XPathNavigator再按绝对 XPath 查找员工名字段找到且为空时写入默认值。这里 SetValue 会触发表单的字段变化事件并参与撤销记录。参数说明my: 前缀由 NamespaceManager 提供它来自模板主命名空间的声明XPath 路径必须严格与 InfoPath 设计器字段面板里的结构一致如果字段位于重复表中还要加上索引例如 /my:myFields/my:Items/my:Item[1]/my:Name。使用 SelectSingleNode 时注意它只返回第一个匹配节点重复表的行数不确定时不能用来遍历遍历应改用 Select 方法后迭代。事件入口触发时机典型用途Loading表单打开时初始化默认值、权限判断Submit用户点提交按钮时数据校验、Web 服务调用AfterChange任意字段值变更后联动计算、动态显示这里要说明一个容易漏掉的情况this.DataSource 指向的是主数据源也就是 manifest.xsf 中声明为主表单数据的那个数据源。某些模板会在数据连接中额外创建独立数据源并让视图与它绑定此时 this.DataSource 返回的仍是主数据源读取视图字段会失败必须改用 this.DataSources 按名称索引。注意InfoPath 2007 的 NamespaceManager 区分大小写节点名大小写不一致时 SelectSingleNode 返回 null排查此类问题先看字段面板里的实际名称。4.3 InfoPath 2007 Web 服务提交与错误处理参数提交到 Web 服务的典型需求是把表单当做一个 SOAP 客户端直接把 XML 提交给后端接口。InfoPath 2007 提供两种模式在设计器中配置数据连接或在代码中直接调用。设计器配置适用于接口字段固定、单次提交的场景代码调用则适合需要权限校验、动态分支或多包提交的场景。public void FormEvents_Submit(object sender, SubmitEventArgs e) { try { DataConnection conn (DataConnection)this.DataConnections[HRSubmit]; conn.Execute(); e.CancelableArgs.Cancel false; } catch (Exception ex) { e.CancelableArgs.Cancel true; this.UI.Alert(提交失败: ex.Message); } }参数说明DataConnections[HRSubmit] 的依据是设计器中“数据连接”面板里已配置的名称字符串拼写必须完全一致包括大小写Execute 方法触发一次 Web 服务调用成功或失败由异常类型体现。Cancel 属性决定是否终止提交操作设为 true 时表单状态不会被标记为已提交用户可继续编辑。UI.Alert 是在 InfoPath 2007 里向用户展示提示框的标准方法不建议使用 MessageBox后者在浏览器兼容表单中会被屏蔽。日志记录是排查线上问题的关键补充因为 Web 服务调用失败时InfoPath 客户端只会显示一个通用错误。常见做法是在 catch 里追加一条本地日志到临时目录但注意 InfoPath 2007 只有在完全信任模式下才能写文件系统。日志文件本身要按用户隔离避免多用户冲突文件名里带上当前用户的域账号是个可接受的方案。5. 用日志验证表单逻辑与 InfoPath 2007 迁移路线5.1 一个最小可用的日志辅助方法在完全信任模板里写日志不需要额外引用第三方库。把以下方法放在 FormCode.cs 的类中即可在事件或规则里随时调用private void Log(string tag, string message) { string path C:\Temp\InfoPath\ Environment.UserDomainName _ Environment.UserName .log; System.IO.Directory.CreateDirectory(C:\Temp\InfoPath\); System.IO.File.AppendAllText( path, string.Format([{0:yyyy-MM-dd HH:mm:ss}] [{1}] {2}{3}, System.DateTime.Now, tag, message, System.Environment.NewLine) ); }参数说明Directory.CreateDirectory 在目录已存在时不会报错这在多用户共享机器的场景下是安全的文件名以域账号区分避免多个填写人同时打开表单时互相覆盖AppendAllText 以追加方式写入适合记录连续的操作轨迹。调用时在 Loading 事件里先写一条表单打开记录再在 Submit 事件的成功和 catch 分支各写一条一条表单的完整生命周期就串起来了。这个验证手段比 F5 单步调试更贴近真实生产环境因为很多故障依赖表单库权限和服务器账号上下文本机单步根本模拟不出来。5.2 判断“迁移”还是“继续维护”的三个指标InfoPath 2007 早已不在微软主流支持周期内继续留在生产环境的唯一理由是业务逻辑稳定、无合规要求。遇到这些信号就要准备迁移表单要新增签名流程、要支持移动浏览器、要对接 REST 接口或者原设计人员已经找不到了。InfoPath 2013 可以打开 2007 模板做兼容性升级但 2013 本身也已接近产品生命周期的尾声并不推荐作为长期目标。迁移选型上有三个判断指标表单是否浏览器兼容、数据是否存在多表关联、填写过程是否有复杂校验。三者有任何一项用 Power Apps 这类新平台重建的工作量都会增加一半以上。比较务实的做法是先把表单的 XML schema 导出用数据迁移工具把历史提交记录转到新平台的列表中再手工重建界面。重建时不要逐控件对应应该按“数据字段是否保留、计算逻辑是否保留、校验规则是否保留”三个维度重新设计InfoPath 里的重复表和视图切换并没有直接等价物硬搬只会得到一个操作别扭的替代品。迁移完成后的验收标准是新旧平台各跑一个月的双轨期每天对比提交记录总量和异常数量确认无差异再关闭旧表单库的入口。本文还有配套的精品资源点击获取