跳转到主要内容
Twenty 中的每个对象都带有一组你无需自行声明的系统字段。 这些字段在对象初始化时由服务器自动创建: id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector 由于你不会使用 defineField() 来声明这些字段,因此也没有可供你导入的 universalIdentifier 常量。 那么,如何在视图中将 createdAt 作为一列来引用呢?

问题

从 Twenty 2.19 起,系统字段的通用标识符由服务器根据三个输入确定性派生:应用通用标识符、对象通用标识符以及字段名称。 自行构造一个 id 并将其硬编码是行不通的:它在服务器上不会匹配任何内容,同步时会拒绝这个悬空引用:

解决方案

getFieldUniversalIdentifiertwenty-sdk 2.21 版本开始可用。
使用 getFieldUniversalIdentifier 来解析与服务器使用的值完全相同的字段标识符。 它接收这三个输入,并返回字段的通用标识符:
  • applicationUniversalIdentifier 是你的应用标识符,也就是你传递给 defineApplication() 的那个。
  • objectUniversalIdentifier 是该字段所属对象的标识符。
  • name 是系统字段名称,为上面列出的值之一。

示例:视图中的 createdAt 列

典型场景是:为你某个自定义对象的视图添加一列 createdAt。 解析字段 id,并像引用其他 fieldMetadataUniversalIdentifier 一样引用它:
src/views/example-view.ts
同一个解析得到的 id 可在任何需要 fieldMetadataUniversalIdentifier 的地方使用:视图字段、筛选器、排序、分组以及页面布局挂件。
解析 id,而不是将其硬编码。 由于服务器是根据应用 id、对象 id 和字段名来派生该值的,调用 getFieldUniversalIdentifier 能在这些输入发生变化时仍保持引用正确,并在派生逻辑演进时避免偏差。

标准 Twenty 对象

对于标准 Twenty 对象(Person、Company、Opportunity 等),你不需要进行任何派生:系统字段标识符是预先计算好的常量,你可以直接导入。
当对象是由你的应用使用 defineObject() 定义、且不存在此类常量时,再使用 getFieldUniversalIdentifier
name 是一个默认字段,而不是系统字段。 它保留自己的硬编码 通用标识符,而不是通过 getFieldUniversalIdentifier 解析。 在你定义的对象上,请使用你在 defineObject() 中赋予它的标识符来引用 name 字段。