在处理InfoPath表单时,经常面临将表单从一个位置(服务器)迁移到另一个位置的困扰。这个过程不仅繁琐,而且当涉及到多个环境(如开发、测试和生产)时,手动发布到每个环境更是一项艰巨的任务。为了解决这个问题,开发了一个工具,可以自动化地将InfoPath表单部署到任何网络位置。
有人可能会问,为什么需要多个表单?难道不能在一个表单中使用多个视图并将其部署到服务器吗?实际上,在使用多个视图共享一个数据源时遇到了问题。如果一个数据字段被多个视图共享,并且每个视图以不同的方式使用该字段,那么当一个视图更改字段值时,其他视图也会受到影响。因此,决定为每个视图使用不同的表单。接下来的问题就是如何部署这些表单。
以下是开发的工具的核心代码,它使用VB.NET编写。这段代码展示了如何修复XSN文件,以便它可以被部署到指定的网络位置。
Sub FixupXSN(ByVal xsnInputPath As String, ByVal xsnOutputPath As String, ByVal publishUrl As String)
Try
If Not File.Exists(xsnInputPath) Then
MessageBox.Show("File does not exist: " + xsnInputPath)
Exit Sub
End If
' Create temporary folder and explode the XSN
Dim tempFolderPath = Directory.CreateDirectory(PathCombine(Path.GetTempPath, Path.GetTempFileName)).FullName
tempFolderPath = PathCombine(Path.GetTempPath, Path.GetFileNameWithoutExtension(Path.GetTempFileName))
tempFolderPath = Directory.CreateDirectory(tempFolderPath).FullName
ExtractFilesFromXSN(xsnInputPath, tempFolderPath)
' Modify the XSF in place
Dim xsfPath As String = PathCombine(tempFolderPath, "manifest.xsf")
Dim hsAttributesAndValues As New Hashtable
hsAttributesAndValues.Add("publishUrl", publishUrl)
hsAttributesAndValues.Add("publishSaveUrl", xsnOutputPath)
' Generate the new XSN
CreateXSNFromFiles(tempFolderPath, "manifest.xsf", xsnOutputPath)
' Cleanup
File.Delete(tempFolderPath)
Catch ex As Exception
ShowMessage(ex.Message)
Trace(ex.StackTrace)
End Try
End Sub
在开发这个工具的过程中,学习了如何使用CABSDK工具。CABSDK是一个强大的工具,可以帮助处理CAB文件,这是InfoPath表单部署过程中的关键部分。