Send To Omnifocus from Google Reader
Last Updated on Tuesday, 25 May 2010 11:45 Written by Steve Tuesday, 25 May 2010 11:45
When I’m surfing the web or reading email, I often run across things that I don’t have time to complete now, but want to do later. It’s at times like these I “send” things to Omnifocus. I do this in many ways. Omnifocus has great built in scripting, so I have keyboard shortcuts to send things to the Omnifocus Quick Entry form from Entourage, Safari, Mailplane, etc.
When I’m on a web page, I use Nik’s URIHandler to send things directly to my reading list via a bookmarklet. It’s incredibly handy for all sorts of things–check out my example for creating a grocery list.
But most of the stuff I read comes in via Google Reader and there hasn’t been a good way for me to send a story from Google Reader to Omnifocus. A while back Google Reader added a Send To function allowing you to send information from the current story to any URL. The problem is, Omnifocus is a locally installed app–it doesn’t have URLs.
To solve this problem, I have built a very simple PHP page that Google Reader can use to Send To Omnifocus. Here’s a quick video of how it works:
First you need to install Nik’s URIHandler. It’s really easy to install and once you’ve done that, your computer will have a way to create items in Omnifocus via Javascript.
Then you need to set up Google Reader to Send To the URIHandler.
Go to Settings > Send To and create a new link

The URL looks like this (substitute your real project and context names): http://gokubi.com/ofocus.php?title=Read: ${title}&url=${url}&context=yourContextHere&project=yourProjectHere
And the image URL looks like this: http://gokubi.com/images/omnifocus-128-75×75.png
Save that and you can Send To Omnifocus right from Google Reader!
If you want to do this on your own, and not use my send to URL, the PHP script is really simple:
<?php echo "<script language=\"JavaScript\">\n"; echo "window.location = \"x-omnifocus://parsetasks?text=" . htmlentities($_GET['title']) . " :: " . htmlentities($_GET['project']) . " @ " . htmlentities($_GET['context']) . " // " . htmlentities($_GET['url']) . "\";\n"; echo "</script>\n"; ?>
You can create as many Send To buttons as you want–put whatever you want in the title, and use different projects and contexts. It’s very flexible and easy to use.
Learn MoreStrategic impact and making multi-level relationships look nice
Last Updated on Wednesday, 5 May 2010 02:08 Written by Steve Wednesday, 5 May 2010 02:03
I’ve been doing a little prototyping in Salesforce.com as a volunteer project for a nonprofit in town. They’ve got an interesting need to track their strategic plans in Salesforce. I’ve seen this kind of thing built many times and have built it myself for another org or two. For this org they’ve got 3 levels of custom objects to hold their data. Driver is their high-level strategic focus. Goal is the next level down–there can be many goals for each Driver. And Metrics our measurable things related to each Goal.
Salesforce lets you create these objects and relationships between them very easily. I created the schema in just a few minutes. I created three objects and related them together–in this case I made them master-detail relationships. You can see in the diagram what my schema ended up looking like.
Now tracking your strategic goals is great, and most nonprofits do that. But where I think it gets more interesting is when we can tie the actual work we do directly to the metrics we’re trying to deliver on. So you’ll see in the diagram that there is a 4th object called project. Project is used to track all the work efforts of the org that are worth recording. I created a lookup relationship from Project to Metric so every project this groups takes on can be explicitly related to a Metric we need to deliver on. Which is in turn related to a Goal, which is related to a Driver. So, why are you updating that website for the 100th time this year? Because the website Project is meant to deliver on the Metric of increasing engagement of our supporters 25%, which is part of a Goal to grow the direct impact our supporters have in the world, which in turn feeds our Driver which calls for us to lead the world with a model of catalytic impact.
Those strategic objectives are made up for this example, but you get the idea how daily work can roll up to why your organization exists. Seeing that direct relationship can be very powerful. So when you look at the Project record in Salesforce, what do you see? Because there is only a relationship to the Metric object, you only see the Metric on the page layout.

Because the Project isn’t directly related to Goal or Driver, we can’t have lookup fields to those objects. Lookups are only for direct relationships, from child to parent, not up to grandparent and beyond. So we need another solution, and it turns out to be formula fields. On the Project I can create a Goal field and a Driver field that are formula fields of type Text. Here’s the formula for each of them:
for Goal: HYPERLINK("/" + Metric__r.Goal__r.Id , Metric__r.Goal__r.Name,"_self" )
for Driver: HYPERLINK( "/" + Metric__r.Goal__r.Driver__r.Id , Metric__r.Goal__r.Driver__r.Name,"_self" )
We’re creating a hyperlink to fake a real lookup. The URL of the hyperlink is relative, so it starts with / rather than http://. It then has the Id of the object, which we get by traversing up the relationships in Salesforce. From project we follow the Metric__r relationship to the Metric object, then up the Goal__r relationship to the Goal where we can grab any fields we want. With Driver we do the same thing, just go up one more level. If you think this looks hard, don’t worry, the formula field editor is really easy to use and does all the hard work for you–you just click the relationship you want to traverse.
The text of the link is the Name of the object in question. And then we target the hyperlink to “_self” so that it will load the record in question into the current window–just like a regular lookup would.
After adding these formula fields to the page layout, the end result is this:

Now we’re telling the full story about this project with a little help from simple formula fields.
Learn MoreGetting Groceries Done
Last Updated on Monday, 29 March 2010 01:52 Written by Steve Monday, 29 March 2010 01:52
I love OmniFocus. And I cook. I’ve been using OmniFocus on my iPhone for quite a while now–it’s handy to have a list and check things off as I shop. On Sunday I had a revelation about how I could make generating that list so much easier using Nik’s URI Handler and FineCooking. Crazy easy…
Learn More