Search Content

What is HowToSFMC

HowToSFMC is a Salesforce Marketing Cloud resource by a group of practitioners with a range of SFMC experience. The aim of the site is to take common “How do I?” questions and instead of make a single how-to document, crowd-source many options. Including from the wider community.

Armed with these choices, we’ll help to provide context to the decision making and empower you to build your ideal solution.

glasses photo

Join us on Slack

The email marketers behind HowToSFMC are members of a very active community of email marketers called EmailGeeks. The EmailGeeks community has grown to more than 5,000 members who participate in conversations around all things email; including two dedicated SFMC channels.

Hero Image

Video Playlists

Recent Articles

Published 05/29/2021
June 2021 - Release Notes Summary

It feels like only yesterday I was writing about an upcoming batch of feature enhancements, retirements and changes - time flies when you’re in the world of SFMC.These features should all land in your org between 5th and 19th June - if you want to see the official release features webinar from Salesforce, you can sign up to that here. However, if you can’t wait that long, I’ve been through the whole lot and have summarised what I think you need to know in time for the release.

It’s a very “giving” centric release this time around with the key element being another reminder that the V2 connector is going away… It was supposed to have already gone away back at the end of March but I’d guess that some big clients haven’t been reading these release notes reviews and there’s been a short extension. If you know anyone who is responsible for an SFMC instance that is connected to Salesforce CRM via the V2 connector, do them a favour and send them a link to this page.

Classic Cloudpages is officially at its end of life, starting from August 2021 the ability to create new Microsites and Landing Pages will be retired. January 2022 you’ll no longer be able to edit them and then in June 2022 they will be removed from the internet on your behalf. So, this is a burning platform warning - You have a year to get anything that is currently on a classic Landing Page or Microsite off of that infrastructure and into Content Builder. Please do not leave this to the last minute, there are very real contact facing risks if you have things like preference centres hosted in Classic. You do not want to be a part of the team who didn’t migrate preference centres and face the legal ramifications for preventing people from unsubscribing.

But, it’s not all doom and gloom and things going away, as I mentioned above - there’s a lot being added and enhanced in this release so let’s move on to the fun stuff!

Package Manager is getting an update in the June release to cover more elements of SFMC as a platform. Which is good. But, I’ve not been able to successfully deploy a full package based on what is currently supported… which is not so good. So, take this one with a pinch of salt. That said, if you’ve managed to get it working and have built any awesome packages that you think other Marketing Cloud users would benefit from then please get in touch. We’d love to feature some community packages to help others with this new feature. Whether it’s a bunch of standard SQL queries or an automation that enables you to identify contacts without a channel address and mark them for deletion. Get in touch and we can host and link out to your website/social profiles.

Distributed Marketing is getting a couple of comforting features in the new release which will be good news for those who have to rely on others to load content by allowing you to load images from your local machine. Marketing Cloud does recommend limiting the file size below 3Mb though, which is less than if you were hosting within Content Builder at 5Mb.

Also coming is the Distributed Marketing Collaborative Campaign (Auto Send) release going general availability rather than the limited release from last time. Just remember, anything you do from a personalised experience perspective using this tool is at the campaign level, not the person. So, if you do use this just be aware of the compromises you may have to make for your contacts.

There’s a couple of new features and expansions hitting Ad Studio in the next few weeks, including the ability to get increased visibility and control of failed leads when using Lead Capture capability. So keep an eye out for that in your Sales Cloud instance!

You will also be able to “target and tailor advertising to the millennial and Gen Z markets” using customer emails in Snapchat. You can also use Snap Lookalike Audiences to expand your reach within the Snapchat advertising ecosystem. Just remember to authorise your Snapchat account before you try to create an audience to throw at Snapchat.

Einstein gets a raft of new toys to play with in this batch of release including some predictions and previews you can use before sending out a campaign, rather than it being post event analysis for the user.

Predict Subject Line Performance will be made available in the Einstein Copy Insights dashboard, using historic subject line performance as part of a testing package. It’s not clear how this would work in relation to the target audience (or even if it does), so it may not work with pre-existing subject line optimisation that you may have in place. Such as if you already do sentiment analysis of subject lines at a contact level. But for a broad brush approach it should help level up email performance.

Einstein Content Asset testing is being added to Einstein Content Selection, so if you’re using Content Builder drag and drop blocks, you’ll be able to drag an Einstein Content Testing block into your email and see the results within Einstein Content Selection. You’ll also be able to view performance analytics at a tag level, so where Einstein is tagging your content for you you can drill into the Performance Analytics tab to see how different tags are performing.

