Mont Blanc Release of SuiteCommerce Advanced

This topic applies to

Applies to

SuiteCommerce Advanced | Mont Blanc

Welcome to the Mont Blanc release of SuiteCommerce Advanced! This version includes the following enhancements:

The following bundles are available:

  • SuiteCommerce Advanced MontBlanc: Bundle ID — 107016

  • Site Builder Extensions MontBlanc: Bundle ID — 107017

  • Site Builder Extensions Premium MontBlanc: Bundle ID — 107018

Important

To take advantage of new features in existing implementations, you must migrate the new code to your existing code base. For details, see Update SuiteCommerce Advanced.


Click the following link to download a .zip file containing .patch files for the Mont Blanc release:

Mont_Blanc_2.0_Patch_Files.zip

These .patch files contain the complete diffs between this release and the Denali R2 release.

Use a tool such as Crucible to open these files and graphically visualize all additions, deletions, and modifications. You can also view .patch file in a text editor. They are displayed with appropriate syntax highlighting when the syntax is set to diff.

Change in Supported Version of Node.js

With this release of SuiteCommerce Advanced, the developer tools were modified to support Node.js version 4.2.6 in addition to support for version 0.12.x. See Using the Developer Tools for more information.

Quotes

With this release of SuiteCommerce Advanced, users can now create quotes from your website. With this feature enabled, a Request a Quote link appears by default to all users (logged in or not) in your site’s Shopping and My Account header. These links direct users to a page where they can search for and add items, enter shipping information, and add optional user comments to build a quote request.

Users can eventually make purchases from a quote, but only after the quote reaches a certain status in the corresponding Estimate record. You configure the status that triggers this functionality by editing code in the Configuration.js file. You can also configure the time (in days) that all quotes expire after initial submittal.

To enable this feature you must perform the following tasks:

  • Install the latest SCA and Reference Product List Records bundles.

  • Edit the Customer Center Role permissions.

  • Set up Search Fields.

  • Customize the Standard Quote form to include shipping information.

  • Configure the Configuration.js to set the Customer Status Internal ID that will allow a quote to be purchased.

  • Configure the Configuration.js to define the invoice form used to create a purchase from a quote.

Note

The Quotes feature will function without the Reference Product List Records bundle installed. However, items built in a product list will be non-persistent and will be lost if the user leaves the site before submitting the quote. Installing the Reference Product List Records bundle ensures that product list items are persistent. Shipping information and user comments are non-persistent, regardless of bundle installation.


Optional customizations include:

  • Disabling the Create a Quote functionality, allowing users to view quotes and make purchases, without directly creating quotes

  • Customizing sales representative information

For detailed information on enabling the Quotes feature, see Quotes.

Purchases From Quotes

After a user submits a quote request, any web site links to Review or Purchasing pages are disabled. This prevents users from making a purchase from that quote until the merchant allows it.

In NetSuite, the Estimate record’s Status field lists all available Customer Statuses for the quote. When the merchant manually changes this field to the Customer Status whose Internal ID matches the ID you set in the Configuration.js file, all web site links to Review or Purchasing pages are enabled. The user can then make a purchase.

The Customer Status List at Setup > Sales > Customer Statuses displays the Customer Statuses configured for your account and their associated Internal IDs. You declare this Internal ID using the purchase_ready_status_id property in the Configuration.js file.

All quotes use the same configurable expiration, in days. After this time expires, the quote can no longer become a purchase. You set this expiration using the days_to_expire property in the Configuration.js file.

In the following example, quotes created on your site expire 14 days after the initial RFQ. Assuming a quote has not expired, it becomes available for purchase when its associated Estimate record reaches the Qualified Customer Status (Internal ID = 7).

,   quote: {
      days_to_expire: 14
,   purchase_ready_status_id: '7'
      }

You must also configure what transaction form is used to create the purchase. You set the Internal ID of the chosen transaction form using the invoice_form_id property in the Configuration.js file.

