Unable to get the view config: View config is undefined

Hey guys,

I see this is an error for some others but I cant quite 100% figure out what the solution is.
Working in Ignition Maker edition. V 8.1.13 on windows.
Been an interesting learning curve as I’ve been an HMI developer for 10 years and this is my first dive into ignition.

Anyways, I’ve spent a decent amount of time coming up with a display and establishing comms to a PID controller. All i did was save my Main page. Somewhere in there it threw the “Unable to get the view config: View config is undefined.” Error.

Now I’m dead in the water. I tried copying the JSON code to another screen. That too results in the same error.

.FrameImpl.processCallback(FrameImpl.java:228)
	at com.teamdev.jxbrowser.internal.rpc.stream.CallbackStream.process(CallbackStream.java:178)
	at com.teamdev.jxbrowser.internal.rpc.stream.Stream$StreamObserver.lambda$onNext$0(Stream.java:164)
	at com.teamdev.jxbrowser.internal.BrowserThread$TaskRunner.processTasks(BrowserThread.java:139)
	at java.base/java.lang.Thread.run(Unknown Source)
19:23:26.418 [Browser Thread: 53120] ERROR Perspective.Designer.Workspace - level: LEVEL_ERROR
message: "store.DesignerViewInstance: Attempted to collect View Configuration for save, but root view not found!"
line_number: 12
source: "http://localhost:8088/res/perspective/js/PerspectiveClient.2f3d69c2fc01e9a49bf3.js"

