What’s New in Skuid?

(Acknowledging the cable-stayed bridge that spans the River Tan in southern France, Millau is pronounced ME-yew.)

Updates as of 11.1.3

As of Millau 11.1.3 and Brooklyn 10.0.17, we now report inaccessible fields as Page Problems to aid Page Builders in resolving inconsistencies between the App Composer and the runtime. Users with Skuid Admin or Skuid Page Builder permissions may now see page problems. This does not represent any change in behavior for standard Skuid users.

The second change relates to field level permissions. Skuid’s handling of relationship fields is now consistent with Salesforce standard layouts. If you experience field level behavior changes in Skuid after upgrading, please review your Object and Field level permission settings. More information in the Heads Up! section below.

If you have further questions, please contact support@skuid.com.

Millau Update 1 Update Release

We’re always looking for better ways to help our customers create exceptional user experiences, efficiently and elegantly. This drives our product roadmap and informs our desire to constantly update and iterate. Here’s what we’ve been up to lately.

New Product Features

  • Quickly add Table and Field Editor components with all of the fields from a model.
    • Have you ever wanted to put all selected fields from your model into a data component, like the Table or Field Editor component? Drag-and-drop any model onto the canvas and select whether you’d like a Table or Field Editor component; Skuid will create the component and populate it with all the fields that have been added to the model. (Sometimes it’s faster to remove a few unnecessary fields than it is to start from scratch.)
  • Enhancements to Offline Mode: new options provide greater control over how your apps respond to interruptions in network service. You can determine how Skuid responds to different offline mode events.
  • Importing Skuid page XML is easier than ever.
    • Upload an XML file: Skuid’s Create New Page wizard offers the option to upload XML from a file.
    • Does the imported page use a data source that doesn’t exist in your site? Whether pasting XML or uploading a file, select a corresponding data source to prevent errors when the data source name differs from one site to another, but the object/entity and fields used by the data source are the same.
  • Multi-select filters now support manually-created sources or a model as a source for the filtering options.
    • Combine the control of manually-created sources and options with the flexibility of allowing of the user to choose multiple items in the filter.

Skuid with Lightning

Skuid Millau Update 1 brings powerful enhancements to Skuid’s ability to extend Salesforce. Skuid already works like a “supercomponent” in Lightning Experience, replacing the need to write code for a custom Lightning component with a declaratively-built Skuid page. Millau expands Skuid’s presence within Salesforce Lightning by enhancing functionality, streamlining performance, and bolstering Skuid’s feature set.

  • Use page assignments in Lightning with Lightning page assignments and the Skuid Page Assignment Lightning component!
    • Like the Skuid Page component, the Skuid Page Assignment component may be placed anywhere within a Lightning page. The Page Assignment component displays a Skuid page according to the specified criterion.
    • Manage individual page assignments—the ability to assign an organization, profile, or user to a specific Skuid page—in an updated interface. Visualforce and Lightning page assignments are separated for easier configuration.

Note

Record types are not supported by the Page Assignment component because Salesforce provides an effective tool to manage different pages for record types.

The Lightning conditional rendering feature can be combined with the Skuid Page Assignment component to deliver the right Skuid page to the right record type.

  • Chatter is fully supported as a component for Skuid in Lightning pages.
    • Previously, the standard Lightning Chatter component needed to be placed next to a Skuid page inside a Lightning page. Now, Chatter is available once again in Skuid in Lightning! That means no workaround is required for delivering Chatter with Skuid in the Lightning Experience!

Note

After-Post Actions, a Skuid feature, are currently not supported in Salesforce Lightning.

  • Salesforce rich text fields are now fully supported by Skuid pages in Lightning Experience.

New Product Features—Skuid Platform

New or enhanced data source options:

  • PostgreSQL support: Your data is locked away no more; SQL support is now live in Skuid. The PostgeSQL data source type allows you to connect to your PostgreSQL database—some popular examples including Amazon Web Services’s RDS and Aurora databases—and interact with your data using Skuid’s declarative interface. Drag-and-drop fields, aggregate your data, and craft your UI around data you could never access before.
  • Data source objects: A new way for Skuid to work with your data system and to configure additional security, data source objects represent a step forward in how you bring your data into the declarative experience of Skuid.
  • DynamoDB conditions: In addition to enhanced functionality for saving on child fields and other performance optimizations, conditions now feature additional options for better filtering your data.

Want more technical details about this release and other updates? See the Skuid Releases page.

Minor Updates

  • Have you built a Salesforce community with self-registering users? We’ve improved the way Skuid handles self-registration and the automatic assignment of licenses and permission sets. Fewer errors, better experience!
  • Add a title directly to your Tables and Decks. No need to add a Page Title or Rich Text component to display a title.
  • Hide the header and/or footer on Tables, Queues, and Decks. As an app builder, choose when the data component’s header and footer are available to the user. If the features or display formatting in the header or footer are not needed, then remove them to get back more space and fewer visual artifacts on your page.
  • Page Includes can now access their query string parameters through the $Param merge variable.

