Sunday 31 August 2014

London Salesforce Developers August Meetup

The August meetup of the London Salesforce Developers took place on Wednesday 27th, kindly sponsored by Make Positive.

This month our main organiser, Anup Jadhav, stepped away from the organisational side of the group and into the spotlight to present a talk on integration - building a messaging framework based on the Message Queue concept: 

Anup meetup

This is clearly a topic that a lot of people are interested in - the talk took in excess of 50 minutes and generated more questions than any talk I can remember. As this was a dry run of Anup’s Dreamforce talk, the slide deck won’t be available until after Dreamforce, although the good news is that isn’t that far away now.

If you are a Salesforce Developer in the London area and you aren’t attending these meetups, you should join us.  Its a great way to spend an evening - you’ll eat some pizza, drink some beer and learn something - what’s not to like.

If you are a Salesforce Admin in the London area, you should join the new London Salesforce Admins meetup group, organised by Matt Morris

In fact, if you are a Salesforce Admin or Developer in the London area, you should join both.  There’s plenty that everyone can learn from each other, and developers/admins will get closer at Dreamforce with the new Admin Zone in the heart of the Dev Zone at Moscone West. 


Saturday 16 August 2014

Replace Visualforce Buttons in Salesforce1

On my Account record view page, I have a custom button :

Screen Shot 2014 08 16 at 16 31 17

which opens a Visualforce page to allow me to edit the Account and its related Contacts on a single page (based on my Edit Parent and Child Records with Visualforce - Part 1 blog post):

Screen Shot 2014 08 16 at 16 31 26

Unfortunately, the Salesforce1 application doesn’t render custom Visualforce buttons, so this is missing from the Account details view in the app:

Sf1 1

Now I can add the Visualforce page as a custom publisher action for the account object, allowing access from the publisher menu:

Screen Shot 2014 08 16 at 16 44 31

but this displays the page inside the publisher popup, meaning there’s less real-estate and the Cancel and Submit buttons that I don’t really want at the top of the page (note that the screenshot is from an iPad, on a phone the page isn’t really usable as it currently doesn’t use responsive design):

Screen Shot 2014 08 16 at 16 47 02

What I’d really like is the publisher action to launch the Visualforce page full screen, but unfortunately there’s no way to configure this.  What I can do, is have the publisher action launch an interim page, which then navigates to the Visualforce page via the Salesforce1 navigation JavaScript.  The interim page is pretty simple:

