Friday, 18 December 2015

Get your smarts on over Advanced Salesforce formulae

Something I have blogged and tweeted about a couple of times in the past is writing quality, advanced formula fields. Having a good grasp of Salesforce formulae reaches beyond just formula fields though, as we encounter this mark up in Workflows, Approvals, Validations rules and numerous other areas of the declarative side of the platform.

Badly written formulae can quickly start to stack up in your org (and I mean that literally - if you know how Formula dependencies are inter-compiled) so why don't you stop the rot before it begins with a new exciting Trailhead module... Introducing:


Trailhead reckons this module will take about 2 hrs 30 mins and we know from past experience those estimates are pretty accurate, but this module is nicely broken up into 7 chunks, none more than 30 minutes, so again, as we know from before we can easily fit these bitesize chunks into our regular, busy days. I'm actually on holiday today, and so I am going to secretly work through these modules as Laura fusses about the house doing Christmassy things.

So, First

Laura: Shopping on "" for a novelty cushion as a Christmas present

Simon: Using Basic Logic in Checkbox Formulas

The first thing I had to overcome is that as a "Latin English" advocate, the plural of formula to me should be formulae, but I will let this go, that is not the challenge here.. the challenge here is getting the basics down with formula fields, and understanding the core functions and operators. As I came into this module, I was honestly expecting the use of some things like ISBLANK() to be the climax of advanced formula fields, so even I am now a little nervous about how advanced this might actually get! There is even a little bonus Back to the Future reference in this module. Which you can't miss.

As a personal aside to this module, I would have to say that I have always found it useful/better to actually use the "Insert Field" button to drop fields into formulae... I also quite often use the Function picker on the right to build up my code. Even though typing these things isn't hard. I think it makes it more methodical (and does reduce typos) than just freehanding it all in. The logical flow which you might type "this and that if that or this" might not be the most efficient way to actually evaluate something, and using the function selector makes me evaluate that a little harder.

Anyway, no distractions by personal techniques. We are here to earn all the badges. And besides, Laura has stopped shopping... it appears someone in our family is getting one of these next week:

(I'm lucky none of our relations read my blog...)

Module 2

Laura: Making posh coffees with the machine in the kitchen

Simon:  Using numbers, currencies and percentages in formulas

This is a really good topic, and probably one where I fall foul of the rules more often than not. There is a sub-section in here on the solid use cases for these three different, specific formula types. I'm afraid that I am a bit of a dinosaur myself, and I still don't "believe" in these rich variable types. I just make everything a number, and then deal with the formatting, processing and collateral damage of doing so myself. I could definitely learn something here.

I have also have trouble in the past with "divide by zero" errors in formulae, so it is worth noting the final paragraphs on "treating blanks as zero" - but you should also get into the habit of thinking about zeros being valid amounts. How often do you create a number field with a default of zero for initial values? Consider using an "IF( field__x == 0, 1, field__x)" to instead "divide by 1" - which of course has "no effect" when there is a nill value. (obviously check this makes sense to the business logic first).

Laura rattled through those coffees, so no time for screen shots. A quick espresso and onwards!

Module 3

Laura: Gone upstairs, I think she's on the phone to her mum

Simon: Using Date and Date/Time formula

Ironic this because if I keep up Salesforcing on holiday, I might not get many more dates..
Once again there was some interesting learning in here even for an old hand like myself. DATE functions in formula fields are incredibly powerful. Coming from other programming language libraries being able to call out instances of TODAY and LASTWEEK in reports and rules has always been quite simply dreamy.

The challenge on this module is a little odd, in terms of "business value".. I would probably have one of our BA's go back to this client to establish quite why they wanted the current day of the week on their contact page, but it's still a good example that uses a clever trick outlined in the module ;) - as an extension to this, you could consider taking a Date of Birth field on the contact page, and get Salesforce to output the day of week this contact was born.. You could then even cross reference it with that famous poem about "babies born on a monday" to augment a Description field...

Either way, stack up the points, and prepare to move on. I have to go out now, I have a feeling the conversation is going to be a distant background noise to me now as my head buzzes about the possibilities of the next module.

