NetSuite Simple Sales Configurator

A while ago we developed a Suitelet for a client that would make it easier for sales reps to find items, and then find related items, and quickly add them to a quote, opportunity or sales order in NetSuite

Often, it’s difficult for a sales rep to navigate through very long lists of items in NetSuite and very often the incorrect item is selected from a list of very similar items or services.  Our app lets you decide which items are related to each other and either let the rep decide, or, make certain related items mandatory.

This kind of Suitelet can be made to look and behave however you would like.  Perhaps you need to do some complex calculations for the rep before putting the items in. Perhaps there’s custom information that needs to be captured from elsewhere such as from customer license data.  All things are possible.

Check out the video and let us know if you want something similar.

Recorded Webinar – New Pardot NetSuite Connector Demo

The new Pardot NetSuite Connector is currently running! We’re using it live in our own Pardot and NetSuite accounts and adding functionality to it every day.

We recently gave a Webinar presentation to existing clients that included a demonstration of the system and a discussion about the cool features we have planned. We also discussed the timing of the Beta program and the initial cost of the connector.

Just a reminder that your existing Pardot/NetSuite connector that has been provided by Pardot all along is being discontinued in mid-2017. This new connector we’re developing is designed to replace it and add more functionality. It will be a seamless experience for you, but it is a good idea to start planning for the transition today.

Click below to watch this webinar. Grab a cup of coffee, and take 40 minutes and get up to speed.

The new Pardot NetSuite Connector will replace the legacy connector in a very seamless way and will have several advantages.

  • Faster – We estimate we’ll be able to sync at least several times more records than before.
  • Contacts – The new Pardot NetSuite Connector will be able to sync more field types.
  • Accounts – It will support company to account syncing.
  • Opportunities – No longer need to manually import CSV to get Opportunities into Pardot
  • Campaigns – Sync Campaign Titles between the two systems.
  • Configurable – Limit syncing to specific records based on custom criteria
  • Better Duplicate handling – Use your NS system duplicate settings instead of Pardot
  • Multi Touch – Previously an add-on this will be included in the connector to do more advanced reporting in NetSuite.

 

Pardot is still a very popular marketing automation application among NetSuite users. Many of our clients are doing great things with both systems. Pardot is being used to nurture new leads before handing them to the sales team and to onboard new customers with custom engagement programs. With Pardot and NetSuite integrated, the options for automation are endless.

Not only does the marketing team have a lot of capability, but it’s easy to use for the average user.  So the marketing team has a great platform, and the sales team can continue to operate directly in their NetSuite dashboards.

Pardot NetSuite Connector – Work Progressing

Audaxium is making fast progress on the new Pardot NetSuite connector.  We’re on track to make this a very smooth experience for those who use the existing connector and give current and future users additional functionality to ensure they get the most out of the two systems.

Many clients have been asking, “What’s going on with the new connector?”  The answer is that we’re working hard on it. Beta will be available this fall, and a production version ready during the winter giving clients months and months to transition from the old connecter.

The transition will be very seamless and will not cause a disruption to common processes. Certain NetSuite customizations may need to be updated slightly. An example may be a custom workflow that looks for the old user that behaved as the Pardot NetSuite Connector from the Pardot side.

  • Overall, the connector will be far more functional than the original one and we’re planning on the following features.
  • More easily filter records to NOT sync, from NS, such as records from certain subsidiaries
  • Automatically sync Opportunities
  • More flexible field mapping to record driven fields
  • Bi-Directional Sync
  • Option for Campaign creation in NetSuite, to match Pardot
  • Multi Touch Reporting in NetSuite via Campaign Responses
  • Can be deployed to a Sandbox Account for Testing
  • Faster Sync Speeds

The nice thing about our solution is that it doesn’t rely on middleware like some other marketing automation solutions and NetSuite.  By being built for NetSuite you have more control and can move more data directly with the Pardot API.

The Pardot NetSuite Connector will be able to sync Prospects, Accounts, Campaigns, and Opportunities if you wish.  You’ll be able to filter each of these records so only the ones you want to sync will do so.

