You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppSheet打卡Bot未更新现有行问题排查求助

问题描述

我正在制作员工打卡签到签退的Form视图,所有数据存储在Google Sheet的「Staff」工作表中。当前遇到问题:用户签退时,配置的Bot未更新已存在的签到行,反而新增了一行数据。我已设置2个Action和1个Bot,意图在「Staff」表数据变更时写入现有行,但未成功。以下是相关配置和错误信息,求排查问题根源。

Staff表设置

[Staff表配置截图]

Check Out Action设置

[Check Out Action配置截图]
Referenced Rows 公式:

SELECT(
      STAFF[_ROWNUMBER],
      AND(
        [Name] = USEREMAIL(),
        [Date] = TODAY(),
        [Branch] = [_THISROW].[Branch],
        ISBLANK([Time Out])
      )
    )

Set Check out time Action设置

[Set Check out time Action配置截图]

Bot设置

[Bot配置截图1]
[Bot配置截图2]
Event Condition 公式:

Not(ISBLANK(
  ANY(
    SELECT(
      Staff[Time In],
      AND(
        [Date] = TODAY(),
        [Branch] = [_THISROW].[Branch],
        [Name] = USEREMAIL()
      )
    )
  )
))

Bot测试错误信息

Failed: Error: 'Execute an Action on a Set of Rows' Data action 'Check Out' for 
table 'Staff failed with exception Cannot get key values when Parent or ChangeImage are null. 

{
  "$type": "Nirvana.Data.TaskResultTakeAction, V2API",
  "AppWorkflowRuleOrProcessName": "Process for Auto Check-In/Check-Out - 2",
  "ActionName": "Check Out",
  "Changes": {
    "$id": "1",
    "$type": "ChangeOperations.Changes, ChangeOperations",
    "ListChanges": [
      {
        "$id": "2",
        "$type": "ChangeOperations.Change, ChangeOperations",
        "AfterImage": [
          "6",
          "eexxx@gmail.com",
          "05/18/2024",
          "TBP",
          "",
          "13:16:00",
          "336:00:00",
          "10",
          "",
          "",
          ""
        ],
        "AfterImageOriginal": null,
        "BeforeImage": null,
        "BeforeImageOriginal": null,
        "ChangeImage": null,
        "ChangeImageToLog": [],
        "ChangeImageSavedImages": null,
        "ProcessStateDataChange": null,
        "MustReadBeforeOrAfterImage": false,
        "OpTypePerformed": "Update",
        "TableName": null
      }
    ]
  },
  "AppErrors": {
    "$type": "Jeenee.DataTypes.AppErrors, Jeenee.DataTypes",
    "RecordInfo": false,
    "RecordWarning": true,
    "AnnotateErrors": false,
    "Errors": []
  },
  "TaskType": "TakeAction",
  "TaskName": "Check Out"
}
问题分析与修复方案

1. 核心错误原因

错误提示Cannot get key values when Parent or ChangeImage are null表明:Bot执行更新操作时无法定位到目标行,要么是Referenced Rows公式未返回有效行,要么是表的主键配置缺失。

2. 具体排查点

  • 主键配置缺失:AppSheet依赖主键唯一识别行,若「Staff」表未设置主键(如_ROWNUMBER或自定义唯一ID列),更新操作会默认转为新增行。
  • Referenced Rows公式逻辑漏洞:
    • [_THISROW].[Branch]依赖触发Bot的表单行Branch值,若该值为空或与签到行Branch不匹配,将无法定位目标行。
    • 需确认USEREMAIL()返回值与签到行Name列值完全一致(含大小写、邮箱后缀)。
    • TODAY()是纯日期值,若签到行Date列为带时间的datetime格式,会导致日期匹配失败。
  • Bot触发逻辑不准确:当前Event Condition仅判断存在签到记录,但未限定触发场景为签退动作,可能导致非签退操作触发Bot,引发逻辑混乱。

3. 修复步骤

  1. 配置表主键:打开「Staff」表设置,指定主键列(推荐用_ROWNUMBER或自动生成的唯一ID)。
  2. 修正Referenced Rows公式:
    替换[_THISROW].[Branch]为稳定的分支来源(如用户配置表中的默认分支),同时确保日期匹配逻辑兼容datetime格式:
    SELECT(
      STAFF[_ROWNUMBER],
      AND(
        [Name] = USEREMAIL(),
        DATE([Date]) = TODAY(), -- 提取日期部分匹配,忽略时间
        [Branch] = LOOKUP(USEREMAIL(), Users[Email], Users[Branch]), -- 从用户表获取固定分支
        ISBLANK([Time Out])
      )
    )
    
  3. 优化Bot触发条件:添加签退动作判断,比如限定NOT(ISBLANK([Time Out]))或表单特定状态字段,确保Bot仅在签退时触发。
  4. 单独测试Action:手动传入参数测试Check Out Action,验证是否能正确找到目标行并完成更新。

内容的提问来源于stack exchange,提问作者Junekuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:53:14