通过用户在集合中添加 Timeoff 不起作用
Adding Timeoff via User in a collection not working
我发现了一些与这个问题完全相同的旧 Stackverflow 线程,但我无法找到解决方案。
基本上,我想添加超时,并且我了解到这样做的唯一方法 - 根据 [1] - 是通过发出 PUT 请求,将现有对象添加到集合中并添加新对象没有身份证。
我已经复制了 [1] 中所示的示例:
https://[DOMAIN].attasksandbox.com/attask/api/v5.0/RESVT?method=POST&sessionID=330051c6aaa24cb48edb3eab113d3a5a&updates=[{
"userID": "57270ab200030c6814a20577576f8399",
"startDate": "2016-08-12",
"endDate": "2016-08-15"
},
{
"ID": "575e7a27001a0dd8312a29defd886b78",
"objCode": "RESVT",
"startDate": "2016-06-01T00:00:00:000+0200",
"endDate": "2016-06-04T00:00:00:000+0200",
"userID": "57270ab200030c6814a20577576f8399"
}]&atomic=true
执行请求时的响应:
{
"data": [
{
"objCode": "RESVT",
"ID": "575e7410001a031e06534a49b3032fd1"
},
{
"objCode": "RESVT",
"ID": "575e7410001a031f1ee4a0379c96d287"
}
]
}
但是我在用户的 Timeoff 页面(以及通过 API 搜索 timeoff 对象时)看到的唯一 timeoff 是更新参数中的 last 对象.在上面的示例中,它将是 6 月 1 日至 4 日。如果我重新安排更新数组,使 6 月 1 日至 4 日成为列表中的第一个,那么我会看到 8 月 12 日至 15 日。
我也尝试过使用 method=PUT 而不是 method=POST 但后来我收到了这条消息:
{
"error": {
"class": "java.lang.IllegalArgumentException",
"message": "Must specify an ID for each object that is edited"
}
}
我做错了什么?
[1]:php - AtTask API - 添加休息时间 - 堆栈内存溢出
AtTask API - Adding Time Off Hours
您遇到的问题是您是在 RESVT 对象而不是 USER 对象上进行更新,因此每次调用都会向用户添加一个新项目 timeOff 替换所有以前的条目,所以您只看到最后一个的原因on 是因为它是 运行 的最后一个并且所有先前的条目都被删除。
要更正此问题,您需要在用户对象上进行更新并更新预留时间集合。
您可以通过以下调用来完成此操作。
PUT /attask/api/v4.0/user/[userID]?&sessionID=[sessionID]&updates=
{
reservedTimes:
[
{
"ID": "547debb6000dea62198bd66b7c73e174",
"objCode": "RESVT",
"endDate": "2014-07-08T23:59:00:163-0600",
"startDate": "2014-07-08T00:00:00:163-0600"
},
{
"ID": "547debb6000dea61b8c695ba24918fe8",
"objCode": "RESVT",
"endDate": "2014-02-13T23:59:00:329-0700",
"startDate": "2014-02-13T00:00:00:329-0700"
},
{
"objCode": "RESVT",
"endDate": "2014-02-14T23:59:00:329-0700",
"startDate": "2014-02-14T00:00:00:329-0700"
}
]
}
我发现了一些与这个问题完全相同的旧 Stackverflow 线程,但我无法找到解决方案。
基本上,我想添加超时,并且我了解到这样做的唯一方法 - 根据 [1] - 是通过发出 PUT 请求,将现有对象添加到集合中并添加新对象没有身份证。
我已经复制了 [1] 中所示的示例:
https://[DOMAIN].attasksandbox.com/attask/api/v5.0/RESVT?method=POST&sessionID=330051c6aaa24cb48edb3eab113d3a5a&updates=[{
"userID": "57270ab200030c6814a20577576f8399",
"startDate": "2016-08-12",
"endDate": "2016-08-15"
},
{
"ID": "575e7a27001a0dd8312a29defd886b78",
"objCode": "RESVT",
"startDate": "2016-06-01T00:00:00:000+0200",
"endDate": "2016-06-04T00:00:00:000+0200",
"userID": "57270ab200030c6814a20577576f8399"
}]&atomic=true
执行请求时的响应:
{
"data": [
{
"objCode": "RESVT",
"ID": "575e7410001a031e06534a49b3032fd1"
},
{
"objCode": "RESVT",
"ID": "575e7410001a031f1ee4a0379c96d287"
}
]
}
但是我在用户的 Timeoff 页面(以及通过 API 搜索 timeoff 对象时)看到的唯一 timeoff 是更新参数中的 last 对象.在上面的示例中,它将是 6 月 1 日至 4 日。如果我重新安排更新数组,使 6 月 1 日至 4 日成为列表中的第一个,那么我会看到 8 月 12 日至 15 日。
我也尝试过使用 method=PUT 而不是 method=POST 但后来我收到了这条消息:
{
"error": {
"class": "java.lang.IllegalArgumentException",
"message": "Must specify an ID for each object that is edited"
}
}
我做错了什么?
[1]:php - AtTask API - 添加休息时间 - 堆栈内存溢出 AtTask API - Adding Time Off Hours
您遇到的问题是您是在 RESVT 对象而不是 USER 对象上进行更新,因此每次调用都会向用户添加一个新项目 timeOff 替换所有以前的条目,所以您只看到最后一个的原因on 是因为它是 运行 的最后一个并且所有先前的条目都被删除。
要更正此问题,您需要在用户对象上进行更新并更新预留时间集合。
您可以通过以下调用来完成此操作。
PUT /attask/api/v4.0/user/[userID]?&sessionID=[sessionID]&updates=
{
reservedTimes:
[
{
"ID": "547debb6000dea62198bd66b7c73e174",
"objCode": "RESVT",
"endDate": "2014-07-08T23:59:00:163-0600",
"startDate": "2014-07-08T00:00:00:163-0600"
},
{
"ID": "547debb6000dea61b8c695ba24918fe8",
"objCode": "RESVT",
"endDate": "2014-02-13T23:59:00:329-0700",
"startDate": "2014-02-13T00:00:00:329-0700"
},
{
"objCode": "RESVT",
"endDate": "2014-02-14T23:59:00:329-0700",
"startDate": "2014-02-14T00:00:00:329-0700"
}
]
}