Here are some screenshots from the Pardot NetSuite Connector so far.  If you would like more information, please contact us via the form below.

 

Pardot NetSuite Connector

 

pardot-connector-bidirectional

 

pardot-connector-mapping

 

pardot-connector-filter

Webfonts in Email?

Hey Audaxium, we use this super sexy, much custom mega font on our website…can you use it when you design our custom email templates?

The answer used to be a very reluctant, sorry no…

What is this?
Webfonts are a means of using/displaying custom fonts that aren’t loaded by default in a browser (or in the case of email, on your device).
Do they work?
Webfonts work very-well with most (internet) browsers.
Webfonts aren’t entirely (or even widely) supported for emails. A more complete list of limitations USING WEB FONTS IN EMAILS.

As a result, emails designed using client specific custom (Web)fonts tend to look amazing in the clients eye as the project is reviewed and approved (designed, hosted and displayed locally – where the font resides).
Sadly, this satisfaction doesn’t last long.
Once the email is loaded into Pardot and the first instance is sent…the limitations of Webfonts are seen live and first hand…

Because of this (that^), my position has ALWAYS been to design for deliverability first.
Along with responsive design, Outlook and Gmail issues, that means the exclusive use of EMAIL SAFE FONTS.

Mix them, match them, do what you will…there are some excellent choices there…no?
Bland yes.
Predictably bland, however.

Fast forward to the present, add in Google Fonts as well as growing support for Webfonts (particularly Apple, Android and the Outlook.com app) my position has been altered (mostly).

Hey Audaxium, we use a super sexy, much custom mega font on our website…can you use it when you design our custom email templates?

The answer is now a convoluted, sure-but…

Successful use of Webfonts in custom email templates requires a little bit more pre-planning and consideration.
Two of the things to consider when using Webfonts in your email:

Fall-Back Fonts:
AKA font-family
If you happen to select ROBOTO as your Webfont, be sure to select suitable alternative fonts to use in the event that your first choice doesn’t display.
For example: style=”font-family: ‘Roboto’, Arial, Helvetica, sans-serif;”
Should Roboto not load as you intended, the email client (should) try Arial followed by Helvetica followed by a catch-all ‘sans-serif’ font to display the text.
When creating your fall-back fonts be sure to select (similar) fonts of increasing acceptance and (ideally) end with an email-safe font. Other things to consider.
The end product should look (mostly) exactly as expected across all browsers.

Pardot Click Counts:
AKA http(s) link tracking
Almost immediately after starting to experiment with Webfonts in email (specifically Pardot) I noticed an increase in reported ‘Clicks’.
Huzzah and hurray! My incredible creation works better!
No.
That was just Pardot seeking out all http and https links in my email and (because they were actually being loaded) counting them as ‘Clicks’. Earlier this year they wrote about it…but not early enough to save me the hours trying to find out why.
In the past you would define your Webfont using the web-standard, thusly:
<link href=”https://fonts.googleapis.com/css?family=Roboto” rel=”stylesheet”>
Outside of the style designation, somewhere at the top…just…there in the email HTML.
Obviously, Pardot doesn’t like that, so instead place the font inside of the <style> tags and import it thisway:
<style>
@import ‘https://fonts.googleapis.com/css?family=Roboto‘;
</style>
This will not impact reporting in Pardot.

Want help implementing Webfonts in Pardot?

Pardot NetSuite Connector – New Version

Recently it was announced that Pardot was deprecating their internal support for third party CRM connectors such as NetSuite, Microsoft Dynamics CRM and Sugar CRM.  While this is unfortunate, there is no need to worry.  Audaxium is currently developing Version 2 of the Pardot to NetSuite Connector.

Version 1 of the Pardot to NetSuite Connector is scheduled to go offline in the summer of 2017.  We will have a new version of the connector created well in advance of that date in order to test and to migrate existing field mapping.  We have been working on our own integration for some time, and small parts of it have been in use for a couple years.  We’re confident that Version 2 will improve the integration that existing clients have come to rely on.