Integrate your Einstein Content Assets with the new Einstein Content Selection Asset API. Previously you were dependent upon uploading content via the user interface or in a batch via a CSV. The new API will allow you to push assets from a Digital Asset Management platform directly to Einstein Content Selection.

Einstein STO gets a nice upgrade in this release, previously you would only be able to see the sending profile of a whole SFMC Org or Business Unit. Which is fine, but if you’re doing advanced segmentation you may want to manage the flow of communications better by knowing when a specific audience is most likely to engage with an email. With this release you’ll be able to select a Data Extension with contacts in to get a specific audience STO profile and whether there is sampling involved with the dataset.

Engagement Frequency gets the multi-channel treatment by being made available for MobilePush activities as opposed to just Email. This will include the Frequency Split activity in Journey Builder too. Unfortunately, the release notes suggest that this will need to be configured within the activity in Journey Builder, so it won’t automatically detect whether the next activity is a Push or an Email send and apply the appropriate criteria. But if you’re worried you’re sending too many Push messages, this will help to mitigate against that with the help of Einstein.

If you’ve yet to get Datorama enabled for your account, I would highly recommend you do so as soon as possible. With Discover on the way out and needing to learn a new tool that is completely different (but also pretty cool in some ways!) then please don’t leave it too late. In a past life I’ve had over 60 Discover Reports and I do not envy anyone who has to migrate that many reports to a new tool.

Datorama Reports Advanced is now officially released as part of this deployment, there’s really not much clarity about who will already have access to this based on the description of “Who” in the release notes page. It just says the upgrade is available to Corporate and Enterprise customers as well as Pro customers who have access to Discover. So contact your account rep to find out more. Datorama Advanced appears to allow a wider range of performance metrics as opposed to just Email/Journey metrics to be displayed. One such example is a new Audience Insights dashboard for your Ad Studio activities.

There are some non-premium enhancements to Datorama as well, thankfully! One of the previous limitations with the tool was that only reports of up to 8000 rows were able to be returned from a pivot table. This limitation has been removed, as has test data. Which is good because seeing a load of poorly performing Journeys called SIMULATION was not that helpful overall.

So whilst classic Landing Pages and Microsites are on their way out, Content Builder and CloudPages are getting some new functionality and improvements. There’s a few little ones to just list off

  • The Create button in Content Builder should start to load quicker when you access the tool, rather than it taking a few seconds to appear or in some cases not appear because of a timeout.
  • Canadian SMS preview for Content Builder is now limited to up to 160 characters for GSM messages, non-GSM and concatenated have different preview caps.
  • Smart Capture gets the ability to upsert into a DE with Primary Keys attached. Previously it would just append data which wasn’t ideal for some use cases.

Tenant Specific Endpoints are coming for CloudPages. This doesn’t appear to affect anyone who has a private domain, but if you currently have Pages hosted on a https://pub.exacttarget.com or https://[GUID].pub.sfmc-content.com these will be updated to be https://[TenantSpecificEndpointString].pub.sfmc-content.com. These URLs will be live from June 2021 and pages created after that will automatically be configured with the specific endpoint URLs. There will temporarily be a redirect service in place for older CloudPages, but there’s no indication for how long that will be the case.

Google Analytics 4 will be included in the Google Analytics integration between GA and SFMC. So you may find some of the old UTM Parameters you currently use are no longer needed for tracking your SFMC campaign performance. Whether this is accurate for your use cases will likely be dictated by the wider analytics ecosystem, but it may be possible to free up some attributes to add new capabilities to your reporting.

CloudPages & New CloudPages Experience will both be getting renamed. New CloudPages experience will become CloudPages and CloudPages will become CloudPages Legacy. The release notes state that this will be in place for one release before CloudPages Legacy gets removed. If you’ve not gotten used to the new experience, there’s now a short window of opportunity to get familiar with it. The next release is only in August.

WhatsApp messaging will be able to leverage contact details for sending messaging now. Previously you were required to include the recipient phone number in the sending Data Extension, so this brings it more aligned with other channels.

The opportunity to self-serve for some standard configuration and business rules gets a new feature - the option to disable the requirement for the out of the box preference centre. For many orgs the standard preference and subscription centre doesn’t meet their requirements and previously you would need to contact support to change a business rule configuration to use a custom solution.

The Marketing Cloud Connect API will be upgraded to v51 to unlock some of the more recent objects within Salesforce CRM, Loyalty Management and Order Management. These have been unavailable in SFMC since their release due to the MC Connect API being out of date, this does happen on occasion but has been significantly better in the last couple of years. So, if you have a Salesforce CRM use case with Loyalty Management and Order Management, keep an eye out from w/c June 21st 2021 and you’ll be able to Synchronise these objects and use them for Journey Builder entries.

