Friday, September 21, 2012

InfoPath - The URN specified in the XML template file does not match the URN specified in the form

You cheeky developer you, been monkeying around with your XSN files, haven't you ;-)

There comes a time in every SharePoint developer's life when he has to deal with some InfoPath. That's often a frustrating experience - especially when inheriting a middle-sized to large project. InfoPath probably does what it's supposed to do well - and this is to provide static forms for users to fill. If you swerve from the road well travelled however and try to build something more custom some opportunities (as we call problems nowadays) are likely to emerge, which get aggravated by the limited resources on the more specific scenarios.

One of those specific cases is when you need to manage form templates on the fly, programmatically. That's not particularly hard - after all InfoPath form templates are just CAB files containing XML, so you can dynamically unwrap them, do the changes needed and then put them back together with MakeCab or similar tool. Still, the process is not that hard to botch, and this "The URN specified in the XML template file does not match the URN specified in the form" error is one of the possible outcomes of getting it wrong.

This one is kind of self-descriptive, although it might not be exactly intuitive for InfoPath newbies. See, the URN (Uniform Resource Name) something like an identifier for the form template and is referenced on two different places throughout the files that comprise the XSN package and naturally, it needs to be the same in both. So, if you are spewing InfoPath form templates on the fly, with different names, you need to take care to edit the URN in sync - otherwise you end up with this error. You can also leave these alone altogether and not edit them - I haven't noticed any adverse consequences so far.

First, in minifest.xsf:

<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is automatically created and modified by Microsoft InfoPath.
Changes made to the file outside of InfoPath might be lost if the form template is modified in InfoPath.
-->
<xsf:xDocumentClass solutionFormatVersion="2.0.0.0" solutionVersion="1.0.0.46" productVersion="14.0.0" name="urn:schemas-microsoft-com:office:infopath:your_form_name:-myXSD-2011-02-09T17-25-42" xmlns:xsf="http://schemas.microsoft.com/office/infopath/2003/solutionDefinition" xmlns:xsf2="http://schemas.microsoft.com/office/infopath/2006/solutionDefinition/extensions" ...

Then, in template.xml:

<?xml version="1.0" encoding="UTF-8"?>

<?mso-infoPathSolution name="urn:schemas-microsoft-com:office:infopath:your_form_name:-myXSD-2011-02-09T17-25-42" solutionVersion="1.0.0.46" productVersion="14.0.0" PIVersion="1.0.0.0" ?>
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?>
<?mso-infoPath-file-attachment-present?>
<my:myFields ...


2 comments:

VisitIrelandTravel said...

I can't believe your sexist comments, they are an absolute disgrace!!!

Stefan Kiryazov said...

Apologies if the comments have caused offense, none was intended. The section has been removed now.

I didn't expect readers to consider it sexist, I simply stated that I don't know a single female SharePoint developer, which was true at the time of writing but has changed since, so good riddance!