,   quote_to_salesorder_wizard: {
      invoice_form_id: '89'
   }

Disable Create a Quote Functionality

After setting up your account for quotes, you can configure SuiteCommerce Advanced to disable a user’s ability to create a quote from your site. Users can view quotes and make purchases, but they can not create a quote directly using your site.

To do this, delete all lines within the distro.json file that contain either of the following references:

RequestQuoteAccessPoints
RequestQuoteWizard

See Disable Quotes for detailed information.

Customize Sales Representative Information

The Quotes feature displays Sales Representative information on your site’s Quote Details page. You can customize your web site to display the Sales Representative as configured in NetSuite. If your NetSuite account does not have Sales Representative information set up, or you do not want to display the information, you can add a customized message instead.

What displays on your site depends on the SalesRep field on the quote’s Estimate record in NetSuite.

  • If the SalesRep field for the quote lists a sales representative whose contact information (phone number and e-mail address) is set up in NetSuite, that information displays on the Quote Details page.

  • If the SalesRep field lists a sales representative whose contact information is not set up in NetSuite, your site defaults to display customizable contact information found in the SC.MyAccount.Configuration.js file.

  • If the SalesRep field is blank, your site displays two disclaimer messages, one under the Order Summary and one at the bottom of the page. You can customize the text of these messages in the SC.MyAccount.Configuration.js file.

See Customize Sales Representative Information for instructions.

More Information

Before setting up the Quotes feature on your SuiteCommerce Advanced web site, understand the following information:

  • This feature does not function in Site Builder Basic. Site Builder Premium supports creating quotes and making purchases.

  • This feature does not support subsidiaries.

  • Users can add items to a quote, regardless of the item’s out of stock behavior.

  • Users cannot change the delivery method of a quote after the quote becomes a sales order. The site’s default delivery method is used.

  • Handling costs are not displayed in the summary total of the quote, but they are added to the order total after the quote becomes a purchase.

  • Parent matrix items cannot be added to a quote, only specific child items.

  • The Multiple Ship To feature is not available when making a purchase from a quote.

  • Payment methods through external gateways are not available when making purchase from a quote.

  • Gift Certificates cannot be added to quotes.

  • When a user submits a quote, SuiteCommerce Advanced does not automatically send an email notification of the submission by default. This action can be set up in NetSuite as a Workflow Action (see the help topic Workflow Elements) or as a User Event Script (see the help topic User Event Scripts).

Site Access Restriction

With this release of SuiteCommerce Advanced, you can now restrict access to your web site in one of two ways:

  • Protect your entire website so that only registered customers can log in to view your web site.

  • Protect pricing information only. Visitors can view your site, but they must register and log in to view pricing information.

These features are disabled by default and require set up in NetSuite and some minor customization of the Configuration.js file to function.

Warning

The Search API is public and contains all the information exposed by the fieldset being used. Enabling password protection restricts users from accessing some or all of your site. However, a user who knows a URL that calls the Search API could access some of this information.


Restrict Access to Your Entire Site

You can now restrict your entire site to only logged in users. If this feature is enabled, visitors must register and log in to see the contents of your site. The site redirects unauthenticated visitors to a Login page with a link to a Registration form where they must register on your site to gain access. After a logged in user does not interact with the site for 30 minutes, their session ends. The first action they perform that calls a service redirects them to a Login page.

To enable this feature, you must perform some minor NetSuite set up and set the passwordProtectedSite property to true in the Configuration.js file. For detailed information on restricting all access to your site, see Restrict Access to Your Entire Site

Restrict Access to Pricing Information

You can now restrict pricing information to only registered users. If enabled, visitors have access to your site but they must log in to view prices and purchase products or services. This feature lets you hide prices from competitors or wholesalers and encourages users to register on your site.