19:23:37.809 [AWT-EventQueue-0] WARN ViewResourceEditor - Unable to save the view
java.util.concurrent.ExecutionException: java.lang.Exception: Unable to get the view config: View config is undefined.
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.getObjectForSave(ViewResourceEditor.java:487)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.getObjectForSave(ViewResourceEditor.java:68)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceEditor.commit(ResourceEditor.java:166)
	at com.inductiveautomation.perspective.designer.workspace.ViewResourceEditor.notifyDeactivated(ViewResourceEditor.java:594)
	at com.inductiveautomation.perspective.designer.workspace.PerspectiveWorkspaceListener.editorSelected(PerspectiveWorkspaceListener.java:73)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.TabbedResourceWorkspace$3.stateChanged(TabbedResourceWorkspace.java:115)
	at java.desktop/javax.swing.DefaultSingleSelectionModel.fireStateChanged(Unknown Source)
	at com.jidesoft.swing.JideTabbedPane$IgnoreableSingleSelectionModel.fireStateChanged(Unknown Source)
	at java.desktop/javax.swing.DefaultSingleSelectionModel.setSelectedIndex(Unknown Source)
	at java.desktop/javax.swing.JTabbedPane.setSelectedIndexImpl(Unknown Source)
	at java.desktop/javax.swing.JTabbedPane.setSelectedIndex(Unknown Source)
	at com.jidesoft.swing.JideTabbedPane.setSelectedIndex(Unknown Source)
	at com.inductiveautomation.ignition.designer.tabbedworkspace.ResourceFolderNode.onSelected(ResourceFolderNode.java:226)
	at com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.dispatchSelectionEvent(AbstractNavTreeNode.java:796)
	at com.inductiveautomation.ignition.designer.navtree.model.AbstractNavTreeNode.dispatchSelectionEvent(AbstractNavTreeNode.java:813)
	at com.inductiveautomation.ignition.designer.navtree.NavTreePanel$SelectionListener.valueChanged(NavTreePanel.java:545)
	at java.desktop/javax.swing.JTree.fireValueChanged(Unknown Source)
	at java.desktop/javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(Unknown Source)
	at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(Unknown Source)
	at java.desktop/javax.swing.JTree.setSelectionPath(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressedDND(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at com.jidesoft.docking.DockingUtils.a(Unknown Source)
	at com.jidesoft.docking.DefaultDockingManager.handleEvent(Unknown Source)
	at com.jidesoft.docking.DefaultDockingManager$56.eventDispatched(Unknown Source)
	at java.desktop/java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Unknown Source)
	at java.desktop/java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
	at java.desktop/java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
	at java.desktop/java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
	at java.desktop/java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
	at java.desktop/java.awt.Toolkit.notifyAWTEventListeners(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.Exception: Unable to get the view config: View config is undefined.
	at com.inductiveautomation.perspective.designer.workspace.JavaJsBridge.onSaveError(JavaJsBridge.java:123)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at com.teamdev.jxbrowser.frame.internal.FrameImpl.invokeMethod(FrameImpl.java:785)
	at com.teamdev.jxbrowser.frame.internal.FrameImpl.processCallback(FrameImpl.java:228)
	at com.teamdev.jxbrowser.internal.rpc.stream.CallbackStream.process(CallbackStream.java:178)
	at com.teamdev.jxbrowser.internal.rpc.stream.Stream$StreamObserver.lambda$onNext$0(Stream.java:164)
	at com.teamdev.jxbrowser.internal.BrowserThread$TaskRunner.processTasks(BrowserThread.java:139)
	at java.base/java.lang.Thread.run(Unknown Source)

Any ideas? I feel lik at this point it might just be faster to start over.

You can look at the view.json resource on disk on the gateway filesystem to confirm, but it’s unfortunately very possible that your view is completely gone.
The gist of what happens when you get that ‘unable to get the view config’ error is that the designer has to ‘ask’ the Chromium process running the Perspective design session for the view configuration. If that fails to return within a 30 second timeout, usually due to some issue with the embedded browser process, it can cause this issue; effectively a corruption of the saved view.

You can (and I’d recommend) get in contact with support; they can confirm whether the view was lost and try to find out more information about what went wrong.

We’re also hoping to upgrade the library we use for that embedded Chromium instance to help alleviate some of the issues we’ve been having with it; it’s just a tricky process to make sure we don’t introduce any regressions in the process.

Paul,

We just upgraded to 8.1.13 from 8.1.9 about 30 minutes ago and now I can’t open one of my popup windows with the same error.

1 Like

every window I open throws the following error:
message: “store.Designer: No Java bridge was found on the current executing parent window.”
line_number: 12
but so far only one refuses to open

On everywhere you launch the designer, or just one particular machine? I would try other computers first, then perhaps look for rogue Chromium processes or old temp files on the system with issues.

I switched machines and launched the same project. Same error message on all windows. Plus one window (view) that won’t open.

Very unusual. What OS is your gateway running on? How did you perform the upgrade?

Also, are you in contact with support? They’re going to be a better (less async) resource than the forums.

Paul, This machine is running on Amazon Linux.
I will be contacting support once I gather more info. I am trying to restore the gwbk to my local machine running 8.1.9 to see if I can replicate the error upon upgrading to 8.1.13. However, I am stuck on Gateway Security. This gateway uses an external IdP for authentication. How do I turn that off since my IdP will not authenticate?

If you restore the .gwbk, you should then be able to use the gwcmd utility to reset the password; that’ll overwrite the IdP settings and put you back to a commissioning state to create a fresh admin user and password.

Thanks, done.

Very interesting. Restoring the gwbk to an 8.1.9 machine does not throw the error I was describing and the view I could not open can now be opened. Upgrading to 8.1.13 restarts the error and other view are unable to be opened. Seems very unstable…

I think we should revert to 8.1.9. What is the best way to do this, uninstall and reinstall?

I gave up.

Just started over from scratch.

I sure hope this is an isolated incident, or limited to Maker Edition. I couldn’t ever see sending something out into an industrial setting that can just “eat” a screen like this after hours of work.

This is not isolated to Maker. I use the “full” system. However, I have learned to keep a dev machine running for testing new versions in case this happens. Usually I wait a while when a new version comes out so they can find these issues before I have to. Sadly, I did not wait long enough. :upside_down_face:

@Nick_Dacek Don’t give up on Ignition. It is an extremely good platform. If you don’t need the features in 8.1.13, you might want to downgrade to 8.1.9. From what I learned from support this issue showed up in 8.1.10 and is being addressed. I believe it is associated with their Jetty upgrade that they made when moving from .9 to .10.

The particular view that I lost had a lot of multi-array custom properties that I think triggered a buffer overrun. It came right back when we downgraded to 8.1.9

I’m learning this at home, so that I can bring some insight into my place of employment on Ignition. We hear about it alot, but, nobody in the industry I’m in is moving to it yet. My only guess is because of the update rates on screen and trending not being crazy fast. I dont plan on giving up on it. I have a fantastic practical project at home I’m using it on.

I’m thinking in terms of a typical situation I deal with weekly.

I get a phone call. Either directly from a customer or one of my PLC guys. They need me to VPN into a customer’s site and make modifications. Many times the process is running and I have to make some modifications to the HMI that match what the engineers did, and logout. Now alot of times, plants are self sufficient. But if we’re talking a more complicated platform like Wonderware or Citect, generally there’s only 1 or 2 guys on staff that can fix something. So that means I get the middle of the night calls.

If i modify a screen, and run into a situation where the platform ate it due to a bug, like what I just saw here… First off. I’m in deep trouble… Second of all. That software’s days are numbered in that plant if problems persist. Especially if the problem caused any sort of down time or inability to access functions of the machine

I’ve pulled out massive Wonderware installations over problems like this. With pride. I hate wonderware lol.

I got a similar issue, at least the same thing showed up when I hit save.

“Unable to get the view config: View config is undefined.”

For me, I think:
I had cut and pasted instead of copy pasted a named query. I didn’t have the page open that was missing the query.
I did have the page open that I was making a new query for. When I hit save, I got the error. I don’t know for sure that these are related.

However, after I went to the other page later, I saw the table was broken.
So then I found I had cut instead of copied.

I went ahead and posted my query back where it belonged. The error has not returned.

So my theory is that if you create an error on a page that you didn’t have open, then you get this fault code. Though I do not know for sure.

I have exported all my screens. I usually export on Fridays. Also, the company has backups.
I haven’t lost a page though, just had error on one.

Any suggestions what to do in this situation?
Maybe there are some new advices after one year?
Got this error not on saving process, but when tried to open view after restart.
Copying view.json (with and without supplemental files) to another project with blank view, created especially for this case, did nothing.
Thanks in advance!

I noticed one interesting moment in logs on Gateway


Broken view is named "Quarantine_supervisor_test".
Should notice, that I have one inheritable "Main" project, that contains all views and windows. And all inherited projects just override needed for them views and windows.

As seen in second picture, session project is "Quarantine", but view in log is "Warehouse_signaling...", that doesn't belong to this project and is not overrided from "Main". And actually is not "Quarantine_supervisor_test".
So I think, maybe problem is in some paths?