The Omni Group Forums

The Omni Group Forums (http://forums.omnigroup.com/index.php)
-   OmniFocus Extras (http://forums.omnigroup.com/forumdisplay.php?f=44)
-   -   Exporting to Merlin 2 FROM Omnifocus (http://forums.omnigroup.com/showthread.php?t=15470)

RobTrew 2010-03-02 03:25 PM

Exporting to Merlin 2 FROM Omnifocus
 
An illustrative draft of an applescript which exports the projects selected in Omnifocus to Merlin 2, with their tasks and subtasks.

(Note that any visible children of selected parents are exported, so there is no need to select children as well as parents).

This draft exports only activity names and notes (as Merlin 2 activity descriptions). It can easily be adapted to make use of OF start dates etc.

[CODE]-- Illustrative draft Ver 0.0

-- Copies anything selected in Omnifocus (Project or Context View) into MERLIN 2
-- Note that the whole sub-tree is copied, so only 'parent' elements need to be selected.
-- The destination is a new Merlin 2 document.

property pPROJECT : "project"
property pTASK : "task"
property pITEM : "item"

on run
set {lstActivities, blnContext} to SelectedInOF()

PlaceinMerlin(lstActivities)
end run

-- TRANSFERRING TO MERLIN

on PlaceinMerlin(lstTasks)
if (length of lstTasks > 0) then
tell application id "net.projectwizards.Merlin2"

set oDoc to make new document
set oRoot to root project of oDoc
set title of oRoot to "OmniFocus import" & " " & (current date) as string

my PlaceTasks(lstTasks, oRoot)
end tell
end if
end PlaceinMerlin

on PlaceTasks(lstTasks, oParent)
using terms from application "Merlin"
tell oParent
repeat with oTask in lstTasks
set {strName, blnDone, lstSubTasks, strNote, strParent, dteStart, dteDue, dteDone, lngMins, blnFlagged} to oTask

set oMlnTask to make new activity at end of activities of oParent
tell oMlnTask
set title to strName
if length of strNote > 0 then set description to strNote

-- Assign any other properties here, e.g. ...
------ if dteStart is not missing value then set given planned start date min to dteStart
------ if dteDue is not missing value then set given planned end date max to dteDue
end tell

if length of lstSubTasks > 0 then
my PlaceTasks(lstSubTasks, oMlnTask)
end if
end repeat
end tell
end using terms from
end PlaceTasks


-- READ SELECTED OmniFocus CONTENT TREE(S) TO NESTED APPLESCRIPT LISTS - Ver.02

on SelectedInOF()
tell application "OmniFocus"
set oWin to front window
set blnContext to ((selected view mode identifier) of oWin is not equal to pPROJECT)
tell content of oWin
set lstContentSeln to selected trees
if (count of lstContentSeln) > 0 then -- Whatever is SELECTED in content panel
set lstTrees to lstContentSeln
set blnAll to false
else -- EVERYTHING in the content panel
set lstTrees to trees
set blnAll to true
end if
end tell
{my Trees2List(oWin, lstTrees, blnContext, blnAll), blnContext}
end tell
end SelectedInOF

on Trees2List(oWin, lstTrees, blnContext, blnAll)
set lstTasks to {}

using terms from application "OmniFocus"
repeat with oNode in lstTrees
set oValue to value of oNode
set cClass to class of oValue

if cClass is not item then
if cClass is project then
set end of lstTasks to my ListProject(oNode, oValue, blnContext, blnAll)
else
set end of lstTasks to my ListContext(oNode, oValue, blnAll)
end if
else
set end of lstTasks to my ListUnProcessed(oNode, oValue, blnContext, blnAll)
end if
end repeat
end using terms from
lstTasks
end Trees2List

on ListProject(oNode, oValue, blnContext, blnAll)
using terms from application "OmniFocus"
tell oNode
set lstChildren to trees of oNode
tell oValue
if (count of lstChildren) > 0 then
{name, completed, my ListSubTrees(lstChildren, blnContext, blnAll), note, "", start date, due date, completion date, estimated minutes, flagged}
else
{name, completed, {}, note, "", start date, due date, completion date, estimated minutes, flagged}
end if
end tell
end tell
end using terms from
end ListProject

on ListContext(oNode, oValue, blnAll)
using terms from application "OmniFocus"
tell oNode
set lstChildren to trees
set oValue to value of oNode
tell oValue
if (count of lstChildren) > 0 then
{name, false, my ListSubTrees(lstChildren, true, blnAll), note, "", missing value, missing value, missing value, 0, false}
else
{name, false, {}, note, "", missing value, missing value, missing value, 0, false}
end if
end tell
end tell
end using terms from
end ListContext


on ListUnProcessed(oNode, oValue, blnContext, blnAll)
using terms from application "OmniFocus"
tell oNode
set lstChildren to trees

if blnContext then
set strName to "No Context"
else
set strName to "Inbox"
end if

tell oValue
if (count of lstChildren) > 0 then
{strName, false, my ListSubTrees(lstChildren, blnContext, blnAll), "", "", missing value, missing value, missing value, 0, false}
else
{strName, false, {}, "", "", missing value, missing value, missing value, 0, false}
end if
end tell
end tell
end using terms from
end ListUnProcessed

on ListSubTrees(lstTrees, blnContext, blnAll)
set lstTasks to {}
repeat with oNode in lstTrees
set end of lstTasks to my ListTask(oNode, blnContext, blnAll)
end repeat
return lstTasks
end ListSubTrees

on ListTask(oNode, blnContext, blnAll)
using terms from application "OmniFocus"
tell oNode
set oTask to value of oNode
set lstSubTrees to trees of oNode

end tell
if blnContext then
set oParent to containing project of oTask
else
set oParent to context of oTask
end if
if oParent is not missing value then
set strParent to name of oParent
else
set strParent to ""
end if
tell oTask
if (count of lstSubTrees) > 0 then
{name, completed, my ListSubTrees(lstSubTrees, blnContext, blnAll), note, strParent, start date, due date, completion date, estimated minutes, flagged}
else
{name, completed, {}, note, strParent, start date, due date, completion date, estimated minutes, flagged}
end if
end tell
end using terms from
end ListTask[/CODE]

Techldg 2013-03-12 09:28 AM

Hello RobTrew,
Thank you for your great script to export to Omnifocus from Merlin Works great!.

im actually havin problem using the actulal one from Omnifocus to Merlin, i've added the scritp to the omnifocus folder and doesn't work and don't appear in the toolbar customisation menu.
Any cue to help me catch what i'm missing?

Best

RobTrew 2013-03-12 11:37 PM

The first port of call is this:

[url]http://forums.omnigroup.com/showthread.php?t=7453[/url]

also worth checking whether you can run if from Applescript Editor.


All times are GMT -8. The time now is 12:16 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.