With this feature enabled and a user is not logged in, SuiteCommerce Advanced replaces prices with a log in message and link. The user can follow this link to access a Login/Registration page where they must register on your site to view prices or make purchases. After a logged in user does not interact with the site for 30 minutes, their session ends. The first action they perform that calls a service redirects them to a Login page.

Note

Restricting access to your entire site overrides this feature.


To enable this feature, you must set the loginToSeePrices property to true in the Configuration.js file. For detailed information on restricting all access to your site, see Restrict Access to Pricing Information

SCIS Integration

With this release of SuiteCommerce Advanced, integration with the SuiteCommerce InStore platform is now possible. SuiteCommerce InStore is a web-based point-of-sale application that uses an in-store, tablet-delivered commerce portal connected to your NetSuite backend.

With this feature enabled, you can incorporate your SuiteCommerce InStore transactions into your SuiteCommerce Advanced web site order management and billing components. With this feature, your shoppers can now:

  • View details of all online (SCA) and in-store (SCIS) purchases and returns in their My Account section of your web site.

  • Distinguish between online and in-store purchases.

  • Archive in-store purchase information (receipts) as a PDF.

  • Initiate an online return of a product purchased in store.

  • Reorder items online for products purchased in store.

  • View cash sales from all channels in their Transaction History page.

  • Make online payments for in store purchases that were settled on terms (invoices).

SuiteCommerce purchases originate from either online (SCA) or in-store (SCIS) sales. In the backend, NetSuite manages these different purchase types using different types of Transaction records. For example, an order placed online through your SCA site creates a Sales Order transaction record. Another purchase placed in your store using SCIS may require the Cash Sale or the Invoice record, depending on the transaction type.

The SuiteCommerce InStore Integration feature displays all of a user’s transactions in several My Account pages, marking each as Online or In Store, regardless of the Transaction record used. This creates a seamless omni-channel experience for your customers.

Important

Users will see an Origin column in their Purchase History and Transaction History pages where the Status column used to be. This Origin column designates the purchases’s origin as Online or In Store.


The following table lists the purchase origin (as displayed on your web site) and its associated SuiteCommerce application, transaction type, and NetSuite record.

Origin

Application

Transaction Type

Transaction Record in NetSuite

Online

SuiteCommerce Advanced

Online purchase

Shipped to a single address

Sales Order

SuiteCommerce Advanced

Online purchase

Shipped to multiple addresses

Sales Order Multi-Ship To

In Store

NetSuite

Added directly into NetSuite

Sales Order

SuiteCommerce InStore

NetSuite Point of Sale

In-store purchase

Single payment method

Cash Sale

SuiteCommerce InStore

NetSuite Point of Sale

In-store purchase

Multiple payment methods

Invoice

SuiteCommerce InStore

NetSuite Point of Sale

In-store purchase

Mixed delivery

Single payment method

Sales Order Multi-Ship To

Cash Sale

SuiteCommerce InStore

NetSuite Point of Sale

In-store purchase

Mixed delivery

Multiple payment methods

Sales Order Multi-Ship To

Invoice

To implement SCIS Integration, you must have the latest SuiteCommerce InStore and SuiteCommerce Advanced bundles installed in your account. You must also set the isSCISIntegrationEnabled property to true in the Configuration.js file. For detailed information on this feature, see SuiteCommerce InStore Integration.

Alternative Payment Methods

With this release of SuiteCommerce Advanced, setting up a third-party payment option is now available. With this feature enabled, users have the option to check out using third party companies offering payment processing services, such as Google Wallet. This selection redirects users to a third-party web site for payment. Users are then prompted to leave your site and enter the third-party payment site for authentication.

This feature does not require any code customization. However, you must set up your NetSuite account for external payments. See Alternative Payment Methods for detailed information.

Important

To create a payment gateway to a third-party payment service provider, an administrator must install the correct SuiteApp that integrates the payment method into your account. You must install a SuiteApp developed and distributed by a SuiteCloud Developer Network (SDN) Partner. See Partner SuiteApps for more information about SuiteApps developed and supported by SDN Partners.

