We are pleased to announce the forthcoming release of SuiteCommerce and SuiteCommerce Advanced 2019.1, the latest update to our commerce software.
This blog post will highlight the features I think most important to commerce developers, so I strongly recommend everyone also read the release notes in full so that you can see everything we have included in the release.
Extensibility API Changes
In the 19.1 release, we are adding four new components with associated methods and features. They are:
- MyAccountMenu — add items and item groups to the left navigation menu in My Account
- LoginRegisterPage — add custom fields to the login and registration forms; listen to form submit events to validate, and cancel if need be
- UserProfile — read data about the current shopper, such as their name and address, as well as get meta-information, such as whether they are logged in or recognized
- PageType — part of a larger bit of functionality, but lets you add new types of pages to the site management tools (akin to the landing and enhanced pages) and also enables the new layout selector functionality
Over the coming weeks and months we will look at each of these in more detail, so let me talk about them in general terms for now.
While you could already new functionality to the customer's account area with extensions, we recognized that there was a gap: it was difficult to add new navigation links to any new page/section that you just added. This component adds new methods for adding links, and adding groups of links to the left navigation menu.
What's a group and what's an item? Well, things like the Settings, Purchases, Settings links in the sidebar are groups as, when clicked, they expand to reveal further options. Those options within are menu items, and navigate the user to specific pages in the My Account application when clicked. With this component, you can add new groups, and then add items either to those groups or to existing groups.
One of the features included with this component is the ability to configure the permissions associated with the groups and items. In other words, you can hide groups and items from being shown to customers based on their role's permissions — if, for example, they don't have the ability to begin the returns process themselves, then the option to navigate to that page is hidden. You can control this, too, with any new group or item your extensions add.
A pretty common customization request we get is to the registration section: when signing up for a new account, they want their new shoppers to agree to some terms and conditions. Or they want to capture how the shopper found out about their site. There are a myriad of things that site administrators want to know at this point; the LoginRegisterPage component aids that by making it super easy to add new fields to the forms.
Furthermore, this components adds new cancellable events, which means that you are now able to add in your own validation to the forms on this page.
When you have created new custom entity fields and attached them to customer records, you will frequently want to access them in your code. In addition to the fact that you can now easily access standard field data about your customers, it is now super easy to access any custom fields that are attached to the user's record.
Custom fields that are marked to show in the web store are now easily surfaced using this component. Additionally, all standard fields are now available as is information about their status (ie whether they are logged in, logged out, or recognized).
It's hard to talk about this component in isolation, so I'll talk about the wider feature in a moment, but this component is part of an initiative to make it easier for folk using the site management tools to add new types of content to their site. Specific to this component, this will enable you — an extension developer — to define and register new page types or new templates.
We have migrated a number of our core pages to use page types, and you should consider doing it for any functionality you have written. By creating functionality with a page type, you open up opportunities for site administrators to change the layout of the page to suit their design.
SuiteCloud Developer Framework Support
We are progressing towards making extensions and themes packagable as SuiteApps or SDF projects. There are a number of crucial benefits that this adds:
- Package can include all objects required by the extension, such as custom records, fields, feature switches, etc
- Easier sharing and deployment to other environments and NetSuite instances
- Easier sharing within your own development team
- Support for version control
The first two are perhaps the most interesting. One of the current problems with extensions is distribution. Sure, if you own/operate one site, then you can develop the entirety of your extension easily within the context of your site and NetSuite instance; for example, if you need a new custom record, you can just create it. But what about extension developers who want to develop agnostically, such that they can deploy their extensions to multiple sites and instances?
Well, one of the benefits of SDF is that we can include any necessary object in the SuiteApp package. It also means that you can list things like feature dependencies — does your extension require server-side scripting? Well, with SDF, you can specify that.
Anyway, this release lays the groundwork for this functionality: it's not mandatory yet. We'll introduce the topic more fully when the time comes.
Server-Side Extension Activation
One of the additional changes in this vein is the move to server-side extension activation.
Prior to this update, all extension activation was done by running the code on the user's computer via their browser. For some people, this meant that the process was quite slow as it dependended on their system's performance.
As of this release (or, rather, the release of the extension manager bundle), this now takes place on NetSuite servers. It takes advantage of a feature available in SuiteScript 2.0: map/reduce scripts. To quote our documentation:
The map/reduce script type is designed for scripts that need to handle large amounts of data. It is best suited for situations where the data can be divided into small, independent parts. When the script is executed, a structured framework automatically creates enough jobs to process all of these parts. You as the user do not have to manage this process. Another advantage of map/reduce is that these jobs can work in parallel.
In other words, this change should make the activation process much more performant.
Another crucial feature of this change affects our move towards making extensions available as SuiteApps. In particular, this change lays the groundwork for making it easier for updates to be pushed to NetSuite instances running extensions that have been released as SuiteApps.
Finally, as activation now happens on NetSuite servers, this means that don't require you to sit and watch them happen. It also means that you can queue up multiple activations — multiple requests for activation on different domains will be processed one-by-one in the order they were added. Nice.
Custom Page Types and Layout Selection
This is quite an exciting new feature for developers. Typically, when users create a new page in the site management tools, they can only add blank landing pages. With page types, developers can now define new types of pages for users to add.
What these page types enable you as developers to do is to define layouts for the user to choose from. These come in the forms of templates that you include with your extension.
I included the PageType component above because while it is an addition to the extensibility API, its purpose is relatively singular: to facilitate this new functionality.
Here are some ideas for custom page types:
In other words, a good starting point, conceptually speaking, is to think about the existing landing pages that you have and how they could be enhanced by having pre-defined views and templates, like standard SuiteCommerce and SuiteCommerce Advanced customizations.
However, that is not the limit of its power. It also enables a large number of pages within your site to be available to 'layout selection'. In other words, you can create alternative layouts for popular pages on your web store — such as the product detail page or product list page — and define new templates for those pages, for SMT users to choose from.
This is pretty powerful, right? At first, we moved the styling power from the SuiteCommerce Advanced source code to separate themes, so that it can be modified separately by designers and manipulated in the site management tools by administrative users; now we are enabling those same users by letting them select new developer-created layouts. You, of course, just need to create them!
Automatic Image Compression
A new feature which I think is cool, is image compression. While we already had a resizing service that did some image compression, we now offer a new tool that will apply image compression to all images served to your web store from the Web Site Hosting Files folder.
It's an opt-in feature available within the site setup record, and comes with a number of different options (although we have a recommended level of compression that we think will provide optimal results). You can also configure it on a folder-level basis too, if there are groups of images for which you want different levels of compression.
Just note that there are some restrictions on it — read the docs for the full list — and they include file formats (JPG and PNG only) and image sizes between 500KB and 5MB. Remember, it's still good practice to compress your images before you upload them. The good news, though, is that even if you don't, our compression tools can still follow our recommended best practice: color palette reduction and metadata removal (as long as you configure it that way).
Keep in mind, this list was just the ones I think most important for developers. There are also other great features in the release, such as:
- B2B Cart — if you sell to businesses, this feature allows each contact of a business customer to have their own cart. Each cart is independent and cannot be seen by other contacts, and, when they place orders, emails are typically only sent to the cart owner.
- System Email Templates Enhancements — in the last release, we announced system email templates for web stores; in this release, we have made a number of improvements including asynchronous sending (for some emails) to improve performance, and also an email preview tool (to make testing much easier)
- Customer-Specific Promotions — you could do some targetting of promotions prior to this release, but this enhancements lets you create promotions based on any value on the customer record (eg billing address, sales rep, price level, custom fields, etc), purchase history (eg has spent >$x last month) or a number of events (eg registered for an account online).
- And more...
Anyway, as I say, there's a whole lot more in the release so, again, head over to the release notes for the full details.
You can also check out what's new in NetSuite 2019.1, by reading our blog.