<apex:page standardController="Account">
  <h1>Please Wait</h1>
    Redirecting ....
    if ( (typeof window.sforce != 'undefined') && (window.sforce!=null) ) {'/apex/AccountAndContactsEditV1?id={!}');
    else {
      alert('Not in SF1 :(');

Note that as always I’ve checked to see if I’m in the Salesforce1 application, as the navigateToURL method is only available when that is the case. Clicking on the ‘MultiEdit’ publisher action now briefly displays a Please Wait page:

Screen Shot 2014 08 16 at 16 53 42

followed by the MultiEdit page, without any unwanted borders or buttons:

Screen Shot 2014 08 16 at 16 55 02

As a bonus, the publisher action doesn’t impact the navigation, so clicking the back button on the top right takes me back to the record detail page of the account in question.  The downside to this is that it requires two round trips to the server - the first to retrieve the interim Visualforce page and the second to retrieve the target page. 

Sunday 10 August 2014

Why You Have to Attend Dreamforce


DF14 is just a couple of months away (at the time of writing [August] anyway - if you are reading this after October I’ve probably written a recap post on the event, so you should read that as well!).

If you’re still undecided (or you still haven’t managed to convince your boss), here’s a few reasons why the decision should be a no-brainer.

The Dev Zone

What can I say about the dev zone, aside from the fact that it gets better every year.  The opportunity for learning is incredible - there are loads of breakout sessions, multiple theatres running talks all day and free books (although these are very popular, so be prepared to queue). You’ll also bump into your friendly developer relations team and evangelists, ready and willing to shoot the breeze about all things Salesforce1.  Some people spend the whole event in the Dev Zone and more power to them - I have a bunch of partner sessions to attend when I’m at Dreamforce, so I only manage around 70% or so.

The Developer Keynote

This has been around for a couple of years now, and its always standing room only.  Its the place to find out about the latest features being launched for developers, and get a heads up on the direction for the next year or so.  Throw in a few demos from Dave Carroll, and its the perfect way to spend a couple of hours.


Anyone who’s anyone will be at Dreamforce, so its an excellent way to expand your network of connections. This also justifies your presence at any number of parties. If there are people you are keen to meet, following them on twitter and the Dreamforce application will give you a good idea of where they will be at a specific time, allowing you to casually bump into them and make that vital introduction.

Hands on Training

These sessions are always very popular, so if you fancy some instructor led app building with plenty of assistants to provide support, make sure to register as soon as the agenda builder goes live - they fill up in no time.

Its not that Expensive

For a limited time you can register for the bargain price of $899 at  

Save Money Getting Certified

The weekend prior to Dreamforce there’s a bunch of certification-related training and cut-price exams available. If you aren’t certified then this can form the basis of your pitch to your boss - the savings are like money in the bank, and what better reward for passing a cert than attending the main event.

There’s more information and pricing at:

Give Back

There is always a volunteering event at Dreamforce - last year 2,700 bags were packed for Project Night Night.

My Session

Assuming I manage to keep on track, I’ll be giving a talk on Responsive Design with Visualforce and Twitter bootstrap, which I’m sure will be enormously popular and well attended.

Saturday 2 August 2014

Book Review - Development Blueprints


(Disclaimer: I didn’t purchase this book - I was sent an e-copy to review by Packt Publishing).

For the first time in six months, its book review time. Development Blueprints guides you through the development of number of complete applications on the (and other!) platforms:
  1. A Salesforce community, including the use of to create custom branded pages
    As I’ve not done a huge amount with I was keen to dig into this chapter, so it was handy that it was the first.  One of the things that surprised me is the amount of effort required in what is purported to be a simple drag and drop tool, not only the complexity of the tool itself but also the low-level CSS tweaks required. (This might explain why didn’t really take off as intended and is now being rolled into communities as a custom page builder).
  2. Develop an e-commerce application using Bootstrap, Ruby on Rails, Heroku and Visualforce
    I was surprised to jump straight into an application using Heroku - if you are working through the book in order it might make more sense to swap this with the third application, which is limited to the application itself.  Its a very thorough build out of the application, with a nice approach to building the basics first and then adding the slicker UI on top.

  3. Build a traditional CRM solution with a custom Apex workflow feature
    Another full-featured application, taking advantage of a lot of the clicks-not-code features of the platform. I’d like to have seen this as the first application, as this is very much about employee-facing applications - the sweet spot of I’ve always thought. 
  4. Building a custom reporting system using Visualforce
    An excellent real-world use case and example code that can be readily adapted to a number of scenarios. 

  5. Build an HTML5 mobile application, using Bootstrap, Angular, Node.js and Heroku
    The complexity ramps up several notches in this chapter, which is not for the faint hearted where JavaScript is concerned. Using Node.js for JavaScript on the server, and Angular as the front end MVW framework, there’s quite a learning curve if you are new to one or more of these technologies.  This is by no means wasted learning though, as JavaScript is eating the web and demand for mobile applications is very much increasing.  
  6. Building cloud connected applications
    Did I say application number 5 ramps up the complexity?  Chapter 6 takes it to the next level, building an application that connects to multiple external clouds via APIs and throws an Android application into the mix as well.  Set aside plenty of time for this one, as this number of external integrations means a pretty unforgiving development environment and promises plenty of opportunity to hone investigative and debugging skills.  It also bravely introduces the Android SDK, which readers of my musing on the BrightGen blog will remember was one of the more challenging aspects of the Elevate London Workshop. Once again, while this might (will!) be a challenging application to complete and understand, its very much the future of application development.  Applications built on are increasingly seen as part of the enterprise architecture and will be expected to integrate fully with the other architecture components.

As I’ve noted a couple of times above, I feel that the order of the applications could stand a little tweaking, so I would work through the applications in the following order:

3. Build a traditional CRM solution with a custom Apex workflow feature
4. Building a custom reporting system using Visualforce
1. A Salesforce community, including the use of to create custom branded pages
2. Develop an e-commerce application using Bootstrap, Ruby on Rails, Heroku and Visualforce
5. Build an HTML5 mobile application, using Bootstrap, Angular, Node.js and Heroic
6. Building cloud connected applications

This is a very well written book - each chapter flows well and the explanation of the purpose and high level overview of each application are clear and concise.  If I have one gripe its the amount of code, markup and repetitive instructions that appear (although the instructions do improve as the book goes on).  Often this comes across as filler, as the entirety of pages and controllers are presented, rather than just the key areas of functionality.  

This isn’t a book you’ll be able to skim through in a couple of evenings or a weekend. If you are coming over from the functional side of to development, you should expect the journey to take several months, returning to each chapter as your development experience increases - trying to rush through it when you aren’t that confident in the underlying technologies will likely lead to frustration when you are unable to get some of the more complex applications working.  If you are an experienced developer who is new to the platform you will go faster, but its still likely to be a number of weeks if you are making sure you understand all aspects of the applications.  It will be well worth the effort though.

You can find out more about the book, and purchase it, at:

Friday 1 August 2014

Why I Don't Provide One to One Help

(This is a post that I’ve been considering for some time, but has been pushed to the front of my ideas stack based on the increasing levels of attitude I’m encountering)

Help me Bob Buzzard. You’re my Only Hope

I’m typically asked for one to one help several times a day, especially weekends!  Sometimes its on the Developer Force forums, where a poster asks for my email address so that they can contact my directly with some related questions, other times its direct emails with a lengthy code sample asking for me to write the test case. Lately its direct messages when I login to Facebook, asking me to get in touch when I’m free to answer some questions on web services, Visualforce, Apex in general, as there's an urgent customer requirement.

Regardless of the mechanism chosen, I don’t respond (in fact, this used to be in my signature on the original Lithium Developerforce Discussion boards, although it didn’t stop anyone). There is a very good reason for this:

I’m a Consultant

I’m a consultant by profession, for BrightGen, a UK-based Salesforce Platinum Cloud Alliance partner. When you are a consultant, you sell your time at a rate based on your experience and expertise.  As I’m a Certified Salesforce Technical Architect (along with all the other certifications), I’m charged out at the highest rate, so when a customer wants one to one assistance from me, they have to pay a not inconsiderable sum.  It would therefore be extremely unfair on both my customers and my company if I started handing out my time for free, simply because people contacted me directly through social media or personal channels.

Unfair on my customers, as they would be the only ones that had to pay for the privilege and unfair on my company as I’d be depriving them of potential revenue.  This is particularly unfair on those parties when someone is asking for help on their customer engagement - they are expecting me to fix their problems for free, so that they can complete the work that they are charging their customer for.  You wouldn’t charge to fix someone’s car, then take it to another garage and expect them to do the work for free as you are a "newcomer to car maintenance".

Its Nothing Personal

If you ask me for one to one help, I won’t respond.  Don’t take this as a personal slight - I don’t have a secret club of those that I do help, everyone is treated the same. If I accept your LinkedIn connection or Facebook friend request, that doesn’t mean I’m now your point of escalation for any and all Salesforce problems, your personal career counsellor, or your private support service.

I used to respond saying I only did this as a paid gig, but that started taking up too much of my time, so now I treat these requests as unsolicited contacts and ignore them. I’m sure that all these requests are super-urgent and its absolutely vital that the problem is fixed, but remember that’s a subjective view - there’s no urgency from my side and it makes no difference to me if the problem remains in place for years.  .  

Post it to the Forums

Post your request on the Developerforce forums and I’ll help if I can - even better, lots of other people will also see the post and will do their best to help as well. This way the knowledge is spread throughout the community as a whole. If you post a question and then ask for direct contact details, what you are effectively saying is that you’d like to tap into the community knowledge, but keep the solution to yourself, which is pretty un-community minded.

I Know its a Minority

This post isn’t an attempt to drum up more business - I’m really not that interested in single day engagements to debug code or write unit tests these days.  Its also not a cry for validation. I know that the vast majority of people that I interact with in the community don’t behave like this, so there’s no need for any “I appreciate you, Bob” style comments!

If nothing else, this post gives me a URL to point people at when I’m not replying and they don’t understand why.