1

我一直在尝试使用 Google Apps Script Tasks API 从电子邮件中创建新任务。我已经使用以下两种方法成功地在这些列表中创建了 TasksList 和 Tasks。但是,我一直在尝试使用可选的“父”资源创建子任务,但运气不佳。我正在尝试复制 Google Tasks 中可用的任务“缩进”功能,这使得 tak 显示为它之前任务的子项。有没有人设法使用 API 让它工作?

方法一——

taskListId = getTaskListID("My Projects");
var taskDetails = {
  title: "Task 1",
  notes: "This is a child task",
  parent: "Project A"
};
Tasks.Tasks.insert(taskDetails, tasklistId);

方法2:-

taskListId = getTaskListID("My Projects");
var newTask = Tasks.newTask().setTitle(title);
newTask.setParent("Project A");
Tasks.Tasks.insert(newTask, tasklistId);

在这两种情况下,脚本都会在任务列表(“我的项目”)下创建一个任务(“任务 1”),但我无法让它在现有任务(“项目 A”)下显示为子(缩进)任务。

任何人都可以对此有所了解吗?

4

3 回答 3

1

好的,我终于找到了上面的答案......

我在上面的代码中犯了一个基本错误,我假设任务的父设置是父任务名称,而实际上它应该是任务 API 分配给它的父任务 ID。

然后我意识到应该在将任务的父级插入到 TasksList 之后设置它,而不是作为新任务初始化的一部分,所以它现在看起来像这样:

var taskListID = getTasklistId_(tasklistName);
var parentTask = getParentTask_(projectName,taskListID);
var taskDetails = {
  title: title,
  notes: notes,
  parent: parentTask["id"],
  position: parentTask["idx"]
};
var newTask = Tasks.newTask().setTitle(title);
newTask = Tasks.Tasks.insert(newTask, taskListID, taskDetails);
newTask.setParent(parentTask["id"]);

如您所见,我必须重置新任务的父级。该getParentTask_函数返回父任务 ID 和最后一个子元素位置以插入新任务

function getParentTask_(taskName, taskListId) {
var tasks = Tasks.Tasks.list(taskListId);
  var taskID;
  var position;
  if (tasks.items) {
    for (var i = 0; i < tasks.items.length; i++) {
      var task = tasks.items[i];
      if(taskName == task.title){ 
        taskID = task.id;
        Logger.log('Task with title "%s" and ID "%s" was found.', task.title, task.id);
      }
      //lets pick up the last child task's position in order to insert the new task below
      if(taskID == task.parent) position = task.position;
    }
  } 
  if( taskID == null){
      var newTask = Tasks.newTask().setTitle(taskName);
      newTask = Tasks.Tasks.insert(newTask,taskListId);
      taskID = newTask.id;
      position = newTask.position;
   }
  var result = {
    id: taskID,
    idx: position
  };
  return result;
}

我希望以上内容可以帮助人们使用 Google Mail Tasks API 发挥创意。

PS:我用它来链接 Wordpress WP 项目管理器插件,该插件创建新任务和评论的自动邮件。对于完整的实现,你可以看到这篇文章

于 2014-05-05T14:36:36.090 回答
1

实际上,@vijay-j 是对的。您不能直接设置任务位置。您必须在创建子任务时previous设置参数。parent

https://developers.google.com/tasks/reference/rest/v1/tasks/insert
https://developers.google.com/google-apps/tasks/params

在 Javascript 中添加示例,创建具有 2 个子任务的任务:

var taskListId = "add yours here";

var parentTask = Tasks.Tasks.insert({ title: 'Parent' }, taskListId);

var sub1 = Tasks.Tasks.insert(
  { title: 'Sub1' }, 
  taskListId,
  { parent: parentTask.id }
);

var sub2 = Tasks.Tasks.insert( 
  { title: 'Sub2' },
  taskListId,
  { parent: parentTask.id, previous: sub1.id}
);
于 2021-03-29T12:20:38.937 回答
0

为了将您的任务(子)放在其他任务(父)下,您应该这样做:(下面的代码是 Java 语言):

第 1 步:仔细阅读本文档: 使用任务参数,特别阅读什么是父级和以前的。

第 2 步:现在编写您的代码:

//first add parent step 
Task parentTask = service.tasks().insert(taskList.getId(), task). execute();

//now add child task say,session1
Task childTask=new Task();
childTask.setTitle("Session1");
Task response = service.tasks().insert(taskList.getId(), task). execute();

//now move this child task  under  parent task
service.tasks().move(taskList.getId(),response.getId()).setParent(parentTask.getId()).execute();

希望这会对某人有所帮助!

于 2015-08-21T06:27:54.707 回答