【问题标题】:Automatically add new child rows to sheet when a new row is added in Smartsheet API using json使用 json 在 Smartsheet API 中添加新行时自动将新子行添加到工作表
【发布时间】:2021-10-18 19:48:49
【问题描述】:

对于我在 Smartsheet 中的项目,我有一个工作表,每当在工作表中创建新行时,都需要添加多个子行。

我想获取工作表 1 中的某些行,并将它们作为子行复制到工作表 1 中的另一个位置,每次创建新行时都会自动进行。

有没有办法做到这一点?

我尝试过的事情:如果我尝试在同一个工作表中复制,将行复制到另一个工作表方法会发送错误。我确实将模板行重新定位到另一个工作表,以便它将从工作表 2 复制回工作表 1,但它不会让我指定位置,除非我做错了。但它返回错误:

应用程序返回“无法解析请求。发生以下错误:在第 2 行第 65 列找到未知属性“parentId”。

作为参考,这是我正在使用的代码:

     sheets/6237392404277124/rows/copy

     {
     "rowIds": [8864322101372804, 279335311697796, 4782934939068292], 
     "to": {"sheetId": 6730248491427716, "parentId": 2384552453924740}
     }

【问题讨论】:

    标签: json webhooks smartsheet-api


    【解决方案1】:

    您的方案可以通过多个步骤解决。

    第 1 步:创建 webhook

    您的场景的第一个方面是:当新行添加到指定工作表时,您的应用需要自动通知。为此,您需要创建一个webhook,当指定工作表中发生事件时,它将向您的应用发送回调通知。

    您的应用收到的通知将包含Callback object。您需要评估 Callback 对象的 events 属性(CallbackEvent objects 的数组)——寻找以下事件:

    • objectType =
    • eventType = 创建

    当您看到满足此条件的CallbackEvent 对象时——保存id 属性的值——这就是新添加行的id(将是父行用于您要在其下添加的行)。

    第 2 步:将行复制到目标工作表

    接下来,您需要像您在帖子中描述的那样进行操作——即将行从另一个工作表复制到目标工作表,方法是使用 Copy Rows 操作。请注意,此操作将始终将复制的行放在目标工作表的底部。 (不能指定其他位置。)Copy Rows 操作的成功响应将返回一个CopyOrMoveRowResult 对象,如下所示:

    {
      "destinationSheetId": 2258256056870788,
      "rowMappings": [
        {    
          "from": 145417762563972,
          "to": 4508365800925060
        },   
        {    
          "from": 8026717110462340,
          "to": 2256565987239812
        }    
      ]    
    }
    

    在此响应中,rowMappings 数组将包含每个复制行的对象。您需要保存此数组中每个 to 属性的值 - 这些是您复制到目标工作表的新行的 ids

    第 3 步:将复制的行移动到目标工作表中的所需位置

    所以,此时,您知道以下内容:

    • 触发此工作流的新创建行的 id
    • 已复制到目标工作表底部的每一行的id

    最后,您需要将复制的行从目标工作表底部移动到目标工作表中的所需位置(即,在触发此工作流程的新创建行下方)。为此,您将使用Update Rows 操作。您可以发出单个 Update Rows 请求来移动所有 3 行。

    例如,以下 Update Rows 请求将三行(由每个对象内的 id 属性标识)移动为指定父行(由 parentId 属性标识)的子行每个对象内)。请务必按照您希望它们出现的顺序指定行。在这个例子中——假设指定的父行下之前没有子行——行 ID 3170202670262148 成为第一个子行,然后是行 ID 7673802297632644 作为第二个子行,然后是行 ID @987654341 @ 作为第三个也是最后一个子行。

    PUT /sheets/{sheetId}/rows
    
    [
        {
            "id": 3170202670262148, 
            "parentId": 5225480965908356, 
            "toBottom": true
        },
        {
            "id": 7673802297632644, 
            "parentId": 5225480965908356, 
            "toBottom": true
        },
        {
            "id": 2044302763419524, 
            "parentId": 5225480965908356, 
            "toBottom": true
        }   
    ]
    

    希望这会有所帮助。实现您描述的场景显然需要做一些工作,但它肯定是可能的。

    【讨论】:

    • 我实际上最终使用了 Add Row 方法并使用 PUT webhook 写入了我需要的所有数据。它可能比我想要的效果更好,但我肯定会在另一个项目中尝试这个,我会更新它的进展情况!
    • 感谢您的更新——听起来不错!我期待听到这种方法如何为您服务。同时,如果您不介意给这个答案一个“赞成票”,我将不胜感激。这样做将使其他人将来更有可能从这些信息中受益。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2023-04-07
    相关资源
    最近更新 更多