State names suddenly wrong

Ok quick update to this: while 11.1.1 Skuid package fixed the state issue I was seeing, I’m now getting an error on my Contact detail page I created a few years ago.

1. There was a problem rendering a component of type skuidpage: Cannot read property ‘records’ of undefined

I went through any javascript i had and made sure I wasn’t causing this issue. The only indication of where this error occurs in my Javascript debug console is this:

A@skuid__SkuidJS:5

Sounds like this is something happening with Skuid packages, do you know what could be causing this?


Thanks!
Eulogio

Hi Eulogio, are there custom render snippets being used here? Or, any other model condition, conditional rendering, or custom code that would depend on model data being present? If so, the page might be having a sync issue, where a model is perhaps being loaded ‘client-side’ (after pageload), but a custom field render snippet, or almost any render condition, or something like that, is trying to look at the model’s records. The condition or snippet may be looking for the model’s records before/during pageload, before the records have been loaded. Does that make sense?

Yep that makes sense, I guess I’m confused as to why this is an issue now when it wasn’t before.

I have another page that is experiencing similar issues, where a static resource is no longer being loaded correctly:

skuid__SkuidJS:5 There was a problem rendering a component of type skuidpage: jSignature is unable to find import plugin with for format 'null'


Is there something I should be doing differently with these pages compared to earlier Skuid versions?

Hmm, did you recently refresh a sandbox by any chance? There was a known Salesforce issue (now resolved) that affected the process of copying some static resources into the new sandbox. Here is the information about that issue: https://success.salesforce.com/issues_view?id=a1p3A0000018BvQQAU

It would have affected sandboxes that were created between around February 13 - 21. 
However, if you were affected by this, I would expect all Skuid pages to be affected.

It looks like jSignature is a jQuery plugin you might be using in this page. It sounds like the plugin isn’t finding a valid format value, but I’m not sure where that would be coming from in your case. 

This is all occurring in production, and again, it was functioning before updating to 11.1.1. Not sure if there should be another way I’m loading these libraries or if there’s some other dependency I should be including with the new update.

Eulogio, can you share any more information about the way you’re loading jSignature into Skuid? Is there a ‘format’ parameter jSignature needs? If so, where’s that coming from?

ON the skuid releases page, there is no install link for 11.1.1

There was a SFDC bug that caused significant problems with 11.1.1.   We removed the package until SFDC fixes the problem on their end.  More information about the issue can be found here:  https://community.skuid.com/t/challenge-with-11-1-1-version

We are targeting releasing an updated package today… 

I have the jSignature package stored as a zipped static resource in Salesforce. I initialize my signature components on pageload via a component snippet and call my jSignature methods here. I was never using a ‘format’ parameter before, not sure what parameter the error message is referring to.

For some additional context, here are some screenshots of the error I’m seeing and what the debug console shows for those initial 2 errors:



Hi Eulogio, 

Since this error message is being thrown by jSignature, have you looked for any further information on what the error means? A bit of Googling leads me to believe that jSignature isn’t getting the data in the right format (see here for example, and the best answer there provides a link to a lot more detail). If the data is in the wrong format, (if the above link is relevant: base 64 vs base 30, for example), then the next question is, where is jSignature getting its data from, and what has changed? 

I’m feeding jSignature data from SF records which store my signatures. jSignature hasn’t been updated in about 5 years and the data I’m using in my model hasn’t changed in a few years either, so I don’t think it’s any updates that I’ve done that is causing problems.

The errors popping up here are also popping up in other Skuid pages I had built at least a year ago:



Eulogio,

I understand that there haven’t been changes to jSignature or the model data. When we run into inter-operability issues like this between different packages & plugins, it can be tricky to find exactly where the pieces are failing to integrate. 

I’m thinking that perhaps jSignature was looking for a Salesforce field that’s no longer loading before pageload. If your jSignature component is loading on pageload, but the data that’s providing the signature itself is being loaded client-side, then the component may be looking for the signature before its model has loaded. Can you check any relevant models to see if they’re being loaded client-side?

If so, one test you can try if you’re comfortable with a bit of console scripting is to run a command to re-render your custom component once the page has been completely loaded. To do this, find out your custom component’s unique Id, then enter the command skuid.$C(‘your-component-id-here’).render() into your browser console to force it to renderIf the issue is that the model data isn’t ready in time for the component, then trying this should let the component render successfully.

Edit: If you find that the model data is loading too late, then try setting the model so it does NOT load client side. 

Thanks for the explanation Mark, the context was really helpful. I’m not loading any models client-side, and was unable to get the component to render using the command you provided.

Do you have any other advice on debugging this problem? I appreciate all the help you’ve provided thus far, but I also understand how difficult something like this is to fix from afar and certainly don’t want you spending too much time on this if I can do any of this myself.

Are you seeing the error message in pages that don’t use jSignature? 

In a situation where I can’t figure out exactly which component, model, or snippet is causing the error: (involves editing the page’s XML)

  • Clone the page
  • Open the XML editor for the page
  • Comment out all snippets, save changes, and load a preview of the page. 
  • If the error is gone, then remove your comment tags from the snippet XML, and instead comment out one snippet at a time. 
  • Reload the page preview after each snippet has been commented out. 
  • Does the error still happen? If it doesn’t, then the snippet you just commented out is causing the error, and you’ll need to debug that snippet. In this case, where do you see [something].records in the snippet? Whatever that [something] is, it’s not being defined at the time the snippet is running.
The issue could be unrelated to snippets. If that’s the case, I’d take a similar approach, but instead, I’d comment out one model at a time, and reload the page to see if removing that model causes the error to go away. If that also fails, I would then try the same process on the page’s components. The goal is to find the piece of the page that’s causing the issue, then look for anything unusual about it. 

We call this the ‘brute force’ method, and it’s slow-going, but it’s very helpful when you’re not sure where to start. 

One other important thing to mention is a difference between pre 10.0 versions of skuid. In versions prior to 10.0, “null” was returned more liberally for several APIs—even being returned for properties that were not set. By standard conventions, undefined should have been returned for these unset properties. This behavior has been corrected.
If your code explicitly checks for the null value on undefined properties, you’ll need to update it accordingly.

This is explained more clearly in this document, and the suggested approach is included as well:
https://docs.skuid.com/v10.0.0/en/release-notes.html#undefined-vs-null

I have a feeling some code on your page is checking whether something is null. In newer versions of Skuid, that check should also look for whether the thing is undefined. I’ve had good luck using the ‘falsy’ check explained in the link above.