Import fwin into Ignition

Hi,

I downloaded the User Management windows from the extras section (inductiveautomation.com/downloads/extras). The file is of *.fwin type, which I gather is an obsolete FactoryPMI file type. I cannot seem to import it into Ignition v7.3.4, even if I hold shift while right-clicking. I just wanted to check out how the gurus did it before building my own screens, figuring I might save some time…

I get the following error:
com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Error: null deserialization handler for element ‘export’
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer$ParseContext.onElementStart(XMLDeserializer.java:594)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLParser.startElement(XMLParser.java:52)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeXML(XMLDeserializer.java:330)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:218)
at com.inductiveautomation.ignition.designer.gui.import_export.ExportWizard.runImport(ExportWizard.java:456)
at com.inductiveautomation.factorypmi.designer.model.navtree.WindowNode.importWindows(WindowNode.java:838)
at com.inductiveautomation.factorypmi.designer.model.navtree.WindowFolderNode$2.actionPerformed(WindowFolderNode.java:59)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Ignition v7.3.4 (b599)
Java: Sun Microsystems Inc. 1.6.0_31

Thanks,
Max

Try this, I was able to import it without any problems. Just do it from the projects section of the gateway.
UserManagement.proj (112 KB)

Hi Greg,

Yeah, this looks to be what Greg Buehler posted yesterday. I can import the project just fine. I can open most of the windows in designer, but I can’t open the main User Management window. I get the error posted below. Greg B. and I think it might have to do with differing versions of Ignition. He exported it from the latest version and I imported it into 7.3.4.

I’d like to get a look at the User Management window before I build my user management functions because you guys probably came up with something clever I should copy!

Cheers,
Max

Error on opening User Management window:
com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Unexpected parsing error during binary deserialization.
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:305)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:216)
at com.inductiveautomation.factorypmi.application.model.WindowCache._deserializeWindow(WindowCache.java:278)
at com.inductiveautomation.factorypmi.application.model.WindowCache._loadWindow(WindowCache.java:218)
at com.inductiveautomation.factorypmi.application.model.WindowCache.openWindow(WindowCache.java:433)
at com.inductiveautomation.factorypmi.designer.workspace.WindowWorkspace$DesigntimeWindowOpener.openWindow(WindowWorkspace.java:3044)
at com.inductiveautomation.factorypmi.designer.workspace.WindowWorkspace.openWindow(WindowWorkspace.java:1011)
at com.inductiveautomation.factorypmi.designer.model.navtree.WindowNode.onDoubleClick(WindowNode.java:476)
at com.inductiveautomation.ignition.designer.navtree.NavTreePanel$MouseListener$1.run(NavTreePanel.java:513)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.apache.commons.io.IOExceptionWithCause: java.lang.ClassNotFoundException: com.inductiveautomation.factorypmi.application.binding.DefaultInteractionController
at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.binaryToObject(Decoders.java:336)
at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.binaryToObject(Decoders.java:318)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readAttributes(BinaryParser.java:179)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:148)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.parse(BinaryParser.java:51)
at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:296)
… 22 more
Caused by: java.lang.ClassNotFoundException: com.inductiveautomation.factorypmi.application.binding.DefaultInteractionController
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.inductiveautomation.ignition.common.xmlserialization.ClassNameResolver.classForNameImpl(ClassNameResolver.java:205)
at com.inductiveautomation.ignition.common.xmlserialization.ClassNameResolver.classForName(ClassNameResolver.java:177)
at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$ClassDecoder.binaryToObject(Decoders.java:334)
… 30 more

Ignition v7.3.4 (b599)
Java: Sun Microsystems Inc. 1.6.0_31

Ok, that explains it. If the file originated (Greg B’s) from a version of Ignition that is higher than yours, then it will fail. Projects are not backwards compatible. The only thing I would suggest is to download the latest version from our website and run it in trial mode and open the project that way. Then you can also play with some of our newer features.

Slight terminology clarification.

Backward compatible - Newer software versions recognize/import older data/project versions. Ignition is backward compatible. (Note as of the beginning of this post, some backward compatibility with FactoryPMI was incomplete).

Forward compatible - Older software versions can recognize/import data/projects from future software versions. Ignition is not forward compatible. It does not know how to deal with (as of then) undefined features and data.

As Greg pointed out, the best thing is to update your version of Ignition if you need to restore a newer backup or import newer data.

Here’s a 7.2.11 export.
UserManagement.vwin (70.4 KB)