本方案实现:将飞书表单提交的记录中的多个附件拆分为独立子记录,每条子记录只包含一个附件,并作为原记录的子记录。支持自定义父记录关联字段,自动删除旧子记录,避免数据重复积累。适用于多维表格自动化插件场景,允许用户通过按钮可视化选择字段。
获取记录内容
GET https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/{record_id}
fields 字段,提取附件字段内容(如 “单子”内容,拍照上传),附件字段为列表,每个元素包含 file_token、name 等信息。字段过滤与数据清洗
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
查询所有关联的子记录
父记录)过滤出所有与当前父记录关联的子记录。{
"filter": {
"conjunction": "and",
"conditions": [
{
"field_name": link_field_name,
"operator": "is",
"value": [record_id]
}
]
},
"page_size": 1000
}
items 列表即为所有关联子记录,提取其 record_id。批量删除子记录
url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records/batch_delete"
payload = {"records": batch_ids}
构建子记录字段
[{ "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
设置父记录关联字段
父记录)必须为字符串列表,内容为父记录ID。sub_record[link_field_name] = [record_id]
批量创建子记录
参数可视化选择
APP_TOKEN、TABLE_ID、RECORD_ID。ATTACHMENT_FIELD_NAME)和父记录关联字段(LINK_FIELD_NAME)。代码适配自动化插件
将参数获取方式由环境变量改为自动化插件的 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 错误。本方案实现了飞书多维表格附件字段的自动拆分,支持自定义父记录关联字段,自动删除旧子记录,避免数据重复。适配多维表格自动化插件场景,用户可通过按钮可视化选择字段,无需手动配置环境变量。所有操作均基于飞书开放平台API,确保数据一致性和操作安全。
预期效果:每次执行拆分操作,原记录的所有附件被拆分为独立子记录,子记录仅包含一个附件并正确关联父记录,旧子记录自动清理,表格数据整洁、便于后续处理。