Archive for November 2013
If This Then Salesforce
I’ve been enjoying IFTTT for a while now and if you haven’t experimented with it yet then I’m not sure we’ll ever be friends. Essentially it’s a very easy tool that lets you set triggers on a source API e.g. Foursquare and have some information from that API be posted to a target API e.g. Jawbone Up. IFTTT calls these recipes and I’d like to demonstrate some particularly delicious combinations that can be used with Chatter.
Salesforce Org Alerts and Known Issue posted to Chatter
Salesforce makes Instance Alerts e.g. “Perfomance degradation on EU0.” available through an RSS feed so all you need to do is create a recipe (or copy mine) that monitors the appropriate RSS url for changes and posts to a particular Chatter group.
You can do a similar thing with Salesforce Known Issues.
Tweets posted to Chatter

Quite often there are interesting tweets that I want to share with a particular group on Chatter. One of the recipes I’ve created in this class uses the hashtag #tqcd to push a particular tweet to our “Development” Chatter group.
We also have more than a few Reid Carlberg fans in Tquila so we have a recipe that shares his tweets to a dedicated group in our Org. His tweets are mostly about facial hair at the moment but who am I to judge genius.
Limitations
At this point Chatter can only be used as a target system in any recipe but I’m hoping they’ll change that in future.
Best Practices
So far I’ve established two guidelines:
- Create a separate Chatter group for recipes that will be executed often. This gives people the option to opt-out of those posts.
- If possible create a separate Salesforce user to post on Chatter. This will reduce the number of explicit posts you making it easier for others to find information in your feed.
You can find all these recipes on my IFTT profile. There are quite a few other interesting recipes regarding Salesforce on the IFTTT website but I’m hoping that you’ll be inspired to think of new creative ways to use the tool. If you do please let me know in a comment below or on Twitter.
Salesforce Analytics API Sample Code
A picture is worth a thousand words, so goes the justification for graphic novels. I kid, I love the hell out of graphic novels but now I’ve been sidetracked and this is only the second sentence of this post.
So, the Analytics API. I’m pretty enamoured with it as it seems is Pat Patterson, and I think that it’s one of the most useful features the platform has ever made available. Presenting the right chart (or set of charts) to a manager or executive can empower them to make business decision in minutes, powerful stuff. To that end myself and a few of my fellow Tquilites have begun building an opensource library of Analytics API demos to aid you in aiding your clients/managers/execs.
Below I’ve included a few introductory steps to help you get started. To start with you’ll need the code from github.
Step 0
I’ll be stepping through the Google Charts Stacked Bar Chart example from github so you’ll be able to test this out yourself.
Step 1 – Create a report
Certain report formats map well to certain chart formats so make sure you choose the right type of report. For example, stacked bar charts map well to matrix reports, summary charts map well to pie charts.
Once you have created your report and have some interesting data, determine the report ID and keep it somewhere safe. Report IDs always start with “00O”.
Step 2 – Create a Visualforce Page
As it says in the heading of this section, create a new VF page. Easy peasy lemon squeezy.
Step 3 – Include the chosen JS library
As with any web-based language you’ll need to include the JS library that you want to use. I’m going to use Google Charts in this example. Note I’m also using jQuery to make the AJAX callout.
<script type=”text/javascript” src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript" src="https://www.google.com/jsapi"></script>
Step 4 – Call the Analytics API
The API call can be made server-side or client-side, with this example making use of a client-side call.
/** Fetch the JSON data representing the the report **/ var jsonData = JSON.parse($.ajax({ beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', 'Bearer {!$Api.Session_ID}'); }, /** You'll need a URL parameter key called "id" that has a Summary Report id value **/ url: "/services/data/v29.0/analytics/reports/{!$CurrentPage.parameters.id}", dataType:"json", async: false }).responseText);
The results of the callout are fed into the callback function and available through the variables “ai” and “ae” (see below).
Step 5 – Parse the resulting JSON & build the required data structure
The structure of the JSON depends on the report type but is fairly simple to understand. Be sure to use console.log() to investigate what’s going on if you get stuck.
var chartData = new google.visualization.DataTable(); chartData.addColumn('string', 'Stage'); $.each(jsonData.groupingsDown.groupings, function(di, de) { chartData.addColumn('number', de.label); }); $.each(jsonData.groupingsAcross.groupings, function(ai, ae) { var values = []; values.push(ae.label); $.each(jsonData.groupingsDown.groupings, function(di, de) { values.push(jsonData.factMap[de.key+"!"+ae.key].aggregates[0].value); }); chartData.addRow(values); });
Step 6 – Generate the chart
Finally invoke the drawing of the chart along with any options required.
var options = { title: jsonData.attributes.reportName, vAxis: {title: jsonData.reportMetadata.groupingsAcross[0].name}, isStacked: true }; var chart = new google.visualization.ColumnChart(document.getElementById('chart')); chart.draw(chartData, options);
Voila! You now know the basics of building custom charts in Visualforce (or any other web language) using the Analytics API. To try this out log into your Org and then browse to:
http://[your salesforce instance]/apex/YourPage?id=[reportId]
Feel free to use this code anyway that you can imagine and we’d be over the moon if you contribute your own awesome to what we’re building. Fork us on github.