Appearance
脚本引擎
平台有两套脚本运行时:前端脚本在浏览器执行,后端脚本在 ProCode Jint 执行。配置落在接口、数据集、定时任务、表单、菜单、列表按钮等宿主字段上;语法与 API 分别见专页。
前端与后端分工
| 项 | 前端脚本 | 后端脚本 |
|---|---|---|
| 运行位置 | Web 浏览器 | ProCode 服务(Jint) |
| 全局对象 | 浏览器 App(含 Body、Components、Router) | 服务端 App(含 Request、Response、Form、Services) |
| 典型用途 | UI 联动、打开表单/组件、刷新列表、调本系统 HTTP | 校验、写库、多表事务、保密逻辑、对外契约 |
| 语法要点 | 可 async/await;常用 return (async () => { ... })(); | 同步为主;推荐 var;须设置 App.Response.Body |
| 查库 | 禁止 DatabaseService;经接口再用 HttpService | DatabaseService / TimeSeriesDatabaseService 等 |
code_type(控件脚本) | 0 | 1 |
简记:要改界面、弹窗、跳转 → 前端;要可信校验、落库、对外 API → 后端。
脚本宿主
| 宿主 | 表 / 字段 | 轨道 | 说明 |
|---|---|---|---|
| 接口引擎 | t_interface.f_context(表单标签「脚本」) | 后端 | HTTP/MCP 执行正文;见 接口引擎 |
| 数据集 | t_data_set.f_context(「脚本」) | 后端 | 返回选项到 App.Response.Body;见 数据集 |
| 定时任务 | t_job.f_context | 后端 | Cron 触发;见 定时任务 |
| 表单表级前端 | t_form 的 front_*_command | 前端 | 初始化、提交前、关闭等 |
| 表单表级后端 | t_form 的 back_*_command | 后端 | 写入前后、删除前后、拉取后等;存脚本正文,不是接口 id |
| 表单控件 | t_form_component 的 front_change_command 等;code + code_type | 前/后 | code_type=0 前端,1 后端 |
| 菜单命令 | t_menu.f_command(「命令」) | 前端 | 菜单 打开方式=命令行 时执行 |
| 列表按钮 | t_template_button.f_command / f_show_command | 前端 | 点击逻辑;show_command 须同步 return 布尔值 |
| 列表列转换 | t_template_column 的 transform_command | 前端 | 单元格展示转换 |
| 工作流节点 | 节点 front_* / back_* | 前/后 | 审批节点钩子;后端见工作流文档 |
页面、组件的 Vue SFC 本身不是「脚本引擎」列表里的 command,但 SFC 内仍可用同一套浏览器 App(取数、打开组件等)。引擎弹层打开写法见 组件引擎。
怎么选宿主
| 需求 | 建议宿主 |
|---|---|
| 对外 HTTP/MCP、多端复用查询写入 | 接口 context |
| 表单下拉动态选项 | 数据集 context |
| 定时批处理 | 定时任务 context |
| 仅某表单提交时校验/级联 | 表单 back_*_command |
| 列表点按钮打开表单/组件、刷新 | 列表按钮 command |
| 侧栏点菜单执行一段前端逻辑(不跳转) | 菜单 command + 打开方式「命令行」 |
常见问题
前端脚本里查不到库表
前端不能用 DatabaseService。先建接口(或数据集),再用 App.Services.HttpService 调用。
表单 back_* 填了接口 id 不生效
back_*_command 存的是后端 JS 正文,不是接口主键。需要复用接口逻辑时,把脚本写在接口上,或在后端脚本里用 HttpService 调自己的接口。
show_command 报错或按钮乱显隐
show_command 必须同步执行并 return true/false,不能使用 await。
后端改了 App.Response.Body 前端看不到
确认调用的是该接口路由;表单钩子里中断用 App.Stop = true,提示放在 App.Response.Body(如 { message: '...' }),不要用不存在的 App.StopMessage。
列表按钮能跑、菜单命令不跑
菜单须把 打开方式 设为「命令行」(4),命令才执行;否则会按路由/模版类型跳转。
