使用 json 在 Smartsheet API 中添加新行时自动将新的子行添加到 sheet
Automatically add new child rows to sheet when a new row is added in Smartsheet API using json
对于我在 Smartsheet 中的项目,我有一个 sheet 需要在 sheet 中创建新行时添加多个子行。
我想在 sheet 1 中获取某些行,并将它们作为子行自动复制到 sheet 1 中的另一个位置,每次创建新行时。
有办法吗??
我尝试过的事情:如果我尝试在同一个 sheet 中复制,则复制行到另一个 sheet 方法会发送错误。我确实将模板行重新定位到另一个 sheet 以便它将从 sheet 2 复制回 sheet 1,但它不会让我指定位置,除非我正在做它错了。但它 returns 错误:
The app returned "Unable to parse request. The following error >occurred: Unknown attribute "parentId" found at line 2, column 65".
作为参考,这是我正在使用的代码:
sheets/6237392404277124/rows/copy
{
"rowIds": [8864322101372804, 279335311697796, 4782934939068292],
"to": {"sheetId": 6730248491427716, "parentId": 2384552453924740}
}
您的场景可以通过多个步骤解决。
第 1 步:创建网络钩子
您的场景的第一个方面是:当向指定的 sheet 添加新行时,您的应用需要自动收到通知。为此,您需要创建一个 webhook,它会在指定的 sheet.
中发生事件时向您的应用发送回调通知。
您的应用收到的通知将包含该 Callback
对象的 Callback object. You'll want to evaluate the events
property (an array of CallbackEvent objects) -- 寻找一个事件,其中:
objectType
= 行
eventType
= 创建
当您看到满足此条件的 CallbackEvent
对象时——保存 id
属性 的值——即 id 新添加的行(这将是您要在其下添加的行的父行)。
步骤 2:将行复制到目标 sheet
接下来,您需要按照您在 post 中描述的方式进行操作——即将行从另一个 sheet 复制到目标 sheet,方法是使用Copy Rows operation. Note that this operation will always put the copied rows at the bottom of the target sheet. (It's not possible to specify another location.) A successful response from the Copy Rows
operation will return a CopyOrMoveRowResult 对象,看起来像这样:
{
"destinationSheetId": 2258256056870788,
"rowMappings": [
{
"from": 145417762563972,
"to": 4508365800925060
},
{
"from": 8026717110462340,
"to": 2256565987239812
}
]
}
在此响应中,rowMappings
数组将为每个复制的行包含一个对象。您需要保存此数组中每个 to
属性 的值——这些是您复制到的新行的 ids目标 sheet.
步骤 3:将复制的行移动到目标中的所需位置 sheet
所以,此时,您知道以下内容:
- 触发此工作流的新创建行的 id
- 已复制到目标底部的每一行的idsheet
最后,您需要将复制的行从目标 sheet 的底部移动到目标 sheet 中的所需位置(即,在触发此工作流的新创建的行下方) .为此,您将使用 Update Rows 操作。您可以发出单个 Update Rows 请求来移动所有 3 行。
例如,以下 Update Rows 请求移动三行(由每个对象中的 id
属性 标识)作为指定的父行(由每个对象中的 parentId
属性 标识)。请务必按照您希望它们出现的顺序指定行。在这个例子中——假设指定的父行下以前没有子行——行 ID 3170202670262148
成为第一个子行,然后是行 ID 7673802297632644
作为第二个子行,然后是行 ID 2044302763419524
作为第三个也是最后一个子行。
PUT /sheets/{sheetId}/rows
[
{
"id": 3170202670262148,
"parentId": 5225480965908356,
"toBottom": true
},
{
"id": 7673802297632644,
"parentId": 5225480965908356,
"toBottom": true
},
{
"id": 2044302763419524,
"parentId": 5225480965908356,
"toBottom": true
}
]
希望这对您有所帮助。实现您描述的场景显然需要一些工作,但这当然是可能的。
对于我在 Smartsheet 中的项目,我有一个 sheet 需要在 sheet 中创建新行时添加多个子行。
我想在 sheet 1 中获取某些行,并将它们作为子行自动复制到 sheet 1 中的另一个位置,每次创建新行时。
有办法吗??
我尝试过的事情:如果我尝试在同一个 sheet 中复制,则复制行到另一个 sheet 方法会发送错误。我确实将模板行重新定位到另一个 sheet 以便它将从 sheet 2 复制回 sheet 1,但它不会让我指定位置,除非我正在做它错了。但它 returns 错误:
The app returned "Unable to parse request. The following error >occurred: Unknown attribute "parentId" found at line 2, column 65".
作为参考,这是我正在使用的代码:
sheets/6237392404277124/rows/copy
{
"rowIds": [8864322101372804, 279335311697796, 4782934939068292],
"to": {"sheetId": 6730248491427716, "parentId": 2384552453924740}
}
您的场景可以通过多个步骤解决。
第 1 步:创建网络钩子
您的场景的第一个方面是:当向指定的 sheet 添加新行时,您的应用需要自动收到通知。为此,您需要创建一个 webhook,它会在指定的 sheet.
中发生事件时向您的应用发送回调通知。您的应用收到的通知将包含该 Callback
对象的 Callback object. You'll want to evaluate the events
property (an array of CallbackEvent objects) -- 寻找一个事件,其中:
objectType
= 行eventType
= 创建
当您看到满足此条件的 CallbackEvent
对象时——保存 id
属性 的值——即 id 新添加的行(这将是您要在其下添加的行的父行)。
步骤 2:将行复制到目标 sheet
接下来,您需要按照您在 post 中描述的方式进行操作——即将行从另一个 sheet 复制到目标 sheet,方法是使用Copy Rows operation. Note that this operation will always put the copied rows at the bottom of the target sheet. (It's not possible to specify another location.) A successful response from the Copy Rows
operation will return a CopyOrMoveRowResult 对象,看起来像这样:
{
"destinationSheetId": 2258256056870788,
"rowMappings": [
{
"from": 145417762563972,
"to": 4508365800925060
},
{
"from": 8026717110462340,
"to": 2256565987239812
}
]
}
在此响应中,rowMappings
数组将为每个复制的行包含一个对象。您需要保存此数组中每个 to
属性 的值——这些是您复制到的新行的 ids目标 sheet.
步骤 3:将复制的行移动到目标中的所需位置 sheet
所以,此时,您知道以下内容:
- 触发此工作流的新创建行的 id
- 已复制到目标底部的每一行的idsheet
最后,您需要将复制的行从目标 sheet 的底部移动到目标 sheet 中的所需位置(即,在触发此工作流的新创建的行下方) .为此,您将使用 Update Rows 操作。您可以发出单个 Update Rows 请求来移动所有 3 行。
例如,以下 Update Rows 请求移动三行(由每个对象中的 id
属性 标识)作为指定的父行(由每个对象中的 parentId
属性 标识)。请务必按照您希望它们出现的顺序指定行。在这个例子中——假设指定的父行下以前没有子行——行 ID 3170202670262148
成为第一个子行,然后是行 ID 7673802297632644
作为第二个子行,然后是行 ID 2044302763419524
作为第三个也是最后一个子行。
PUT /sheets/{sheetId}/rows
[
{
"id": 3170202670262148,
"parentId": 5225480965908356,
"toBottom": true
},
{
"id": 7673802297632644,
"parentId": 5225480965908356,
"toBottom": true
},
{
"id": 2044302763419524,
"parentId": 5225480965908356,
"toBottom": true
}
]
希望这对您有所帮助。实现您描述的场景显然需要一些工作,但这当然是可能的。