defineApplication 调用。 它声明:
- 应用的身份 — 通用标识符、显示名称、描述。
- 权限 — 其逻辑函数和前端组件在何种角色下运行。
- 变量(可选)— 以环境变量形式暴露给代码的键值对。
- 安装前/安装后/卸载函数(可选)— 参见 逻辑函数。
src/application-config.ts
universalIdentifier字段是你拥有的确定性 ID。 只需生成一次,并在多次同步过程中保持稳定不变。applicationVariables会变成你的函数和前端组件可用的环境变量。 在逻辑函数(服务端)中,可以通过process.env.VARIABLE_NAME使用它们。 在前端组件中,使用twenty-sdk/front-component中的getApplicationVariable('VARIABLE_NAME')。 标记为isSecret: true的变量只会注入到逻辑函数中。 前端组件只会接收非机密变量。- 默认角色会根据使用
defineApplicationRole()标记的角色文件自动检测——你不需要在defineApplication()中引用它。 - 在构建清单时会自动检测安装前、安装后和卸载函数——无需在
defineApplication()中引用它们。 - 显式传递
defaultRoleUniversalIdentifier仍然受支持以保持向后兼容性,但已弃用,推荐改用defineApplicationRole()。 serverVariables是实例级的配置和机密信息(例如 API 密钥)。 与applicationVariables不同,它们不会在 manifest 中声明具体值——工作区运维人员会在应用设置中填写这些值,并且它们只有在被设置后才会被注入到逻辑函数中。- 要在应用的 Settings 选项卡中渲染自定义配置界面(替换默认的变量配置部分),请在其独立文件中使用
defineSettingsFrontComponent()声明一个前端组件。 每个应用只允许有一个。 系统管理的部分(自动升级、App URL、连接)将始终保持可见。
变量类型
applicationVariables 和 serverVariables 都接受一个可选的 type(且对于 SELECT / MULTI_SELECT,还可以接受一个 options 列表)。 支持的类型:TEXT(默认)、BOOLEAN、NUMBER、NUMERIC、DATE、DATE_TIME、SELECT、MULTI_SELECT、ARRAY、RAW_JSON、RICH_TEXT。
src/application-config.ts
type 只影响展示和校验——它会在工作区设置界面中选择匹配的输入控件(开关、数字字段、下拉框、日期选择器、JSON 编辑器等)。 并让构建过程校验你的配置(例如,SELECT / MULTI_SELECT 必须声明非空的 options)。 它不会改变该值到达你代码的方式。
值始终以字符串注入——这是环境变量固有的特性(process.env.* 只能是字符串)。 当你的逻辑函数运行时,执行器会在构建 process.env 时按声明的 type 序列化每个值,因此无论该值是如何设置的(清单默认值、设置界面或先前的版本),字符串格式都是一致的:
将该字符串再解析回你所期望的类型:
getApplicationVariable('VARIABLE_NAME') 读取值的前端组件——返回值是字符串;按需进行解析。
默认函数角色
使用defineApplicationRole() 声明的角色控制应用的逻辑函数和前端组件可以访问的内容:
- 作为
TWENTY_APP_ACCESS_TOKEN注入的运行时令牌来源于该角色。 - 类型化 API 客户端将受限于授予该角色的权限。
- 遵循最小权限原则:只声明你的函数所需的权限。
src/roles/default-role.ts 中创建一个入门角色文件。 完整参考请参见 角色与权限。
应用市场元数据
如果你计划发布你的应用,这些可选字段将控制你的应用在应用市场中的展示:logoUrl和screshots被废弃的 logo 和 GalleryImages 的别名。 这些字段不支持外部绝对链接 (http:// 或 https://) 。它们会在构建时被丢弃,并附有警告。 将图像捆绑在你的应用的 “public/” 文件夹中。