The new Pardot NetSuite connector will have some advantages over the old one that will make continuing to use Pardot and NetSuite an even better experience in the following ways.

  • More easily filter records to NOT sync, from NS, such as records from certain subsidiaries
  • Automatically sync Opportunities
  • More flexible field mapping to record driven fields
  • BiDirectional Sync
  • Option for Campaign creation in NetSuite, to match Pardot
  • Multi Touch Reporting in NetSuite via Campaign Responses
  • Can be deployed to a Sandbox Account for Testing
  • Faster Sync Speeds

pardot-connector-filter

Most importantly, this connection will not rely on a third party middleware application for you to maintain.  It will be coded and “Built for NetSuite” inside of NetSuite. Configuration and updates to the system will be done there, under the control of a NetSuite Admin.

Our plan is to have a beta version ready in 2016 and a Production version in early 2017.  The product will be rolled in in phases, with Contacts and Accounts the first records to sync.

If you have any questions, please contact us.

 

NetSuite Tip – How to Color Code Sublist rows/cells in Suitelet

NetSuite Suitelets are just cool. I’ve said this before and I’ll say it again. It’s just REALLY COOL!.  One of the most often used feature is the ability to add Sublist from variety of sources such as Saved Search or some other list.  What I’ve always wanted to be able to do is to color code different rows or different cells depending on the value on the row.  Color coding is great to grab the users attention but currently there isn’t any native API that allows developers to do this.

Long story short, I no longer have to WANT because it IS possible to do it.

WARNING!
This method of color coding sublist rows and/or cells is NOT native to NetSuite. It uses HTML DOM objects. If NetSuite decides to change the way HTML is generated, this code WILL Break!

Sublist Row Color Sample

Here is sample screen shot of what normal static sublist looks like in Suitelet.

NetSuite generated Sublist with No Color Coding

NetSuite generated Sublist with No Color Coding

In this sample, I want to color code rows where Lead Category is Individual. Using our HTML DOM method, I was able to color code rows that match my criteria.

NetSuite generated Sublist WITH Color Coding

NetSuite generated Sublist WITH Color Coding

As you can see, it immediately enhances the way information is presented to the user!

How to Color Code Sublist Rows

This approach is not done by NetSuite supported API calls but it IS done via code snippet generated by NetSuite. Have you ever created a saved search and added your own row coloring? Sure you have. It’s one of the cool features of NetSuite saved search. If you look at the HTML rendering of that saved search, you will see how NetSuite overrides CSS to color code the row.

When NetSuite color codes search result rows, it overrides the TD tags style sheet with following CSS code:

background-color: #ff0000 !important;border-color: white #ff0000 #ff0000 #ff0000 !important;

The sample screen I’ve built uses Client Scripts’ Page Init function to go through and color code different rows based on my logic. In this case, color code all rows with Category of Individual to Green.

Here is code sample in SuiteScript 2.0

Please keep this in mind. With SuiteScript 2.0, there appears to be a bug where if you render the column value as INLINE, you can’t get to it by getSublistValue method. In SuiteScript 1.0, this wasn’t an issue. If you are using SuiteScript 2.0, make sure to add a hidden column for each of the INLINE column that you plan to access via client script.

