I Wanna Flow Clone!


Brian and I talked about this on this week’s WizardNews WizardCast, but we thought perhaps a text-based walkthrough might be in order. So let’s talk about clones, baby.

The clone button on Salesforce records is great, for obvious reasons. But it has one major shortcoming: it brings over EVERYTHING.

Let’s say you want to clone a case, because a second client is having the exact same problem 3 months later. For one, it’s probably not going onto the same account, or have the same contact. For another, the Case Status probably needs to be reset to its earliest setting, since the original Case is (hopefully) closed.

But keep in mind that a mature Case object may have many fields that are NOT on the page layout, but nonetheless important to maintain. You may have an Approval Status that keeps track of approval steps but is hidden to prevent modification. You may have date fields that log when certain events occurred, but again, are hidden for security. You may have checkboxes or other fields verified by validation rules to ensure changes go through proper channels, like API or Flow.

These are all data points that you would NOT want to be brought over in a clone, because they are probably not going to be accurate for your new Flow.

So how to clone while still ensuring that existing data doesn’t become bad data? Simple! Flow!

Flows can be fired off of buttons, just like cloning, so that makes it an excellent candidate, plus Flow has the ability to read existing records and create new ones. Let’s take a quick look at what needs to be done.

We’re going to assume, to start with, that we’re going to be passing in the ID of the case we are cloning. We only need to pass that one piece of data in, because we can get the rest later. Let’s make a new variable: varCaseID. Don’t forget to make its Input/Output Type “Input Only”, so it can receive that data. If you leave it as Private, it’ll never be able to receive data passed to it.

Screen Shot 2015-04-08 at 14.10.32

Now that the Flow has a place to store which Case we are cloning, let’s get the rest of our fields. Create a Record Lookup, and set the filter to look on the Case object for a record where the Id is equal to our new variable, varCaseID. This is all you need to define, because you’ll only ever get one record with that ID!

Screen Shot 2015-04-08 at 14.13.34

In the section below, you will need to manually define which fields should get brought over in the clone. Yes, this may get tedious if you have a lot of fields that need to come over. But I would highly advise confirming with your stakeholders which data is truly needed. You’ll find most of your fellow employees or executives only want the data they really need, and are happy to let the rest go. You will need to store each of these data points in its own variable, and those variables can remain set as Private, because the Lookup will go and get the data; it’s not the same as having data pushed to it.

Screen Shot 2015-04-08 at 14.23.32

For the sake of this example, let’s assume the Account and Contact are the same; this is a whole other can of worms that would practically take a whole other article to examine properly.

Now that you have your old data brought over, we can begin creating our clone. All we need to do is add a Record Create to the Flow, and set it to create a new Case. Then, in the fields below, you can assign all of your variables to the proper case fields, like so:

Screen Shot 2015-04-08 at 14.29.12

That’s it! Draw an arrow between from the Lookup to the Create, and click the Start icon (the green arrow circle in the top right) on your Record Lookup so the Flow knows where to begin. You can now save your Flow, and create your Clone button.

Screen Shot 2015-04-08 at 14.38.16

Once you’ve saved your Flow, close it to get to the Flow’s information screen. On this screen, you’ll see a URL; copy this to your clipboard, you’ll need it in a second.

Screen Shot 2015-04-08 at 14.38.30

Now on to the button itself. I prefer calling the button something else, to reduce confusion. Something like SmartClone, to let you and the users know that this button is smarter than the average Clone. Before actually defining the button itself, I suggest changing the Behavior to “Display in Existing Window without Sidebar or Header”. This will effectively replace the contents of the users’ open tab when they click the button.

Now the URL for the button. Paste the URL you saved from your Flow, and add the following:


Screen Shot 2015-04-08 at 14.44.05

Here’s the breakdown.

  • The ? is important because it lets Salesforce know to expect settings to be set in the URL. Each element we pass is essentially something we are setting this URL to do.
  • varCaseID – This is the variable we created, remember? Putting this here tells Salesforce we need to send something to this variable when the flow is started.
  • {!Case.Id} – This is a merge field that turns into the Case ID itself. You can generate this via the merge field operators right above the URL window, as always.
  • & – We can pass more than one piece of information, but we need to separate each one with a & symbol.
  • retURL – Here you can set where the Flow should go when it is done. If you do not set this, the Flow will just repeat over and over. By passing it / then the Case ID again, it knows to go back to the Case that started this.