Module 4

Laura: Back home scrolling instagram for wedding ideas

Simon: Using Picklists in Formulas

I know who's having more fun on the sofa right now (I hope she doesn't look over at my screen). There is one resounding rule regarding Picklists in formulae that they address right at the head of this module: ISPICKVAL() - never forget this.


As much as Picklists can LOOK like text, ACT like text and in Apex be TREATED like text - in formulae, you need to address them with the ISPICKVAL function to compare them. I have lost count of the number of times this has caught me out and you eventually conceed "ooohhh, it's a picklist, thats why it doesn't work.". This module makes a good highlight of this, and explains the options you have in the form of CASE and TEXT as well. Most comparisons I make though tend to need ISPICKVAL - as you are plucking out one possible status value for an sObject and then asserting a bunch of rules around it.

Module 5 - the game is up

Laura: Discovered I was on Salesforce, has gone into the other room

Simon: Using text in Formulas

This must be one of the biggest uses of simple formula fields in Salesforce - text manipulation. The examples in this module are exactly on point - concatenating names, turning numerical values into words (like "Hot" and "Cold" leads) - but did you know you can do so much more with text in formula fields? Just last week I tasked one of my colleagues (a fairly new start) with the challenge of replacing a "dirty product" flag with a "red light image" - he stared at me in horror, until I told him to quickly Google it... if I'd know this module existed, I would have sent him straight over here instead.

That is exactly what you are about to embark upon in the challenge. Generating a five-star-review icon in place of a "1-5" numerical grade for Lead quality. This kind of formula field should be kept somewhere safe, as once you know how to do it - you are going to want to put images ALL OVER your page layouts. (with a bit of tinkering, you can get a whole raft of standard salesforce icons, such as traffic lights and 5-star rating, but also Tab icons and other standard imagery, so go have a poke around...!)

I now have to go and make lunch I think, to re-establish communication lines here at home, especially as the next module starts with a video, and I don't have headphones to hand.

Two modules to go

Laura: Has put her shoes on, I think I'm in luck - she's off for a walk

Simon: Levelling up with Advanced Formulas

It seems we have now learnt everything we need to know about advanced formula fields, much like the prodigy in every kung foo movie - it is now time to use what we have learnt. There are some really good tips on best practice formula practises, especially for longer formulae, with a nice 12 month example (which as I read I was sure, this can be simplified) - that is then smashed down to a super-simple 4 liner.

There is a really interesting article linked out from this module "Tips for reducing formula size" - and I am genuinely going to print this out and keep it in my desk drawer at work. My comment in the second paragraph about inter-compiling formulae is addressed in this document, with really good examples of how re-using another formula field repeatedly inside other formula fields will really, really quickly blow you out of the water for maximum formula compile size. Give this a good read, I have found myself applying the "when all else fails use a workflow rule" chapter at least once.

The challenge on this module involves building two formula fields, so read through all the points before starting on it.. you actually want to develop from the bottom up on the challenge bullet points as you will reference your second formula field in your first (which you can't do until you have it).

The final module

So there has been a little beer drinking between the advanced formula module and now, but I have always maintained I do my best coding when I'm more "relaxed".. (I'm not sure how my employer would feel about that mind)

Laura: Wrapping presents on the floor

Simon: Troubleshooting Formula Errors

As I read down these common formula errors, I couldn't help but notice that I was just slowly nodding my head along in agreement with everything they said. Anyone who has worked with formula fields for a few years would have to admit or agree to these errors at some point or other. My suggestion of using the "Insert Field" and double clicking method names really does mitigate errors relating to missing parentheses or parameters because the wizard will fill them in for you as you go.

The second half of this module reiterates the details from the "Tips" document I mentioned earlier in this post - which does just go to indicate it's importance (I knew it!). Being aware of the compilation process and limits is half the battle to not having a problem with it.

This final challenge is a bit of a "spot the bug" one - which if you've ever paid attention to the Bristol Developer User Group that I run - you will know is something of a personal favourite hobby of mine - so I was delighted to recreate this problem and fix it up. Not a problem in the end, just pay attention to your training and you will have this module complete in a heartbeat.

