主题
hooks.action.ts
hooks.action.ts是后端嵌入式脚本的约定文件名。
hooks.action.ts分系统级别、项目级别、应用级别,常用于监听系统事件、定义程序流脚本或后端表达式函数脚本。在约定的位置存在hooks.action.ts文件时(具体见脚本文件组织),系统就会自动使用它。
ts是typescript文件,一种js的扩展语法,见 https://www.typescriptlang.org/ 最终系统会自动将ts文件编译成java的字节码在jvm中运行。
TIP
什么时候需要export函数?
- 要导出给其它脚本文件调用的函数。
- 由系统定义并在特定情况下调用的函数,比如嵌入脚本中的监听事件函数、数据加工脚本节点函数等。
- 需要通过web请求访问的函数。
- 需要程序流的执行后端脚本节点执行的函数
监听事件
监听事件函数由系统按约定调用。需要在对应层级的 hooks.action.ts 中导出同名函数,函数参数和返回值以 DTS 为准:
- 系统级事件类型:
svr-api/types/syshooks.types.d.ts - 项目级、应用级事件类型:
svr-api/types/apphooks.types.d.ts
系统级事件写在 /sysdata/settings/hooks.action.ts,用于处理服务器启动关闭、登录、权限、单点登录等全局逻辑。
| 事件函数 | 触发时机 |
|---|---|
onBeforeServerStartup | 服务器启动前,系统内部初始化完成但启动状态还未标记为已启动时。 |
onDidServerStartup | 服务器启动完成后。 |
onBeforeServerShutdown | 服务器准备关闭时。 |
onCustomWebAPI | 收到 /api/... 请求,且没有匹配到系统内置 API 时。 |
onFilter | 系统接收到任意 Web 请求时。 |
onDidProjectCreate | 元数据项目创建成功后。 |
onDidProjectDelete | 元数据项目即将删除时。 |
onPersistEvents | 系统日志事件准备写入数据库前。 |
onVerifyLoginPassword | 使用用户名密码登录并校验账号密码时。 |
onVerifyLoginUser | 无密码登录场景下,需要根据用户 ID 获取登录用户时。 |
onEncryptUserPassword | 需要用脚本加密用户明文密码时。 |
onCompareUserPassword | 需要用脚本比较明文密码和数据库记录密码时。 |
onResolveUserGroups | 登录过程中需要动态决定用户所属用户组时。 |
onDidSignin | 用户登录成功后。 |
onAccessTokenSignin | URL 携带 access_token 登录,且系统默认 token 库没有命中时。 |
onCheckPermission | 用户主动查看或操作系统资源,需要进行权限判断时。 |
onSSOCheckAppSupported | 脚本单点登录中,需要判断当前 App 或浏览器是否受支持时。 |
onSSOGetAuthRedirectURL | 脚本单点登录中,需要构造第三方认证授权地址时。 |
onSSOCheckTicket | 第三方授权回调后,需要校验票据并获取用户信息时。 |
onSSOGetLogoutRedirectURL | 本系统注销后,需要构造第三方系统注销地址时。 |
项目级事件写在 {project}/settings/hooks.action.ts,应用级事件写在 {project}/app/{app}/hooks.action.ts。应用内操作调用应用级脚本,项目内操作调用项目级脚本,不会同时调用两级脚本。
| 事件函数 | 触发时机 |
|---|---|
onPrepareImportData | 导入模型数据时,系统读取一批导入数据并即将执行导入前。 |
onInitImportDataResultField | 导入模型数据前,系统初始化导入结果文件字段时。 |
程序流脚本
hooks.action.ts 中可以定义 action_ 开头的函数,供程序流的执行后端脚本节点调用。函数参数、返回值和节点配置方式见后端程序流脚本节点。
自定义表达式函数
需要把服务端脚本逻辑接入表达式时,见后端表达式函数脚本。
