Forma API 中 sheetlineage 的实体 id 为何与 sheet id 不匹配?
结论
sheetlineage.id 是图纸的历史标识(Sheet history ID),与 Sheets API 返回的 sheet.id 含义不同,不能直接比较。
要找到对应图纸,可以通过 Data Connector API 导出 sheets 数据,用 Relationship 中的 sheetlineage.id 匹配 sheets.history_id。匹配记录的 id 就是对应的 sheet ID。标识含义及处理方式说明
为什么两个 ID 不相等
这些字段标识的对象不同:
| 字段 | 含义 |
|---|---|
Relationship 顶层的 id | 关系记录本身 |
type: "sheetlineage" 实体的 id | 图纸历史标识 |
Sheets API 返回的 sheet.id | 具体图纸记录 |
Data Connector 的 sheets.history_id | 该图纸所属的历史标识 |
Data Connector 的官方 schema 同时提供 sheets.id 和 sheets.history_id,其中 history_id 指向图纸所属的历史记录。version_set_id、is_current 和 deleted 则可用于区分版本和状态。Sheets 数据结构
Docs 文件关联中的 ID 对应关系不能直接套用于 sheetlineage。处理 Relationships 时,需要结合实体的 domain 和 type 判断 id 的含义。
如何找到对应的 sheet
- 从 Relationship 的
entities中找到domain为autodesk-construction-sheet、type为sheetlineage的实体,取出其id。 - 通过 Data Connector API 提交数据提取请求,将
serviceGroups设置为["sheets"],并限定目标项目。 - 等待后台提取任务完成后,下载结果,找到
sheets表对应的数据文件。提交请求时收到的响应不是图纸数据。Data Connector 提取流程 - 在同一账户、同一项目内,查找
history_id等于该实体 ID 的记录,取出记录的id。 - 如果匹配到多条记录,先保留全部结果,再按业务需求选择当前版本或指定的 version set。
示例中的匹配条件为:
sheets.history_id = "2b95ba7a-3df5-4e99-a693-9c7cc15ee8c0"
查询示例
如果已将导出的 sheets 数据导入数据库,且表名为 sheets,可以使用参数化 SQL 查询:
SELECT
id AS sheet_id,
history_id,
name,
title,
version_set_id,
is_current,
deleted
FROM sheets
WHERE bim360_account_id = :account_id
AND bim360_project_id = :project_id
AND history_id = :sheetlineage_id;
将 :sheetlineage_id 绑定为示例中的 UUID,并按所用数据库驱动调整参数占位符语法。
拿到 sheet_id 后,就可以与 Sheets API 列表中的 results[].id 对应。核对历史版本时,可以这样请求:
curl --get \
"https://developer.api.autodesk.com/construction/sheets/v1/projects/${PROJECT_ID}/sheets" \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
--data-urlencode "currentOnly=false" \
--data-urlencode "collectionId=*" \
--data-urlencode "limit=100"
该请求只返回一页结果,需要沿响应中的 pagination.nextUrl 继续请求,直到没有下一页。currentOnly=false 用于包含历史版本,collectionId=* 用于覆盖所有 collections。GET sheets 参数说明
注意事项
- Sheets API 当前公开的响应结构未列出图纸历史标识字段。如果实际响应中也没有该字段,仅遍历
sheet.id无法完成映射。 - 同一个
history_id可能匹配多个图纸版本。查询当前图纸时,检查is_current;追溯历史时,结合version_set_id选择记录,不要直接取第一条。 - Sheets API 默认只返回当前、未删除的图纸。未指定
collectionId时,只返回未分组 collection 的结果。核对已删除图纸时,需要另用isDeleted=true查询。GET sheets 筛选规则 - Data Connector 的结果是提取时的数据快照。如果找不到记录,先检查项目范围、提取时间和任务是否成功,再判断是否存在数据缺失。
备注:内容仅供参考。