Contact Delete default suppression is being chopped down to just 2 days compared to the original suppression of 14 days. This is expected to happen in a future release, but if you have any existing process to delete contact using the Contact Delete process and have left it on the default, this is something to keep an eye out for. The importance of this is that 14 days suppression prevents contacts being reintroduced or messaged, which provides contingency to other systems that may be aiming to introduce contacts to SFMC. By reducing the default to 2 days, contacts will be eligible to re-enter SFMC after just 2 days as opposed to 2 weeks from a deletion action. Make sure if you’re deleting contacts using the Contact Delete capabilities that any systems integrated with SFMC are able to act on the deletion within those 2 days otherwise jump in to SFMC now and change the date to prevent that risk coming to fruition.

Well, it’s obvious that Einstein is the Salesforce current favourite toy right now after the last 12 months scuffling over that title with Journey Builder! But, a lot of the challenges that have been raised about Einstein are starting to be addressed, including the fact that it has previously been so heavily geared towards reactive analytics or huge sweeping predictions that it’s impossible to really validate them. The layers of the mystery box of machine learning seem to be coming a little more to the forefront and the value of using historical data to determine the future is starting to come to fruition. This is where Einstein should be.

What I would love to see from Einstein in the future is the ability to introduce custom weighting & third party data to the scoring. If we can start introducing transaction data to make sure we’re not just sending an email that Einstein thinks someone will open and when they will open it, but when they are most likely to open and transact from it.

The opportunities of these tools and the capabilities afforded by AMP Email (Make sure you tune in to Connections 2021 where HowToSFMCs Genna Matson, Salesforce MVP, Marketing Champion will be talking through AMP Email alongside Eliot Harper, Salesforce MVP) could really give SFMC a huge edge when it comes to an integrated customer experience.

On the whole, there’s a lot of new toys to play with in this release, especially if you’re an Ad Studio user and have the budget available to add Datorama Advanced Reporting. If you’re not making the most of Einstein already, there’s more and more reasons being added to the argument that you should include it in your workflow.

Read more
Jason Cort
Published 04/08/2021
One More Time - Winners Announced

We said we would invite you all to do it One More Time & you did not disappoint. We had some absolutely amazing entries to this challenge and it was definitely a tough decision picking some of these winners. Fortunately, the individuals who came through and clinched the victory have taken the time to break down their solutions and help share their experience for us all to learn. Take a look through these articles and let us know if you think they managed to Get Lucky or if they were just Doin’ It Right.

Efficiency: The challenge lyrics are 2303 characters long, and your job is to find the least amount of characters necessary in SSJS to output these lyrics. This challenge will be measured solely via the character count. We will be utilizing https://www.charactercountonline.com/ to count the characters in your submission.

Winner: Rafał Wolsztyniak (Article)

Twitter handle: @HelloRafal - yep, no posts there

LinkedIn Profile: https://www.linkedin.com/in/rafal-wolsztyniak/

Trailblazer.me id - https://trailblazer.me/id/rwolsztyniak

Innovative: This category is all about the unique ways you can make SSJS work. We will be concentrating on not just the uniqueness but also the performance. Submitting something stunningly unique and cutting edge that triples the performance required, could severely hurt your chances.

Winner: Eliot Harper (Article)

Twitter handle: @eliotharper

LinkedIn Profile: linkedin.com/in/eliot

Trailblazer.me id: trailblazer.me/id/eliot

Simplicity: Good code should be clean, simple and easy to understand. The main goal of this category is to identify how much effort a beginner/non-developer would require to understand and utilize your script. The simpler the better, but it should also be performant and within best practices. “Dumbing it down” will not be the solution to this.

Winner: Manjunath S.R (Article)

Twitter handle - SfmcIn

LinkedIn Profile - https://www.linkedin.com/in/manjunath-sr-40232199

Salesforce Trailblazer.me id - https://trailblazer.me/id/manjunathsr

Special Jury Award: We all love good, clean, efficient code - but sometimes you have an idea that sounds bizarre enough that it might just work. Your script will still need to be functional, but if you feel that one of the best ways to flex your SSJS muscles is to produce something completely unexpected but incredible, then we want to see it too.

Winner: Vijaya Sankar Natarajan (Article)

Twitter handle - @vijayasankarn

LinkedIn Profile - https://www.linkedin.com/in/vijayasankarn/

Trailblazer.me id - https://trailblazer.me/id/vijayasankar

Huge congratulations to Rafał Wolsztyniak, Eliot Harper, Manjunath S.R and Vijaya Sankar Natarajan. Your vouchers will be with you shortly. We’re massively impressed by the skills and approaches that you’ve shared with us.

And yes, it was difficult to get through this post without mentioning Daft Punk calling it quits just after we posted this challenge originally. We promise it wasn’t our fault.