It may help to put your varCaseID and your retURL on separate lines in the URL window. Adding line breaks won’t cause any problems, as they get ignored, and it makes your URL a lot more readable when you have to support/troubleshoot it later.

Voila! Put this on your case page layout, and you’ve got a SmartClone!


Admin’s Best Friend, Part 1

Every admin has a favorite tool in Salesforce. Some live and die by the Data Loader, some have a passionate love affair with Workbench, and some have even made their own custom tools to make their Salesforce lives easier. But me… my best Salesforce friend is a little thing called Visual Workflow, or just Flow for short.

Now I know what some of you may be thinking. “Visualforce? That’s code right? I don’t do code.” Whoa whoa. Nay nay. Visual it may be, but Visualforce it is not. This is an entirely different beast, my friends. And while this beast may be intimidatingly big and hairy, it’s ridiculously helpful. It’s more like a workhorse, or pack animal. But big and hairy. So more like a woolly mammoth.

Look, the whole metaphor works if you just picture yourself as a caveman…

Image by David McCauley, "The Way Things Work"

Image by David McCauley, “The Way Things Work”

Yeah okay, let me start from the beginning.

Most admins are in one of two camps: the camp that doesn’t know what Visual Workflow is, or the camp that thinks it’s too difficult for them to use. And to a degree, that’s ok! Nothing to be ashamed of. The reason most admins fall into one of these two groups is because Salesforce, unfortunately, has not done a lot to change things to the contrary. They simply have not talked very much about Flow, and the past few Release Notes have been practically devoid of any Flow-related changes to grab your attention. They’ve released a few videos trying to explain the whole Flow thing, but because of its complexity, those videos’ approach of “Let’s try to cover as much about Flow as possible in 20 minutes” only means that they don’t really allow for much in the way of detail or absorption.

But we can change this, people! Flow is the key to unlocking a new world of workflow in your system. It will allow you to do automation in Salesforce you never dreamed would be possible without code. It is the true enabler of the “Clicks Not Code” philosophy, the game changer for the next generation of Salesforce. And this is one of the key focal points that this blog will circle around: to provide a series of articles extolling the virtues of Flow and making it easier to start using it in your instance.


Alright, it’s teacher time. The first thing you need to know is what Flow can do. Some might say, “Hey wait, shouldn’t you focus on what Flow IS first?” Usually, I would say yes, but the key point here is that you know its worth. Flow can come across as complicated and having a high bar of entry, but if you’re aware of the crystallized AWESOME that it is capable of, you’re more likely to stick it out to the end. Trust me, it’s worth it. So what can it do that other tools cannot?

1. Create records


Ever wanted to automatically create a new account, case, or other kind of non-task record using Workflow? Can’t be done, can it? Record creation has long been the domain of APEX and custom-URL buttons. NOT ANYMORE, MY FRIENDS.

Visual Workflow gives you not just the power to edit records, but to create and delete them as well.

  • Want a button that creates 4 pre-determined records with one click? You can do that.
  • Want a button that removes one opportunity product and replaces it with another? You can do that.
  • Want a button that can clone an Opportunity but will only pull over specific fields? YOU CAN DO THAT.
  • And the advantage it has over custom URL buttons is the fact that it can do multiple records at once, even if they are in DIFFERENT OBJECTS. MIND… BLOWN.

IT’S LIKE A BUTTON THAT MAKES MUFFINS. Except it makes records. Which is just as awesome but actually more useful. Unless you have a medical condition that prohibits you from eating any food that is not a muffin. That would be useful, then.

2. If…Then…Else (with Nesting!)


Anyone with an coding experience will get what that is, but otherwise think of it like extremely advanced filtering for workflow. With regular Workflow, if you wished to do automation that could go down different branching paths based on different sets of criteria, you’d have to write multiple workflow rules, and you’d have a hell of a time trying to get multiples to interact with one another. If your filter criteria are in different objects, you’d just wash your hands of it.

But not so with Visual Workflow! Base your Opp workflow off of your Opportunity History! Create multiple branches that pass information down to the following automated actions, even if you keep branching and branching by more and more filters! Write automation that acts based on a combination of data in your records and questions asked of the user when they start the process!

This screenshot is but a sample from a live Flow running in our instance:

Sample - Priority Flag

You don’t have to get as complex as this in your Flow, but it’s a relief to know that you have the ability if it’s needed!

That’ll do for today’s blog post! Later this week, I’ll publish Part 2, explaining two more awesome button-click-exclusive capabilities of Visual Workflow and what it means when we get all these horses lined up and ready to run.