Skip to content

脚本引擎 ​

平台有两套脚本运行时:前端脚本在浏览器执行,后端脚本在 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;经接口再用 HttpServiceDatabaseService / TimeSeriesDatabaseService 等
code_type(控件脚本)01

简记:要改界面、弹窗、跳转 → 前端;要可信校验、落库、对外 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),命令才执行;否则会按路由/模版类型跳转。

相关文档 ​

白泽 ProCode 开发者文档