Here is an illustrative first draft, which transfers any activities selected in
OmniPlan (with their sub-activities) to a new date-stamped folder in OF.
--
Code:
-- ver 0.2 (Exports to an OF Folder, rather than making all tasks children of the same project)
-- All activities selected in OmniPlan GUI transferred (with their descendants) to
-- a new date-stamped *folder* in OmniFocus, and each parent element selected in OP becomes a project in the OF folder,
-- with the descendent OP sub-tasks exported as a hierarchy of OF tasks
--
-- An alternative line shown in the FillofProj() function would exclude transfer of estimated minutes
property pstrOFProjectName : "OmniPlan import"
on run
set lstTasks to OPSelected()
if length of lstTasks > 0 then
PlaceInOF(lstTasks)
else
display dialog "Select parent task(s) in OmniPlan, and try again"
end if
end run
-- Get a nested list of the selected OmniPlan activities
on OPSelected()
tell application "OmniPlan"
tell front window
set lstOPTasks to selected tasks
if (count of lstOPTasks) > 0 then
return my Tasks2NameList(lstOPTasks)
else
return {}
end if
end tell
end tell
end OPSelected
-- -- Translate OmniPlan activities to a nested list of activity names
on Tasks2NameList(lstOPTasks)
using terms from application "OmniPlan"
set lstTasks to {}
repeat with oTask in lstOPTasks
tell oTask
set lstChiln to child tasks
if (lstChiln is not missing value) and (length of lstChiln) > 0 then
set end of lstTasks to {name, my Tasks2NameList(lstChiln), starting date, ending date, note, duration / 60}
else
set end of lstTasks to {name, {}, starting date, ending date, note, duration / 60}
end if
end tell
end repeat
return lstTasks
end using terms from
end Tasks2NameList
-- Place nested list of activity names in a new OF project
on PlaceInOF(lstActivities)
if length of lstActivities > 0 then
tell application "OmniFocus"
tell front document
set oFolder to make new folder with properties {name:pstrOFProjectName & " " & my SysDate()}
my FillOFFolder(oFolder, lstActivities)
end tell
end tell
end if
end PlaceInOF
on SysDate()
current date
end SysDate
-- Transfer activities to the specified project (or parent task)
on FillOFFolder(oFolder, lstActivities)
using terms from application "OmniFocus"
tell oFolder
repeat with oAct in lstActivities
set {strName, lstChiln, dteStart, dteDue, strNote, lngMins} to oAct
if strNote is missing value then
set oProj to make new project with properties {name:strName, start date:dteStart, due date:dteDue, estimated minutes:lngMins}
-- set oProj to make new project with properties {name:strName, start date:dteStart, due date:dteDue}
else
set oProj to make new project with properties {name:strName, start date:dteStart, due date:dteDue, note:strNote, estimated minutes:lngMins}
-- set oProj to make new project with properties {name:strName, start date:dteStart, due date:dteDue, note:strNote}
end if
if length of lstChiln > 0 then
my FillOFProj(oProj, lstChiln)
end if
end repeat
end tell
end using terms from
end FillOFFolder
-- Transfer activities to the specified project (or parent task)
on FillOFProj(oProj, lstActivities)
using terms from application "OmniFocus"
tell oProj
repeat with oAct in lstActivities
set {strName, lstChiln, dteStart, dteDue, strNote, lngMins} to oAct
if strNote is missing value then
-- set oTask to make new task with properties {name:strName, start date:dteStart, due date:dteDue, estimated minutes:lngMins}
set oTask to make new task with properties {name:strName, start date:dteStart, due date:dteDue}
else
-- set oTask to make new task with properties {name:strName, start date:dteStart, due date:dteDue, note:strNote, estimated minutes:lngMins}
set oTask to make new task with properties {name:strName, start date:dteStart, due date:dteDue, note:strNote}
end if
if length of lstChiln > 0 then
my FillOFProj(oTask, lstChiln)
end if
end repeat
end tell
end using terms from
end FillOFProj