If no payment service provider offers a SuiteApp to meet your needs, you can create your own Payment Processing implementation. To build, test, and bundle a Payment Processing plug-in implementation, you must have the appropriate authorization from NetSuite. You must also be a member of the SuitePayments program. To obtain this authorization and to be considered for the program, see SuiteApp.com.


Note

With Mont Blanc release of SuiteCommerce Advanced, the Order Details page no longer provides information on the shipping method, shipping address, billing information, or payment type.


Cancel Order

With this release of SuiteCommerce Advanced, users can now cancel a purchase that has been submitted but not processed. Users have the option of clicking a Cancel Purchase button in the Purchase Details page.

Visibility of this button is dependent on the purchase fulfillment status. If the Sales Order record’s Status field lists anything other than Pending Approval, the purchase cannot be canceled, and the Cancel Purchase button does not appear. This button appears when the Sales Order record lists any other status.

The feature does not require any setup or code customization.

Real User Monitoring (RUM) Integration

This release of SuiteCommerce Advanced provides integration for the Real User Monitoring (RUM) feature. Real User Monitoring enables you to extract and store metrics about how users interact with your website. This information is stored in a backend database in NetSuite.

You can analyze this data using tools available in an upcoming release of the Application Performance Management (APM) SuiteApp.

To implement this feature, SuiteCommerce Advanced uses the Sensor utility module. When Real User Monitoring is enabled, this module is automatically loaded when the application starts.

For detailed information on this feature, see Sensors (Real User Management) Integration.

Google Tag Management

This release of SuiteCommerce Advanced includes the new Google Tag Manager module. GTM enables you to manage site tracking and analysis tags and code snippets on your site. This eliminates the requirement to maintain individual pieces of code for things such as Google Universal Analytics or Adwords because everything is managed through GTM. GTM is vendor neutral and enables you to manage not only Google tags, but also tags from third parties such as Bing.

The GTM Container Generator aids you in implementation of GTM by using your tracking account information to generate a JSON file. This JSON file is imported into your GTM account. For more information on implementing and using Google Tag Manager, see Google Tag Manager.

My Account Changes

With this release of SuiteCommerce Advanced, new labels on your web site’s My Account pages are displayed. In the My Account overview page, the label, Orders, in the My Account accordion list is replaced with Purchases. Also, the My Orders page is now titled My Purchases.

This is a global change and is not configurable.

URLs for Major Payment Methods

With this release, SuiteCommerce Advanced changes the way it locates Payment Method logos to display during checkout. Therefore, you must make minor changes to your NetSuite Payment Method records to display the bundled logos that were used in the previous release. These changes are described in Previous Approach.

Previous Approach

Previously, SuiteCommerce Advanced used URLs configured in the SC.Configuration.js file to locate Payment Method logos. The creditCardIcons object superseded any Flags set up in the Payment Method record in NetSuite and linked to logos that were included in the SuiteCommerce Advanced bundle.

Previous Code
creditCardIcons: {
'VISA': 'img/visa.png'
, 'Discover': 'img/discover.png'
, 'Master Card': 'img/master.png'
, 'Maestro': 'img/maestro.png'
, 'American Express': 'img/american.png'
} 

Updated Approach

After migrating to the Mont Blanc release of SuiteCommerce Advanced, the SC.Configuration.js file no longer contains the creditCardIcons object. The SC.Configuration.js file now uses the paymentmethods array to point to the Payment Method record in NetSuite using the Payment Method ID.

To link to the bundled logos, enter the following links in the URL column on the Payment Visuals subtab of the associated Payment Method record in NetSuite. See the help topic Creating a Payment Method for setup instructions.

Note

To maintain design continuity on your SuiteCommerce Advanced site, we recommend using the following URLs and the logos bundled with this and previous releases. These differ from the defaults as listed in Creating a Payment Method. Ensure that each image is uploaded to your NetSuite File Cabinet in the appropriate locations.


