Plug-In: Project with Tasks

An example of using a plug-in as a project template. This plug-in will prompt for titles and status of the project and any tasks (up to five), and use that to construct a new parent project placed at the top of the Projects list.

new-project-with-tasks

Return to: OmniFocus Plug-In Collection

New Project with Tasks
  

/*{ "type": "action", "targets": ["omnifocus"], "author": "Otto Automator", "identifier": "com.omni-automation.of.project-with-tasks", "version": "1.1", "description": "This plug-in creates a new project containing the specified tasks.", "label": "New Project with Tasks", "shortLabel": "Project with Tasks", "paletteLabel": "Project with Tasks", "image": "list.bullet.rectangle" }*/ (() => { const action = new PlugIn.Action(async function(selection, sender){ try { textInputField01 = new Form.Field.String( "main-project", "Project", null ) textInputField02 = new Form.Field.String( "sub-task-1", "Task", null ) textInputField03 = new Form.Field.String( "sub-task-2", "Task", null ) textInputField04 = new Form.Field.String( "sub-task-3", "Task", null ) textInputField05 = new Form.Field.String( "sub-task-4", "Task", null ) textInputField06 = new Form.Field.String( "sub-task-5", "Task", null ) shouldBeSequentialCheckbox = new Form.Field.Checkbox( "shouldBeSequential", "Project is sequential", false ) shouldBeCompletedByChildrenCheckbox = new Form.Field.Checkbox( "shouldBeCompletedByChildren", "Complete with last action", false ) inputForm = new Form() inputForm.addField(textInputField01) inputForm.addField(shouldBeSequentialCheckbox) inputForm.addField(shouldBeCompletedByChildrenCheckbox) inputForm.addField(textInputField02) inputForm.addField(textInputField03) inputForm.addField(textInputField04) inputForm.addField(textInputField05) inputForm.addField(textInputField06) inputForm.validate = function(formObject){ var inputText01 = formObject.values['main-project'] var inputText01Status = (!inputText01)?false:true var validation = (inputText01Status) ? true:false return validation } formPrompt = "Enter titles for project and tasks:" buttonTitle = "Continue" formObject = await inputForm.show(formPrompt,buttonTitle) mainProjectTitle = formObject.values['main-project'] subTask1Title = formObject.values['sub-task-1'] subTask2Title = formObject.values['sub-task-2'] subTask3Title = formObject.values['sub-task-3'] subTask4Title = formObject.values['sub-task-4'] subTask5Title = formObject.values['sub-task-5'] shouldBeSequential = formObject.values['shouldBeSequential'] shouldBeCompletedByChildren = formObject.values['shouldBeCompletedByChildren'] project = new Project(mainProjectTitle,library.beginning) projectID = project.id.primaryKey if(shouldBeSequential === true){project.sequential = true} if(shouldBeCompletedByChildren === true){project.completedByChildren = true} if(subTask1Title){ new Task(subTask1Title, project) console.log(subTask1Title) } if(subTask2Title){ new Task(subTask2Title, project) console.log(subTask2Title) } if(subTask3Title){ new Task(subTask3Title, project) console.log(subTask3Title) } if(subTask4Title){ new Task(subTask4Title, project) console.log(subTask4Title) } if(subTask5Title){ new Task(subTask5Title, project) console.log(subTask5Title) } URL.fromString(`omnifocus:///task/${projectID}`).open() } catch(err){ console.error(err) } }); action.validate = function(selection, sender){ return true }; return action; })();