Heads Up!

Page Include Query String Parameters Always Win Out

URL parameters could not be accessed through the $Param merge varaible in previous versions of Skuid. Now that they can, a Page Include’s query strings will always win out over the URL page parameters. This can cause unexpected behaviors if your URL parameters and query string parameters are identically named. Ensure that you are using unique parameter names between your URL parameters and each of your Page Include query strings.

Do Not Use jQuery’s Ready Event to Determine If a Page is Loaded

The jQuery ready event no longer accurately reflects when a Skuid page is loaded. This can be particularly troublesome if snippets must access client-side model metadata at page load time. But don’t fret! Skuid has an event for that purpose, and you can update your snippets with one line:

If your snippet uses either of the below:

$(document).ready(function() {

// Or the following, which is shorthand for the above:

$(function(){

Update these lines with the following:

$(document.body).one('pageload',function() { // Will fire after Skuid is finished fully loading the page

As always, minimizing your use of custom code is highly recommended. Consider using an event-triggered action sequence, triggered by the Skuid Page: Rendered event, with the Run A Skuid Javascript Snippet action to set off your snippet instead.

Or better yet, see if the snippet can be entirely replaced by actions within the Action Framework.

Skuid No Longer Creates Empty XML Attributes

Previously, if a property was left empty, Skuid would add an empty XML attribute to the component. As of 11.1, Skuid will not create this empty attribute so as not to clutter XML.

This will not affect most users, but if you have custom code that looks specifically for these empty attributes you may need to update your code.

Skuid Doesn’t Send Empty or Inactive Conditions on Page Load

It’s common to prepare conditions on Skuid models for future use within the page—maybe a button activates and sets a condition, or a Filter Set limits the data. However, despite the fact that these conditions were initially empty, Skuid would still send along the condition. To streamline this, Skuid no longer sends these conditions on page load, meaning your pages load faster.

Merge syntax works as expected in child relationship fields

Generally, double curly brackets {{parameter}} in a template tells Skuid to apply locale-specific formatting (for example, 3,000 or $3,000) to the data. Triple brackets {{{parameter}}} tell Skuid to surface only the raw (unformatted) data (e.g. 3000). In past Skuid versions, double curly brackets used in child relationship field templates did not apply locale-specific formatting and instead only surfaced the raw data.

As of Millau 11.1, using double curly brackets in a child relationship field template will result in Skuid applying locale-specific formatting to the data.

Use getRenderer and getFieldRenderer instead of Directly Accessing Properties

As of Millau, direct property access on ui.renderers and ui.fieldRenderers is deprecated. Instead, two new getter APIs are debuting that better facilitate renderer usage across different platforms and data sources:

Before you used the following to access a renderer/fieldRenderer:

1
return skuid.ui.fieldRenderers[displayType][mode](field, value);

Now use the getRenderer and getFieldRenderer functions:

1
return skuid.ui.getFieldRenderer(field, displayType)[mode](field, value);

Or:

1
return skuid.ui.getFieldRenderer(displayType, model.getDataSource())[mode](field, value);

The less-frequently used renderer property should be updated from …

1
var element = skuid.ui.renderers[type][mode](options);

… to use the new getRenderer function:

1
var element = skuid.ui.getRenderer(type)[mode](options);

This takes advantage of new features that are built into Skuid, like data-source-specific and platform-specific renderers. If you continue to access renderers directly via the renderer maps, then you will only get the global default renderers, which may cause issues with certain data sources or on platforms like Lightning.

Table and Deck Header CSS

The Table and Deck component headers now have have the display:flex CSS property. This won’t affect most users, but if you utilize custom CSS to alter the layout of these headers, you may need to adjust your styling.

skuid.component.createChildComponents() Has Been Deprecated

If you are a Skuid developer, you may have used skuid.component.createChildComponents() in the past to create “child” components. This API lacked some additional logic needed for Lightning compatibility.

Because of this, you should update any usage of skuid.component.createChildComponents() with the Component instance method, which can accept the same arguments:

1
2
3
4
5
6
skuid.$C('MyComponent').createChildComponents(
  componentDefinitions,
  elementToAppendTo,
  context,
  state
);

Increased Visibility into Reference Field Permission Errors for Skuid on Salesforce

As of Millau 11.1.3 and Brooklyn 10.0.17, if a Skuid page viewer has record level permission to view a parent record and related child records, but does not have field level permission to view the reference field between the parent and child records, then the following error will appear to the Skuid page viewer:

Error: A Skuid Model, <model name>, requested a Field with relationship name <API Name of the field>, on the <API Name of the object Object>, but Skuid could not find a valid Field accessible through this relationship name. Please check that this Field actually exists on this Object (or on any related Objects). If it exists, then ensure that the user has permission to access it. If it does not exist, remove it from this Model.

This can be fixed by changing the field level security of the reference field on the parent object for the profile experiencing the error message.

Previously, the error message would not appear to the page viewer. The error would have been detectable by the effect of the error (related records not displayed) or by viewing the log in the browser console.