1,
2) about how to integrate the two - the one that I landed on used the service at
LeanKit and synced between OF and LeanKit using a couple of applescripts and an API. But LeanKit is designed for teams, and has a bunch of features that I don't need. I'm already losing productivity fiddling with my tools, and I don't need more controls to fiddle with.
In fact, what I need is quite minimal - it really needs to be a visualisation of my OF projects and tasks in a "PK" view. I can do all the manipulation from OF - since this is my base of operations - and then if necessary, the changes can be reflected in PK.
Here's some approaches.
Attempt 1: Showing it right in OmniFocus
Omnifocus has an "outliner" mentality. It might be possible to show my projects in some sort of "PK" perspective, right? In my head, I imagine three main headings - "Backburner", "WiP" and "Done", with all my projects in the right categories.
One stumbling block - how do I tell OmniFocus which projects are WiPs, Backburnered, and Done? I can think of two ways:
- Projects are Backburnered by default. Flagged projects are WiPs.
- Projects are WiPs by default. Backburnered projects are marked on hold.
In both cases, completed projects map nicely to our done column.
The problem is, I can't really sort projects based on status. So much for that plan - it seems OmniFocus just isn't made to support this level of project-viewing
Attempt 2: Showing it in OmniOutliner with Applescript
We're trying to do an outliner view now - it's a good thing that Omni Group make an outliner too! I'll be exporting the data using AppleScript, which despite being a nightmare to work in sometimes, is still the best way to get data between programs on OS X.
This is the surprisingly simple export code:
set backburner_projects to {}
set works_in_progress to {}
set completed_projects to {}
tell front document of application "OmniFocus"
set backburner_projects to name of every flattened project whose status is on hold
set works_in_progress to name of every flattened project whose status is active
set completed_projects to name of every flattened project whose status is done
end tell
And here's the whole code:
set backburner_projects to {}
set works_in_progress to {}
set completed_projects to {}
tell front document of application "OmniFocus"
set backburner_projects to name of every flattened project whose status is on hold
set works_in_progress to name of every flattened project whose status is active
set completed_projects to name of every flattened project whose status is done
end tell
on populate_from_array(my_parent, arr)
tell front document of application "OmniOutliner Professional"
repeat with element in arr
set new_row to make new row
set value of cell "Topic" of new_row to element
move new_row to end of rows of my_parent
end repeat
end tell
end populate_from_array
tell application "OmniOutliner Professional"
if button returned of (display dialog "Would you like me to make a new document, or paste into the existing one?" default button "New document" buttons {"New document", "Existing document"}) is "New document" then
make new document
end if
tell front document
set backburner_row to make new row
set value of cell "Topic" of backburner_row to "Backburner"
my populate_from_array(backburner_row, backburner_projects)
set wip_row to make new row
set expanded of wip_row to true
set value of cell "Topic" of wip_row to "Works in Progress (max: 5)"
my populate_from_array(wip_row, works_in_progress)
set done_row to make new row
set value of cell "Topic" of done_row to "Done"
my populate_from_array(done_row, completed_projects)
end tell
end tell
This is still a work in progress. I'm interested in outputting this to text (really easy now I have the base export stuff done), but regardless of the output medium, this brings two things to light:
- I need to be able to restrict which projects are added to the list (no point putting mundane repeating projects on here).
- I may need to restrict which projects show up based on children - broad, over-arcing projects that contain five sub-projects don't really have to be on the list.
However, as proof-of-concept, I'm pretty happy with how it's gone.