Payment Method

URL

Visa

img/visa.png

Discover

img/discover.png

Master Card

img/master.png

Maestro

img/maestro.png

American Express

img/american.png

Updated Code
,   paymentmethods: [
      {
         key: '5,5,1555641112' //'VISA'
      ,   regex: /^4[0-9]{12}(?:[0-9]{3})?$/
      }
   ,   {
         key: '4,5,1555641112' //'Master Card'
      ,   regex: /^5[1-5][0-9]{14}$/
      }
   ,   {
         key: '6,5,1555641112' //'American Express'
      ,   regex: /^3[47][0-9]{13}$/
      }
   ,   {
         key: '3,5,1555641112' // 'Discover'
      ,   regex: /^6(?:011|5[0-9]{2})[0-9]{12}$/
      }
   ,   {
         key: '16,5,1555641112' // 'Maestro'
      ,   regex: /^(?:5[0678]\d\d|6304|6390|67\d\d)\d{8,15}$/
      }
   ,   {
         key: '17,3,1555641112' // External
      ,   description: 'This company allows both private individuals and businesses to accept payments over the Internet'
      }
   ]

Issue Fixes

This release includes many issue fixes including:

Product Review Records Imported via CSV are Not Displaying on Product Page

Previously, imported product review records from a comma-separated variable (CSV) file did not display on the Product Page.

To fix this problem, NetSuite updated code in the backend and released a Reference Product Review Records bundle update.

Bundle Update

NetSuite replaced the following code in the NS_PR_SS_User_Event.js file within the Reference Product Review Records bundle.

Previous Code:

function beforeSubmit (action)
{
    'use strict';

    var user = nlapiGetUser()
    ,   new_review = nlapiGetNewRecord();
    // false when deleting
    if (new_review)
    {
        var item_id = new_review.getFieldValue('custrecord_ns_prr_item_id');
        // if the record is beeing created
        // and the user is logged in
        if (action.toString() === 'create' && user)
        {
            setReviewUser(new_review,user);
            verifyItemPurchase(new_review, user, item_id);
        }

        // if the review is not assigned to
        // the item record
        if (!new_review.getFieldValue('custrecord_ns_prr_item') && item_id)
        {
            setReviewItem(new_review, item_id);
        }
    }
}

Updated Code:

function beforeSubmit (action)
{
    'use strict';

    var new_review = nlapiGetNewRecord();
    // false when deleting
    if (new_review)
    {
        var item_id = new_review.getFieldValue('custrecord_ns_prr_item_id')
        ,        user = new_review.getFieldValue('custrecord_ns_prr_writer');
        // if the record is beeing created
        // and the user is logged in
        if (action.toString() === 'create' && user)
        {
            verifyItemPurchase(new_review, user, item_id);
        }

        // if the review is not assigned to
        // the item record
        if (!new_review.getFieldValue('custrecord_ns_prr_item') && item_id)
        {
            setReviewItem(new_review, item_id);
        }
    }
}
Backend Code Update

NetSuite replaced the following code in the ProductReviews.Model.js, found in the ProductReviews@2.1.0/SuiteScript folder.

Previous Code:

data.writer && data.writer.id && review.setFieldValue('custrecord_ns_prr_writer', data.writer.id);

Updated Code:

if(session.isLoggedIn2())
{
   review.setFieldValue('custrecord_ns_prr_writer', nlapiGetUser() + '');   
}

Rejected Product Review Star Ratings Still Appearing

Previously, when a NetSuite user set a Item record’s Product Review Status field to Rejected, the associated product review still displayed on the web site’s Star Ratings area.

Reference Product Review Records bundle fixes this problem.

With this bundle update, you can navigate to an item record’s SuiteCommerce Extensions tab (Product Reviews subtab) and change any Product Review’s Status field to Rejected. The rejected review will no longer appear on your site.