Thanks again for everyone who took part in this, there were some fantastic solutions presented. If you would like to tackle this challenge as part of your own learning exercises, take a look at the articles above and they may just inspire you. Whilst the competition may be over, we’re sure there are more solutions to this challenge so if you do have something you want to share, get in touch!

Read more
HowToSFMC
Published 04/08/2021
Winning Solutions
One More Time - Simplicity Winner

Start with breaking the given songs into words and stanza’s and then use it wherever is needed. Firstly assign all the repeated words to a variables

var nl = "&nbsp;<br>";
var omt = "One more time<br>";
var wgc = "We're gonna celebrate<br>";
var oy = "Oh yeah<br>";
var dsd = "Don't stop the dancing<br>";
var mgff = "Music's got me feeling so free<br>";
var cdf = "Celebrate and dance so free<br>";

Create stanza’s as much as possible to avoid the repeated use of variables/words

var stanza1 = omt + wgc + "Oh yeah, all right<br>" + dsd;
var stanza4 = omt + mgff + wgc + cdf;
var stanza2 = "Mmm, you know I'm just feeling<br>Celebration tonight<br>Celebrate<br>Don't wait too late<br>Mmm, no<br>We don't stop<br>You can't stop<br>"+wgc;
var stanza3= "Celebration<br>You know we're gonna do it right, tonight<br>Hey! Just feeling<br>Music's got me feeling the need<br>Need, yeah<br>Come on, all right<br>"+wgc;

Create possible groups to reduce the line of code and make efficiency

First group: In this example I have grouped below lines in one loop.

One more time
Celebrate and dance so free
Music's got me feeling so free
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free
One more time
Music's got me feeling so free
We're gonna celebrate
Celebrate and dance so free

Below is the logic for the above line of text:

for(j=1;j<16;j++)
{
Write(stanza4);
if(j==5)
Write(nl);
if(j==9)
Write(omt + mgff + wgc);
if(j==11)
Write(nl);
}

Wherever we need a newline or additional words add the condition to apply on that step inside the loop instead of breaking the loop.

Second group:

One more time
We're gonna celebrate
Oh yeah, all right
Don't stop the dancing
One more time
We're gonna celebrate
Oh yeah, all right
Don't stop the dancing
One more time
We're gonna celebrate
Oh yeah, all right
Don't stop the dancing
One more time
We're gonna celebrate
Oh yeah
One more time
One more time
We're gonna celebrate
Oh yeah, all right
Don't stop the dancing

Below is the logic for the above line if text:

for(j=1;j<6;j++)
if(j==4)
Write(omt + wgc + oy+omt+nl);
else
Write(stanza1);

In last combine all in one single group.

<script runat="server" language="javascript">
   Platform.Load("Core","1");
   //Assign the repeated words to a variables
   var nl = "&nbsp;<br>";
   var omt = "One more time<br>";
   var wgc = "We're gonna celebrate<br>";
   var oy = "Oh yeah<br>";
   var dsd = "Don't stop the dancing<br>";
   var mgff = "Music's got me feeling so free<br>";
   var cdf = "Celebrate and dance so free<br>";
   //create stanza's as much as possible to avoid the repeated use
   var stanza1 = omt + wgc + "Oh yeah, all right<br>" + dsd;
   var stanza4 = omt + mgff + wgc + cdf;
   var stanza2 = "Mmm, you know I'm just feeling<br>Celebration tonight<br>Celebrate<br>Don't wait too late<br>Mmm, no<br>We don't stop<br>You can't stop<br>"+wgc;
   var stanza3= "Celebration<br>You know we're gonna do it right, tonight<br>Hey! Just feeling<br>Music's got me feeling the need<br>Need, yeah<br>Come on, all right<br>"+wgc;
   //Wherever possible create loop/condition statement to avoid unnecessary usage of codes 
   for (i=1;i<7;i++)
   {
	Write(omt);
	if (i==2)
	{
	 Write(nl);
	 for(j=1;j<6;j++)
	  if(j==4)
	   Write(omt + wgc + oy+omt+nl);
	  else
	   Write(stanza1);
	 Write(omt + wgc + oy + dsd + omt+nl+stanza2);
	}
	if (i==5)
	 Write(stanza3);
	if (i==6)
	{
	 Write(cdf+mgff+cdf);
	 for(j=1;j<16;j++)
	 {
	  Write(stanza4);
	  if(j==5)
	  Write(nl);
	  if(j==9)
	  Write(omt + mgff + wgc);
	  if(j==11)
	  Write(nl);
	 }
	} 
   }
</script>
Read more
Manjunath S.R
All Rights Reserved
Made with by your fellow SFMC users.