var tdColor = '#B2FF33', //(Light Green)
    //Grab the category value
    catValue = slrec.getSublistValue({
    	'sublistId':'custpage_list',
    	'fieldId':'list_leadcategoryhide',
    	'line':i
    });
    		
    //Row Change core
    if (catValue == 'Individual')
    {
    	//We are going to be using HTML DOM object to accomplish our goal.
    	//IMPORTANT:
    	//	Hacking DOM object isn't supported by NetSuite.
    	//	IF NetSuite changes the way forms and element IDs are generated,
    	//	THIS WILL Fail.
    			
    	//NetSuite uses following format to generate TR Element ID:
    	//	[ID of sublist]+"row"+[line Index]
    	//	Example: 
    	//		Line 1 of sublist would be custpage_listrow0
    	var trDom = document.getElementById('custpage_listrow'+i),
    	    //We now grab child element of the TR tag.
    	    //  These will be individual TD tags that represents the columns 
    	    //	we've added on the Suitelet Sublist
    	    trDomChild = trDom.children;
    	    //IMPORTANT:
    		//	Based on CURRENT generation, we know that last column is hidden
    		//	We ONLY want to change the back ground color of Cells being SHOWN
    		//	This can be coordinated during your SL development.
    		//	This Maybe NS SS2.0 defect
    	for (var t=0; t < (trDomChild.length-1); t+=1)
    	{
    		//get the child TD DOM element
    		var tdDom = trDomChild[t];

    		//We are now going to override the style of THIS CELL 
    		//	and change the background color
    		//	by using setAttribute method of DOM object

    		tdDom.setAttribute(
    			'style',
    			//This is the magic CSS that changes the color
    			//	This is Same method used when NetSuite returns saved search results
    			//	with user defined row high lighting logic!
    			'background-color: '+tdColor+'!important;border-color: white '+tdColor+' '+tdColor+' '+tdColor+'!important;'
    		);
    	}

We are also introducing SuiteScript 2.0 Reference Guide. Purpose of this guide is to allow seasoned SuiteScript 1.0 developers to easily transition into developing in SuiteScript 2.0. It’s something that we use to help us learn and grow! We currently have small set but will continue to add on additional pages. Make sure to come back and visit them!

Take advantage of NetSuites’ customization features. Do you have any project you wish to discuss? Contact Us!!!

Comments in Saved Search Formulas in NetSuite

Did you know that you can write comments in a formula in NetSuite so that other admins can know what you’re doing?  This morning I did not, but now I do!

Rob Gama, the NetSuite Admin at one of our clients learned this and passed it on.  It’s a simple thing, that many people probably already know, but I for one hadn’t picked up on it in my years of working with NetSuite.

Often times, NetSuite formulae can get quite complicated, and it’s certainly useful to make some notes, even for ‘future you.’

All you need to do is inclose your comments in

/* These are my comments*/

Take a look at this image for an example.  Use this also to simple describe why the formula was needed instead of simply rewriting it in english.

NetSuite Comments Example

NetSuite Tip – Custom Mass Update Script

I’m sure you have encountered a situation where you want to mass delete records.  Most simple yest most useful one is to mass delete unwanted record from certain record types.  NetSuite offers native mass delete via Mass Update for Activity records such as Events, Tasks and Phone Calls. But what about others?  On this post, I’d like to introduce to you a simple Mass Update Script that will allow you to mass delete records.

WARNING:
I MUST warn you, this script is meant to be used as sample guide. Deletion of any records MUST be taken VERY Seriously in any ERP/CRM system.  This sample script should ONLY be used if you have list of stand alone records you REALLY need to get rid of easily and quickly.

Example Use Case:
I have a stand alone custom record that simply stores information for staging purposes. I need to be able to quickly and easily delete these records.  I even want to have this run and delete records on a scheduled basis so that I don’t have to worry about size of this records getting too big.

Custom Mass Update Script

While you can accomplish this goal via Scheduled script or perhaps manually going in and inline deleting 200 records at a time, I found custom mass update script to be most effective.  Using custom mass update doesn’t interfere with your script queue and it can run in parallel.

  1. Create yourself a custom mass update script that simply deletes a record.  Obviously this can be more complex and advanced.  NetSuite will pass in rec_type and rec_id which comes from Mass Update Search you set up.
    function deleteRecords(rec_type, rec_id) {
    	
    	try {
    		
    		nlapiDeleteRecord(rec_type, rec_id);
    		
    	} catch (err) {
    		log('error','Error deleting '+rec_type+' id '+rec_id);
    	}
    	
    }
    
  2. Upload and create a custom mass update script type using above script.
  3. Deploy this mass update script against records you wish to use against.
  4. Navigate to List > Mass Update > Mass Updates > Click on Custom Updates.
  5. You will see Record type(s) you deployed THIS mass update script against.
  6. Create a Saved Search that will return list of results to execute record deletion.
  7. Execute Update and/or schedule it to run

Yes. It’s that simple. We create these custom mass update script to allow admins to easily go through and delete unwanted records.

Happy coding everyone!

Do you have custom project you want to get done? We specialize in custom process automation. Contact us and let us make it work for you!

[contact-form to=’craig@audaxium.com’ subject=’We want custom project for NetSuite’][contact-field label=’Name’ type=’name’ required=’1’/][contact-field label=’Email’ type=’email’ required=’1’/][contact-field label=’Comment’ type=’textarea’ required=’1’/][/contact-form]

Best Practices -Lead Management – NetSuite & Salesforce

ideaQuite often we’re asked about lead management and what the best way is to manage this process. When marketing generates a conversion in Pardot, be it a new lead or a re-engaged prospect, how do we make sure it’s properly handed to the Sales Team? It’s often said that the majority of leads never get followed up on and it’s becoming more and more important to ensure that doesn’t happen.

Companies handle this in many different ways. Often it’s simply an email notification to the sales rep. Sometimes it’s even an email notification to a distribution list!  The trouble is that email is a terrible tool to use to keep organized. It’s too easy to miss a notification and therefore miss following up in a timely fashion.

What you really need to go is get new leads, updated companies, and new contacts onto the Sales Reps dashboard. It’s also helpful to create a phone call or task for the rep to follow up on. This is something that any admin can do in NetSuite and Salesforce.

If you’d like to see an example of the flow we would typically implement. Fill in the form below and we’ll email you a PDF with it outlined. You can then use this document in your company to have a conversation about lead management.

NetSuite Tip – Scheduled Script Best Practices

On my previous blog post, I wrote about Scheduled script execution time. Today, I would like to continue on same topic by sharing few best practices when writing scheduled script.

Use script parameters to your advantage

It’s always a good idea to parameterize potentially dynamic variables as script, user or company level parameter.  This will allow for scalability and minimum code changes.  Here are some examples of these dynamic variables:

  • Number of days before invoice should be generated
  • Error notification recipient
  • Different email templates to use during automation

Always have two deployment versions of same scheduled script

Scheduled scripts usually runs on a “scheduled” basis.  It’s always good idea to have secondary unscheduled deployment used for AdHoc execution.  In a perfect world, scheduled script will always run on time and never fail.  This world is not our world.  We live in a world where NetSuite can go down for what ever reason, unexpected errors can occur and leap year and months do happen. Your scheduled script should be designed to allow for AdHoc execution deployment type.  Here are some examples:

  • Scheduled script runs every day against data set based on current date. In this use case, current date is a dynamic variable.  AdHoc version of the script should allow for dynamic date to be used as current date.
  • Scheduled script runs against a saved search on a weekly basis. In this use case, saved search is a dynamic variable. AdHoc version of the script should allow for different saved search to run against.

Optimize performance

Scheduled script performance is usually measured in how fast your script runs. Great focus is given to database related APIs and how they are used. However, there is another important performance element and that is data set the script is executing against. When designing your scheduled script, it is really important to think about what data set you are running against first before writing your script.

Reporting and error handling

It is absolutely critical that you give great thoughts into how errors are handled and reported.  Use try/catch blocks strategically so that you catch and report errors logically.  This is especially critical for complex scheduled scripts where multiple records are touched per data row. Here are few example methods we use when dealing with errors:

  • Generate CSV log and send single notification to appropriate users that outlines each errors.
  • Design scheduled script so that saved search can be used to monitor any errors.
  • Try to include what action to take for different types of errors.
  • Include easy way to manually kick off or retry the script only against errored data sets

Here is final tip when working with Scheduled script.  Most companies do not have SuiteCloud license which allows for multiple concurrent execution of scheduled script.  If you are like most and only have ONE queue to work with, you can potentially expand it to TWO queue by using custom mass update script.  Custom mass updates can be scheduled to run against data set driven by saved search.

Do you have any complex mass data processing projects you need to get done? We specialize in these. Contact us!