[InfoPath] How to modify the XSN file and the inside xml..
Introduction:
InfoPath is an XML based document that is saved in XSN format,,,,
The XSN is actually noting but a .Cab file (cabinet). Try renaming any XSN file to .Cab and click on it,,
You will find all files that actually consist an InfoPath file,,,
Problem:
Sometimes you need to modify the content of one of the files such as the schema file (.xsd)..
Process:
The process goes as follows:
Unpacking à Modifying à repacking
This article will guide you through all three steps
Unpacking:
As we said before an XSN is nothing but a bunch of xml documents zipped in a cabinet…
So unpacking it is fairly simple,, you just need to:
- Rename your XSN file to .Cab
- Click on the cab file
- Select all files and right click on the selection…
- Select "Extract Files".
- Then choose a suitable place to extract the files in it,,,
Modifying:
Now what you need to do is to go the extracted folder and choose whatever file you want to modify in the XSN. Usually its notepad that you will use to modify these files..
After you finish save your work and close all editing applications.
Repacking:
We need to zip al these extracted files into a cab or xsn file again so we can open our InfoPath file again,,,
Now this is where you need to use a tool called Make-Cab which can be found in C:\Windows\System32\makecab.exe…
Note:
Using this tool is something I am to going to visit here in this article; I will just explain the part where repacking the files to XSN again,,,
But for more information in details on MakeCab.exe visit this link: https://support.microsoft.com/kb/310618/ where you can fid the SDK and download it,,,,
Let's get back to business. Till now you have all the extracted files in a folder, to create your XSN now follow the instructions:
Create a txt file called directives.txt (or any suitable you like).
Copy this code in the file:
;************************************************************
; MSDN Sample Source Code MakeCAB Directive file example
;************************************************************
.OPTION EXPLICIT
;*****************************************************************
; change the value of the caninet name for example myInfoPath.xsn
;******************************************************************
.Set CabinetNameTemplate=AfterRePackaging.XSN
;*************************************************************************************************************
; change the value of the Disk Directory Template value to the directory you want to store the xsn file into,,
;*************************************************************************************************************
.set DiskDirectoryTemplate="D:\Workarea\InfoPath Work"
.Set Cabinet=on
.Set Compress=on
;*******************************************************
; Just List All the files to be added in the xsn file
;*******************************************************
"D:\Workarea\InfoPath Work\Extracted Files\manifest.xsf"
"D:\Workarea\InfoPath Work\Extracted Files\myschema.xsd"
"D:\Workarea\InfoPath Work\Extracted Files\sampledata.xml"
"D:\Workarea\InfoPath Work\Extracted Files\template.xml"
"D:\Workarea\InfoPath Work\Extracted Files\upgrade.xsl"
"D:\Workarea\InfoPath Work\Extracted Files\view1.xsl"
;*********************
; End of the File
;*********************
Save your file. And open the command prompt (CMD).
Now, you need to type the following command:
MakeCab /f directives.txt
*** be sure that you are in the same directory or give the full path name ***
Congratulations now you have your XSN file go ahead and test it,,,
Conclusion and summary:
You have learned in this article how to open an XSN file, modify it and re-package it again into XSN file,,
Once you do this once, the other times will be piece of cake,,
And of course questions are always welcomed J…
Cheers…
Comments
Anonymous
April 29, 2007
Problem: Sometimes in InfoPath 2007 you need a way to limit a repeating field and putting for it MaxAnonymous
November 21, 2007
The comment has been removedAnonymous
December 28, 2007
Corpo: Olá pessoal, Aos geeks de plantão que já trabalham com o InfoPath 2003/2007 .... estou fazendoAnonymous
December 30, 2007
Thanks PC, corrrected...Anonymous
February 29, 2008
Great post, was very useful. Thanks A lot! http://www.wiinjamod.comAnonymous
March 02, 2008
Is there a way to do this by managed code? I would like my application to achieve the same....but avoid calling the native makecab exe.Anonymous
March 05, 2008
Hi, I am trying to package a xsn template from a Visual Studio solution. Is there a way to embed the Formcode.cs, i.e. the managed codebehind to the xsn? Is there a better way to handle this from VS IDE?Anonymous
April 24, 2008
Sayan, sorry for not replying but honestly i am not aware of such thing, maybe there is an alternative way to do it though managed code..Anonymous
November 09, 2008
This is so cool, but if the form template contain a template signature, repaking will cause it lost.Anonymous
November 09, 2008
if you want to do it with your hands (not programatically), its better that you: 1.save the XSN as resources in a folder 2.Close infopath 3.then modify what you need 4.right clicl on the manifist file and click on design
- save as XSN again
Anonymous
July 27, 2009
This worked for me when InfoPath form designre refused to open the xsn.Anonymous
October 07, 2009
This is great! Thanks.Anonymous
December 03, 2009
Exlenet post! you save my life!Anonymous
August 24, 2010
The comment has been removedAnonymous
January 30, 2012
Thanks for doing all the hard work ... wish I'd seen this post before trawling the internet for a cab-maker!