logo
0
0
WeChat Login

飞书多维表格附件拆分及子记录同步解决方案

本方案实现:将飞书表单提交的记录中的多个附件拆分为独立子记录,每条子记录只包含一个附件,并作为原记录的子记录。支持自定义父记录关联字段,自动删除旧子记录,避免数据重复积累。适用于多维表格自动化插件场景,允许用户通过按钮可视化选择字段。


步骤一:获取源记录及附件信息

  1. 获取记录内容

    • 通过记录ID直接调用查询记录接口,获取目标记录的全部字段数据。
    • API示例:
      GET https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/{record_id}
    • 解析响应中的 fields 字段,提取附件字段内容(如 “单子”内容,拍照上传),附件字段为列表,每个元素包含 file_tokenname 等信息。
  2. 字段过滤与数据清洗

    • 仅保留字段名非空且值有效的字段,排除空字段名、空值字段、系统字段(如创建时间、修改时间等)。
    • 过滤代码参考:
      valid_fields = {} for field_name, field_value in raw_fields.items(): if not field_name.strip(): continue if field_value is None: continue valid_fields[field_name] = field_value

步骤二:查询并删除旧子记录

  1. 查询所有关联的子记录

    • 调用批量查询记录接口,通过父记录关联字段(如 父记录)过滤出所有与当前父记录关联的子记录。
    • 请求示例:
      { "filter": { "conjunction": "and", "conditions": [ { "field_name": link_field_name, "operator": "is", "value": [record_id] } ] }, "page_size": 1000 }
    • 响应中的 items 列表即为所有关联子记录,提取其 record_id
  2. 批量删除子记录

    • 调用批量删除记录接口,删除所有查询到的子记录。
    • 单次最多删除500条,需分批处理。
    • 删除代码参考:
      url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/batch_delete" payload = {"records": batch_ids}

步骤三:创建子记录(附件拆分)

  1. 构建子记录字段

    • 每个附件生成一条子记录,子记录只包含一个附件。
    • 复制源记录的其他非关联字段,排除附件字段、父记录关联字段、所有关联类型字段(如值为 [{ "table_id": ... }] 的字段)、系统字段。
    • 代码参考:
      for field_name, field_value in valid_fields.items(): if field_name == attachment_field_name or field_name == link_field_name: continue if isinstance(field_value, list) and len(field_value) > 0 and isinstance(field_value[0], dict) and "table_id" in field_value[0]: continue if field_name in ["created_by", "created_time", "last_modified_by", "last_modified_time"]: continue other_fields[field_name] = field_value
  2. 设置父记录关联字段

    • 子记录的父记录关联字段(如 父记录)必须为字符串列表,内容为父记录ID。
    • 正确格式:
      sub_record[link_field_name] = [record_id]
  3. 批量创建子记录

    • 调用批量新增记录接口,批量创建所有子记录。
    • 单次最多支持1000条记录。

步骤四:支持多维表格自动化插件(按钮场景)

  1. 参数可视化选择

    • 在多维表格自动化插件中,用户通过按钮触发,自动传入 APP_TOKENTABLE_IDRECORD_ID
    • 用户可通过表单组件选择附件字段(ATTACHMENT_FIELD_NAME)和父记录关联字段(LINK_FIELD_NAME)。
  2. 代码适配自动化插件

    • 将参数获取方式由环境变量改为自动化插件的 args,如:

      app_token = args.get("app_token") table_id = args.get("table_id") record_id = args.get("record_id") attachment_field_name = args.get("attachment_field") link_field_name = args.get("link_field")
    • 参考开发文档:飞书多维表格自动化插件开发指南


步骤五:异常处理与容错

  • 关联字段格式校验:确保父记录关联字段值为字符串列表,避免 LinkFieldConvFail 错误。
  • 字段过滤:排除所有关联类型字段,避免格式错误导致创建失败。
  • 批量操作限制:单次最多删除/创建500/1000条记录,需分批处理。
  • 权限校验:确保应用拥有多维表格的管理权限,参考多维表格权限说明

总结

本方案实现了飞书多维表格附件字段的自动拆分,支持自定义父记录关联字段,自动删除旧子记录,避免数据重复。适配多维表格自动化插件场景,用户可通过按钮可视化选择字段,无需手动配置环境变量。所有操作均基于飞书开放平台API,确保数据一致性和操作安全。

预期效果:每次执行拆分操作,原记录的所有附件被拆分为独立子记录,子记录仅包含一个附件并正确关联父记录,旧子记录自动清理,表格数据整洁、便于后续处理。

About

飞书多维表格中某一记录中多个附件拆分成多个单一附件子记录

Language
Python100%