Estoy tratando de implementar la automatización para el administrador de tareas Things 3 en macOS usando JXA (Javascript para la automatización de macOS) y lo estoy ejecutando con un error extraño. He pasado incontables horas tratando de arreglar esto yo mismo y con la ayuda de otros. Estoy tratando de usar el siguiente método descrito en la documentación:
De la siguiente manera:
// Set TaskApp as the app to use var TaskApp = Application('Things3'); // Get the ToDo from toDos var task = TaskApp.toDos["test555342343"] // Get today as a date var today = new Date() // Schedule the task for Today task.schedule(task.id(), {for: today}) Esto devuelve el error: Error: Error: Named parameters must be passed as an object.
Cuando se usa otro método (como show ), el especificador funciona como se esperaba:
Ejemplo:
// Set TaskApp as the app to use var TaskApp = Application('Things3'); // Get the ToDo from toDos var task = TaskApp.toDos["test555342343"] // Bring Things3 to the Forground TaskApp.activate() // Show the task task.show(task.id()) Mostrará la tarea seleccionada. La creación de una tarea con una fecha límite establecida en el objeto de date también produce el resultado correcto (una tarea con la fecha límite de date ).
Esta documentación solo se puede encontrar cuando tiene Things3 instalado en macOS y hace referencia a la biblioteca de scripts. He añadido la documentación en PDF. El error descrito también se aplica al método de move . En lugar de analizar una fecha, analiza un List Object que se resolverá en el mismo error.
Enlace a la documentación PDF → Enlace
La documentación de Things es incorrecta: la schedule es un método de Application , no de ToDo , por lo que solicita un especificador de tareas pendientes (no lo necesitaría si ya fuera una propiedad de un objeto ToDo). El código de trabajo por lo tanto es:
// Set TaskApp as the app to use var TaskApp = Application('Things3') // Get the ToDo from toDos var task = TaskApp.toDos["test555342343"] // Get today as a date var today = new Date() // Schedule the task for Today TaskApp.schedule(task, {for: today}) Tenga en cuenta que la task ya es un especificador de ToDo; no necesita el desvío a través task.id() , que convierte el especificador ToDo en una cadena de ID antes de permitir que el método de schedule lo devuelva a un especificador.