脚本上下文
这页收录的是脚本运行时可直接使用的对象与工具。当前平台脚本主要支持 JavaScript(GraalVM)和 Groovy,两者共享同一套上下文注入机制。
什么时候看这页
- 你在写完整脚本,而不是只写一段
${...}表达式 - 你想确认脚本里怎么拿当前用户、组织、数据模型或日志对象
- 你需要判断某个能力是不是平台已经注入到了脚本环境里
- 你在排查“脚本里为什么拿不到某个对象”
如果你写的是 ${...} 形式的表达式,而不是脚本,请优先看 表达式上下文。
先判断该看这页还是别的页
| 当前问题 | 优先去看哪里 |
|---|---|
| 我在写完整脚本,需要多步逻辑、变量、日志和运行时对象 | 这页 |
我写的是字段默认值、规则表达式或模板里的 ${...} | 表达式上下文 |
我想查 Dates、Converter、Maps 的完整方法 | Java API |
| 我想给脚本环境新增一个全局对象 | 扩展脚本 |
| 我只是想学什么时候该用脚本 | 脚本教程 |
先理解脚本上下文是怎么来的
脚本上下文不是一张固定清单,而是脚本引擎在 AbstractScriptEngine 里把多个 ScriptContextContributor 的 getBindings() 结果聚合后的只读 Map。
这意味着两件事:
- 业务里最常见的对象会比较稳定,例如认证、组织、日志、基础工具类、编码生成器
- 部分对象会跟已启用的能力模块有关,例如配置、通知、调度
还有两点在当前代码里也很明确:
- 同名全局对象会优先覆盖脚本入参中的同名 key
- 脚本拿到的上下文是只读的,不能直接在上下文 map 上做
put/remove
如果你在某个环境里拿不到某个对象,先确认对应能力模块是否已经引入并启用。