NetSuite replaced the following code in the NS_PR_SS_User_Event.js file within the Reference Product Review Records bundle in this release.

Previous Code:

function getRating (id)
{
   'use strict';

   var results = nlapiSearchRecord(
      'customrecord_ns_pr_review', null
   ,   [
         new nlobjSearchFilter('isinactive', null, 'is', 'F')
      ,   new nlobjSearchFilter('custrecord_ns_prr_item', null, 'is', id)
      ,   new nlobjSearchFilter('custrecord_ns_prr_status', null, 'is', approved_status)
      ]
   ,   [
         new nlobjSearchColumn('internalid', null, 'count')
      ,   new nlobjSearchColumn('custrecord_ns_prr_rating', null, 'avg')
      ]
   );

   if (results && results.length)
   {
      return {
         count: results[0].getValue('internalid', null, 'count')
      ,   average: parseFloat(results[0].getValue('custrecord_ns_prr_rating', null, 'avg')).toFixed(1)
      };
   }

   return null;
}

Updated Code:

function getRating (id)
{
    'use strict';

    var results = nlapiSearchRecord(
        'customrecord_ns_pr_review', null
    ,   [
            new nlobjSearchFilter('isinactive', null, 'is', 'F')
        ,   new nlobjSearchFilter('custrecord_ns_prr_item', null, 'is', id)
        ,   new nlobjSearchFilter('custrecord_ns_prr_status', null, 'is', approved_status)
        ]
    ,   [
            new nlobjSearchColumn('internalid', null, 'count')
        ,   new nlobjSearchColumn('custrecord_ns_prr_rating', null, 'avg')
        ]
    );

    if (results && results.length)
    {
        var average = parseFloat(results[0].getValue('custrecord_ns_prr_rating', null, 'avg'));

        if (isNaN(average))
        {
            average = 0;
        }

        return {
            count: results[0].getValue('internalid', null, 'count')
        ,   average: average.toFixed(1)
        };
    }

    return null;
}

Facet Priority Ignored When Using the URL Component as a FacetID

Previously, the faceted navigation view ignored the priority property configured in the SC.Shopping.Configuration module. Due to an error in the code, facet fields did not display as expected. The error has been corrected, and the priority property now sets the display order of the facet.

The Facets.FacetedNavigationItems function was modified in the following file: Facets.FacetedNavigation.View.js

Previous Code:

'Facets.FacetedNavigationItems': function()
   {
      var translator = FacetsHelper.parseUrl(this.options.translatorUrl, this.options.translatorConfig)
      ,   ordered_facets = this.options.facets && this.options.facets.sort(function (a, b) {
         // Default Prioriry is 0
         return (translator.getFacetConfig(b.id).priority || 0) - (translator.getFacetConfig(a.id).priority || 0);
      });

Updated Code:

'Facets.FacetedNavigationItems': function()
   {
      var translator = FacetsHelper.parseUrl(this.options.translatorUrl, this.options.translatorConfig)
      ,   ordered_facets = this.options.facets && this.options.facets.sort(function (a, b) {
         // Default Priority is 0
         return (translator.getFacetConfig(b.url || b.id).priority || 0) - (translator.getFacetConfig(a.url || a.id).priority || 0);
      });

Updated and New Modules

Many of the SuiteCommerce modules have been updated for this release. For a complete comparison of before and after versions, view the diff-denaliR2-montblanc-distro.patch file.

New modules for this release include the following:

  • cartItems@1.0.0

  • promocodeForm@1.0.0

  • quickAdd@1.0.0

  • QuoteToSalesOrder@1.0.0

  • QuoteToSalesOrderWizard@1.0.0

  • QuoteToSalesOrderValidator@1.0.0

  • RequestQuoteAccessPoints@1.0.0

  • RequestQuoteWizard@1.0.0

  • Sensors@1.0.0

  • Transaction@1.0.0