我一直在试验Google Apps脚本任务API,以便通过电子邮件创建新任务。我已使用以下两种方法成功创建了这些列表中的TasksList和Tasks。但是,我一直在尝试使用可选的“父”资源创建子任务,但运气不佳。我正在尝试复制Google Tasks中可用的任务“缩进”功能,这使得tak显示为其之前任务的子项。有没有人设法使用API工作?
方法1 -
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”)下显示为子(缩进)任务)。
任何人都可以对此有所了解吗?
答案 0 :(得分:1)
好的,我终于找到了上面的答案......
我在上面的代码中犯了一个基本错误,我假设任务的父设置是父任务名称,实际上它应该是Tasks 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项目管理器插件,该插件创建新任务和评论的自动邮件。要完整实施,您可以看到this post。
答案 1 :(得分: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}
);
答案 2 :(得分:0)
为了将您的任务(Child)置于其他任务(Parent)之下,您应该这样做: (下面的代码是用Java语言编写的):
第1步:仔细阅读本文档: Use Tasks Parameters,特别读取父亲和先前的内容。
第2步:现在编写代码:
import numpy as np
import scipy as sci
from scipy import interpolate
X_data
Y_data
def x(t,A,B):
return A**t + B**t
def y(t,A,B):
return A*t + B
def interp(A,B):
ts = np.arange(-10,10,0.1)
xs = x(ts,A,B)
ys = y(ts,A,B)
f = interpolate.interp1d(xs,ys)
return f
N = 101
lsqs = np.recarray((N**2),dtype=float)
count = 0
for i in range(0,N):
A = 0.1*i #checks A between 0 and 10
for j in range(0,N):
B = 10 + 0.1*j #checks B between 10 and 20
f = interp(A,B)
y_fit = f(X_data)
squares = np.sum((y_fit - Y_data)**2)
lsqs[count] = (A,b,squares) #puts the values in place for comparison later
count += 1 #allows us to move to the next cell
i = np.argmin(lsqs[:,2])
A_optimal = lsqs[i][0]
B_optimal = lsqs[i][1]
希望这会对某人有所帮助!!