获取、设置、删除
从twenty-sdk/logic-function 导入 kv。 值可以是任何可序列化为 JSON 的负载。
src/logic-functions/sync-linear-issues.ts
范围
每个条目都有一个作用域,在每次调用时作为选项传入。 默认值为WORKSPACE。
WORKSPACE(默认)— 条目对当前工作区中安装的应用是私有的。 每个安装该应用的工作区都会获得自己独立的一组键。 这正是缓存、游标和按工作区存储状态时所需要的。SERVER— 条目在服务器上应用的每一次安装之间共享。 服务器条目的行为类似声明(claim):存储的值始终是声明该键的 workspaceId(在set时省略value即可为当前工作区声明该键),并且只有该工作区可以覆盖或删除它。 任何一次安装都可以读取该条目。
kv.set 会抛出异常。
使用示例:缓存一次昂贵的调用
一个典型用例是缓存一次缓慢或受限于速率的第三方响应,这样重复的运行就可以重复使用该响应,而不必每次都付出相同的开销。src/logic-functions/getExchangeRate.logic-function.ts
模式与技巧
- 命名空间划分。 给键添加前缀,以区分不同的用途——
sync-cursor:linear、cache:exchange-rate:USD:EUR、lock:nightly-report。 - 过期时间(TTL)。 该存储本身不带有过期机制。 在值中存储时间戳(如缓存示例中所示)并在读取时检查,或者通过定时任务触发的函数清理陈旧的键。
- 存什么。 任何可序列化为 JSON 的值——数字、字符串、数组、对象。 保持条目足够小;此存储用于协调和缓存,而不是用于存放大型二进制对象或文件。 对于文件,请使用
FILES字段和uploadFile。 - 可见性。 条目存在于实例数据库中,而不是作为工作区记录存在——它们不会出现在工作区 UI 中,不属于你应用的数据模型,也不需要角色或对象权限。
可选方案:可查询的存储对象
内置存储是刻意设计为不透明的:条目不是记录,因此你无法在 UI 中浏览它们、将它们与其他对象关联,或通过记录查询对它们进行筛选。 当你需要这些能力时——比如可见的同步日志或逐条记录的状态——请定义一个小型的技术对象,其中包含唯一的key 字段和一个 RAW_JSON 类型的 value 字段,并通过类型化 API 客户端对其进行查询。 defineObject 的参考请参见 Objects,关于强制键唯一性请参见 Data → Unique indexes。
- 将作用域限定到记录。 从存储对象到目标对象添加一个关系,而不是把 id 编码进键中。
- 可见性与权限。 这些行像任何其他记录一样存放在工作区数据库中,因此可以通过 API 查询,并遵循你的应用角色设置。 要将存储从主 UI 中隐藏,只需不要把它加入到你的导航菜单中。
与内置存储不同,自定义对象始终作用于单个工作区——它无法像
SERVER 键那样在安装之间共享条目。