Now I haven't technically earnt this badge yet, as I didn't complete all the challenges (I know, I know, shocked gasps!). But if you would like to find out more about this, or other trailhead modules - get in touch with me and join us on January 7th at 6pm GMT for the Bristol Salesforce Developer User group who will be having a Trailhead meetup that night. Attendance can be physical or digital - we can skype-project you if you want, and I will be earning ALL these new badges that night, for sure!

Whilst I am writing a blog post about Trailhead - whether you need the practise or not - I have to point out that there is now a module for building a Space Battle Station now.... no more boring warehouses for us!

Go earn all the badges!

Wednesday, 2 September 2015

The New Lightning Experience, in New Trailhead modules!

As the new Lightning Experience begins to make bigger and bigger waves through the IT community, you know there is always going to be one piece of the platform way ahead of the game... Trailhead. No sooner had the Lightning Experience been announced, than they were announcing new modules, new points and new badges to be earnt - along with the kind of high quality, test-assured knowledge that Trailhead has become reknown for.

So with the introduction of three new super modules, it seemed kind of obvious which one I would throw myself at first.

Developer Trail - Lightning Experience ?

Admin Trail - Starting with Lightning Experience ?

Admin Trail - Migrating to Lightning Experience  ?

I'm going head first into the developer module. Though it must be noted I will absolutely continue on to complete the admin modules too, as it's all super relevant information.

Actually, the most exciting bit about these modules is.. they (currently) have a safe harbour statement.

You don't get much more wild than that, we really are trekkin' into unexplored territory. I best get my Trailblazer armour on in case we encounter any wild bugs.

So now I'm fully kitted out, lets do this module!

