附上代码 property pReviewProject : "艾宾浩斯" -- name of project which will receive tasks property pReviewIntervals : {3, 8, 15, 30, 60} -- number of days before each repeat, augment as desired property pReviewDaysUntilDue : 1 -- allow two days after start date for completion property pAutoSave : false -- set this to false for faster performance but slightly more risk
on GetDefaultDueTime() tell application id "OFOC" to tell front document to set timeStr to value of setting id "DefaultDueTime" set {otid, text item delimiters} to {text item delimiters, ":"} set {dueHour, dueMin, text item delimiters} to every text item in timeStr & otid return (((dueHour * 60) + dueMin) * 60) end GetDefaultDueTime
on ProcessAction(selAction, dstProject, dateToday, dueTimeOffset) local startDate, dueDate, i tell application id "OFOC" repeat with i from 1 to (length of pReviewIntervals) set newAction to duplicate selAction to end of tasks of dstProject set startDate to dateToday + (item i of pReviewIntervals) * days set dueDate to startDate + pReviewDaysUntilDue * days + dueTimeOffset tell newAction to set {defer date, due date, completed} to {startDate, dueDate, false} -- if user already completed original, we need to make duplicate active end repeat end tell end ProcessAction
on run {} set dateToday to (current date) - (time of (current date)) set dueTime to my GetDefaultDueTime() tell application id "OFOC" tell front document tell content of first document window set lstSelected to value of (selected trees where class of its value is task) if ((count of lstSelected) = 0) then display alert "No suitable tasks in selection" return end if end tell try set dstProject to first flattened project whose name is pReviewProject on error display alert "Could not find destination project \"" & ¬ pReviewProject & "\"" return end try set oldWillAutosave to will autosave set will autosave to pAutoSave try -- catch any errors and restore autosave setting repeat with thisOne in lstSelected my ProcessAction(thisOne, dstProject, dateToday, dueTime) end repeat end try set will autosave to oldWillAutosave end tell end tell end run