Airtable 自动化踩坑记:扫码入库的最后一公里

Barcode 字段看起来是文本,Automation 里就是不认。踩完这个坑,样品进出库系统终于真正闭环了。
背景:一张主表用了大半年,现在要升级
鞋厂样品管理,我用 Airtable 做了大半年。
最初的架构很简单——一张样品主档案,每双鞋一条记录,进库出库归还都直接在主表里操作。能用,但问题越来越明显:
- 同一双鞋的历史动作混在一条记录里,看不清
- 状态靠手动更新,漏改是常态
- 想加位置管理,没法扩展
所以最近开始升级,把原来一张表的逻辑拆成三层:
- 样品主档案:每双鞋的身份证,只记当前状态和位置
- 样品流转记录:所有进出库动作的流水账,扫码的唯一入口
- 库存位置记录:样品室、展会区、客户寄样区……位置字典
核心原则确立:扫码只写流水表,主档案由 Automation 自动更新。
扫码脚本早就跑通了。但最关键的一环——Automation 怎么把流水记录自动匹配到主档案——卡住了。
目标:这套逻辑不复杂
理想中的自动化流程是这样的:
扫码 → 流水表新增记录 → Automation 触发
│
去主档案找同一个条码
/ \
找到了 没找到
│ │
关联已有记录 新建一条主档案
│ │
└──────┬────────┘
│
更新流转记录状态
用 Airtable Automation 的 Find records + 条件判断 + Update/Create record 就能实现。配置思路清晰,动手——然后卡了。
撞墙:肉眼一模一样,Automation 不认
按直觉配好:
Trigger:样品流转记录表有新记录创建时
Action 1 — Find records:
- 在「样品主档案」里搜索
- 条件:
Barcode(条码)is 触发记录的Barcode
If 找到了 → 关联 link,更新状态
If 找不到 → 新建主档案
跑起来——找不到,永远找不到。
两个表里的条码写的一样:FC6177401101。肉眼比对,没区别。换了几种条件写法,还是每次都走进”找不到”的分支,狂建重复记录。
排查了好几轮,怀疑过触发器没有正常触发、字段引用错了、过滤条件写反了……都不是。
转折:这不是配置问题,是字段类型问题
试了四五种写法都不行,开始意识到:这不是配置问题。
把问题扔给 AI,但这次换了一种方式提问:
“你别瞎猜,去 Airtable 官方和相关网站搜索一下,这种跨表 Barcode 字段匹配的自动化应该怎么设置。”
让它查,不让它猜。
AI 查完之后,一句话点破了:
Airtable 的 Barcode 字段不是普通文本字段,它是一个对象。
在表格界面你看到的是一串数字,但在 Automation 的 Find records 比对逻辑里,处理的是”Barcode 对象 vs Barcode 对象”,不是”文本 vs 文本”。两个长得一模一样的条码,在 Automation 眼里不是同一个东西。
解法:两条路,选一条
解法 A:直接改字段类型(我用的,更干净)
把两个表的 Barcode 字段类型从「Barcode」改成「Single line text」。
操作步骤:
- 打开「样品流转记录」表,点击
Barcode字段 → 字段设置 - 把字段类型从 Barcode 改成 Single line text → 保存
- 打开「样品主档案」表,同样操作
Barcode(条码)字段 - 回到 Automation,Find records 的条件不用改,直接生效
改完之后,两边都是纯文本字符串,Find records 的比对就通了。原有数据不受影响,字段里的条码值完全保留。
注意:改成 Single line text 之后,这个字段就不再支持扫码摄像头直接录入了。如果你的团队用手机摄像头扫码录入,要考虑这个影响。
解法 B:加公式字段做桥接(保留 Barcode 字段)
如果需要保留 Barcode 字段的扫码功能,可以不改原字段,改为在两边各加一个 Formula 字段。
第一步:在「样品流转记录」表新增字段
| 字段名 | 类型 | 公式 |
|---|---|---|
| BarcodeText | Formula | {Barcode} & "" |
第二步:在「样品主档案」表新增字段
| 字段名 | 类型 | 公式 |
|---|---|---|
| BarcodeText | Formula | {Barcode(条码)} & "" |
第三步:修改 Automation 的 Find records 条件
把比对条件从:
Barcode(条码) is [触发记录的 Barcode]
改成:
BarcodeText is [触发记录的 BarcodeText]
用文本字段比文本字段,绕过 Barcode 对象的坑。
完整 Automation 配置(以解法 A 为例)
Trigger:When a record is created
- 表:
样品流转记录_SampleMovementTxn - 附加过滤条件:
Barcodeis not empty样品is empty
为什么要加附加过滤? 防止两种情况触发多余的自动化:
- 扫了空条码的记录——Barcode 为空,直接跳过
- 已经关联过主档案的记录——「样品」字段不为空,跳过,避免重复触发
Action 1:Find records
| 配置项 | 值 |
|---|---|
| 表 | 样品主档案_SampleMaster |
| Find records based on | Condition |
| 条件 | Barcode(条码) is 触发记录的 Barcode |
| Maximum record limit | 1 |
limit 设 1 就够,找到第一条即可,避免多条记录带来歧义。
Action 2:If Records Airtable record ID is empty(条码在主档案里不存在)
这里用 record ID 是否为空 来判断有没有找到记录——这是 Airtable 官方推荐的做法,比判断 Records length 更可靠。
子 Action 1:Create record
- 表:
样品主档案_SampleMaster - 字段:
Barcode(条码)= 触发记录的Barcode
子 Action 2:Update record
- 表:
样品流转记录_SampleMovementTxn - Record ID:触发记录的 Airtable record ID
- 字段:
样品= Create record 的 Airtable record ID(通过+菜单选上一步的输出)处理状态= 已新增主档案
关键点:
样品字段的来源必须选 Create record 的输出,绝对不能选 Find records 的输出——Find records 在这条分支里是空的,选了会关联失败。
Action 3:Otherwise if Records Airtable record ID is not empty(找到了匹配)
Update record
- 表:
样品流转记录_SampleMovementTxn - Record ID:触发记录的 Airtable record ID
- 字段:
样品= Find records 的 Airtable record ID处理状态= 已匹配主档案
验证:两条分支都跑通了
配置完成当天,打开流转表看历史记录——「处理状态」里同时出现了「已新增主档案」和「已匹配主档案」两种值。
两条分支都跑过了,不是纸上谈兵。
建议手动测三个场景确认没问题:
| 场景 | 操作 | 预期结果 |
|---|---|---|
| 扫已有条码 | 扫一个主档案里已有的条码 | 流转记录关联到已有主档案,处理状态:已匹配主档案 |
| 扫新条码 | 扫一个主档案里没有的条码 | 自动新建主档案,流转记录关联到新建记录,处理状态:已新增主档案 |
| 重复扫描 | 同一条码连扫两次 | 第二次触发后,因「样品」字段已不为空,附加过滤拦截,不重复处理 |
复盘:三个值得记住的经验
1. 字段类型不是装饰,是逻辑
Airtable 有 20 多种字段类型。Barcode、URL、Email、Phone——这些看起来像文本的字段,在 Automation 里不一定当文本处理。遇到跨字段比对,先确认两边类型一致,别假设”看起来一样就是一样”。
2. 给 AI 指令的质量决定输出质量
同样的问题,让 AI 直接给方案,和让 AI 先去查资料再回答——输出差很多。“别猜,去查”这五个字,在这个问题里值了。
3. 判断”有没有找到记录”用 record ID,不用 length
If Records Airtable record ID is empty 是官方推荐写法。Records length 在某些边界情况下不稳定。用 record ID 更可靠。
附:表结构备忘
| 表 | 核心字段 | 作用 |
|---|---|---|
| 样品主档案_SampleMaster | Barcode(条码)、当前状态、当前位置 | 样品身份证,记录当前状态 |
| 样品流转记录_SampleMovementTxn | Barcode、样品(link)、动作类型、处理状态 | 所有进出库动作的流水账,扫码唯一入口 |
| 库存位置记录 | 位置名称 | 位置字典 |
从一张主表凑合用,到三层架构真正闭环——卡在 Automation 最后一公里的那次排查,记在这里。