(by the way, if you think this post is long, it really did take me the full 8+ hours to work through this module. We ain't kidding around no more).

Starting with "Getting Started with the Salesforce Lightning Experience" - this is very much a module for totally new entrants to Salesforce, so I won't lie - I skimmed it a little bit, but even I was forced to stop every now and then and just absorb the screenshots of the new interface. It's really exciting taking in all the new buttons, layouts and "curvey borders" the Lightning Experience is bringing to the Salesforce front end.

Time for a test now though, not too challenging on this introduction module, but a couple of options that will make you smile.. such as what is the difference between Lightning and Classic: "One makes you shockingly productive, while the other remains classically amazing." - I personally think this is technically true, so chew that over when you are picking your option on the test!

Anyway, I nailed my 100 points. Obviously...

(I love how people actually tweet these boxes! #SoProud)

The next chapter "Deciding If Lightning Experience Is Right for You" is actually a really interesting for myself, as a developer on many different client orgs. This is a huge question for every developer, and every business currently on Salesforce. Of course, there is going to come a time when the Lightning Experience will have to be right for you, but at the moment, and for the foreseeable future, this is a decision you need to make yourself. If you want to know the pros-and-cons of the switch in a nice, concise (mostly tabular) format.. this module will teach you a lot of what you need to know. Issues such as Reports, Javascript and what will happen to your Visualforce and Apex are all accounted for here.

Once you have digested all the information, prove yourself once again with a quick exam at the bottom of the module. Remember, on the final question for adoption, you are looking for the RIGHT answer - not the one that will almost certainly happen in most businesses (confetti optional).

The final chapter of the developer track Introduction to Lightning Experience is how you actually enable it. Assuming the previous modules made you suitably excited, you'll need to know how to get your hands on it, and also the limitations (and incredible powers) you have regarding its roll out.

Preparing your org, and using the switcher is going to be a hectic day in anyones office, so being best prepared with the knowledge (and the gotchas) is going to be a good idea. Read this chapter carefully, pass the 2 question exam - and prepare the fanfare:

!!! BADGES !!!

And that, ladies and gentlemen is how we pass the basic module! We now know what Lightning Experience is, whether it is right for us, and if so, how to turn it on.

But the fun doesn't end there!

Next up,  Lightning Experience Development. I'm going to throw in right at the top of this chapter... that things get serious from here on in. No more joke answers about Windows 10 or Confetti, so put those reading glasses on and get learning fast. Just to prove this fact (and I did this just for you, reader)...

I got completely flumoxed by the first test and made a right mess of it.


I don't even know why they put "Who hoo" on the 25 point DIV... *grump*

Moving through the Development module, you encounter a great (and honest) list of "what does work" and "what doesn't work". Salesforce have been really good here, putting their hand up when needed to admit some features are missing in this early release, and other areas where they have made technical descisions to cut access to client and server side features we may have previously depended on.. like access to the page global Window properites in Javascript - in favour of native Lightning library commands.

Next, we encounter Lighning Components - and their distinction from the Lightning Experience, before moving onto ISVs and Packaging, in which I think there is an interesting double negative hurdle in one of the test questions (but I am a part time Grammar Policeman).

The last chapter in this modle is Understanding the Changes to the other development tools (note, this is not about IDEs like I thought!) This module covers all the other considerations you didn't even realise you hadn't thought about - like existing packages, Apex API versions and so on. Upon completion of this module. You are a bad ass development ready Lightning brain.

The third module, is Using Visualforce in the Lightning Experience.There is a really curious question in the test for the first chapter in module, so pay attention to the material, and do a lot of scrolling up and down as you consider you answers! These modules really take you deep into the nuances of developing Visualforce in the new Lightning Experience. You thought you knew it all? Think again! I dropped points again on this chapter due to a (perhaps) cocky approach to the tests. Come on Simon, knuckle down!

Luckily for me, the next chapter on sharing the UX between the different experiences was fairly concise, and the questions directly (and with no double negatives!) related to the material. I'm back on the 100 points bus. Here, I found it interesting to learn that the UX a user has in their settings might also/still be affected by what browser (specifically, old browsers) they are using. Worth noting on that first support call to a government agent complaining their IE 4.0 "Lightning Experience" is a little more like drizzle.

The Navigating chapter tells us all about how we can move users about in the new UX. This chapter had my favourite pairing of questions - as the options were the same, making you directly realise the difference between the two modes, and also immediatly see the overlapping technology in the options applicable to both.

I blitzed through the last two modules on design considerations (which I genuinly always enjoy) and the intreging "Features to avoid" module, which very honestly highlights the problems with certain related lists, Javascript functions and Visualforce customisations that we may be used to, but that don't play nice with the Lightning Experience.

Time for another badge though! I can now use Visualforce in the Lightning Experience.

Are you still with me here? You're doing well!

The fourth module is a daunting 9 chapter one, estimated at 4 hours work - It's Lightning Components..This module has been around for a little while now, in the other Tracks, but it finally now has context! This is also where we are really getting into the guts of developing in the new Lightning world. The is also the end of the Multiple Choice tests, and now you are forced to connect you developer edition and actually make this stuff happen! By the end of this module, you can actually say "I have made a Lightning Component". You can lean back, be proud, and stick that badge on your chest like the medal it is, because everyone loves Lego™!!

As you stride into the fifth, and final module of this Trail, The Lightning Design System you might feel a little sad, but you probably feel more exhausted than anything else..  fear not though, the finish line is in sight. Here we introduce best practises for designing, and also examine how Salesforce bakes accesibility and responsive design into the component structure without you lifting a finger. We also look into BEM - and this is one of the few times I've actually been off and done the associated reading too - to find out about the cool CSS architecture that has been adopted.

Next we move onto Grids - and some terminology and design patterns that date back to the start of Computer Science itself, there is a reason these ideas have done so well though, so take your time to learn the basics of component layout work here.

By now your eyes are fully in code-reading mode, and that's good, because it's getting geekier and geekier in these modules, take a peak at the middle of the Salesforce Data chapter to see what I mean...

Ophh! Time to book that eye check ;)

What we are looking at here though is the new Salesforce data integration code though. What good is a sexy component if it can't interact with your Salesforce data?

The penultimate module is on introducing graphics and rich media into your components, and we even get to have a dig at Internet Explorer (oops, I may have given a hint to one of the answers there...). It's also nice to see that the author went that extra mile with their test data for the screen shots... I think I remember this account from the Developer Edition standard data records.

The final chapter, titled Laying out a Record Home Page and Using Advanced Components and with nothing less than a heading of "The Grand Finale" provides exactly what one would expect of such an EPIC trailhead module. It leads you down bringing all of the component work you have done over the last few hours (few, ha!) and you finally build a full and complete record home page for your Account objects. Look at it, beautiful:

Two more questions and you are done! Take that module badge with pride, go and tell your boss you are now a fully experienced "Lightning Component Developer", put it in your family newsletter, or even better - go get a tattoo*. (now that would be a first!)

If you really made it all the way to the end - drop me a tweet @srlawr - and I will give you an awesome shout out for your efforts!!

* don't get a tattoo...

Wednesday, 5 August 2015

Blazing away with Trailhead Event Monitoring

If you work with, or within Salesforce - and you don't live under a rock - you must by now be familiar with the revolutionary interactive training tool called TRAILHEAD. This gamified, dynamic, challenging and rewarding tool provides chapters of training material and automated testing tools to lead developers and admins through the new (and core) features of the Salesforce platform.

We have recently used Trailhead to onboard some new starters at Desynit, and they have been absolutely blown away by the quality of the material - and you know the best thing? New material is being published ALL THE TIME so even veterans of the Force like myself can keep learning, and scoring on Trailhead.

For one, I have just this very minute finished writing up my own Trailhead content which I hope will be delivered at Dreamforce 2015 in San Francisco, but besides myself and my fellow MVPs, the Trailhead team have just release three whole new modules for the world to complete.

These are:

Admin Trail - CRM

Dreamforce Trail with Get Ready for Dreamforce module

Event Monitoring module

I was personally particularly interested in the Event Monitoring module, a large part of my role these days is supporting and maintaining what are now considered large, and legacy Salesforce implementations, I spend a lot of time investigating and monitoring our client work for bugs and issues, and monitoring adoption and usage, so event monitoring is a big part of my life.

This module drew my attention to the fact that there are some cool new tools to assist me in this, and I am keen to get that "Sherlock Holmes" badge on my profile.

Here is the module overview - three lovely bitesize pieces of work to introduce me to this new world of sleuthing.

The first module "Getting Started" is exactly that - I immediately learnt a lot about the new logging features, and I'm immediately inspired to find out more about how I can use them in my day to day life. First though - I need to finish this module and pass the test. This is a multiple choice exam module (all the Event Monitoring modules are) so it's time to put my thinking hat on...

(if you are hoping for the answers here - think again!)

Boom. 100 points. This still gives me such a thrill as I stack up my score.

This module took me about 15 minutes, exactly as estimated on the dashboard.

Delving into the second module for Querying Event Log Files - you better be prepared for some slightly more hardcore questioning! (I'm not saying I got one wrong - but READ THE QUESTIONS CAREFULLY!). I learnt about using SOQL and the REST API to tug on my event information, and find out how we can monitor Logout events in my developer edition. This was a bit more of a technical module, and it appealed greatly to my developer side... A slightly quieter boom goes off as I earn another 50 points.

Finally - Downloading and Visualizing logs, took me a little longer than the 15 minutes, as there is quite a lot of material, so overall I would say this module took me just under an hour. Not bad for 250 points though (ahem) - and I get that badge on my profile!!

Wondering how to get started on Trailhead?

If getting into Trailhead is proving difficult for you, or you find these more advanced modules difficult or daunting - make sure you look into finding your local Developer User Group there are over 130 of them around the world, most meeting 6 - 12 times a year to talk about Salesforce, and the development experience.

I run the Developer User Group in Bristol - down in the South West of England, and in July 2015 we held a Trailhead Developer night. A dozen of us got together, opened up our laptops (and opened up some beer and pizza) and had a 3 hours blast at Trailhead, earning over 35,000 points between us in the night.

It was a great way to earn some points and badges, and we even got a little competitive and awarded cool "Trailhead Hoodies" to the highest achieving users. find your local DG and sign up to their next meetup here.