【本回复由 AI 根据产品文档自动生成】
你好,关于"前端 JS 调用后台脚本方法"的问题,统一回答如下。
## 一、平台脚本执行机制
myApps/OBPM 平台脚本分两种:
- **前端 JS(浏览器执行)**:表单校验、UI 交互、动态显示
- **后台 Rhino 脚本(服务端执行)**:业务逻辑、数据库操作、流程操作
前端 JS **不能直接调用** Rhino 脚本(两者运行在不同 JVM/浏览器,无法互通)。但可以通过以下几种方式间接调用。
## 二、JS 调用后台脚本的 4 种方式
### 方式 1:通过视图按钮 / 动作触发(最常用)
- 表单中加一个按钮,按钮的动作 = 「执行脚本」
- 点击按钮 → 触发后台动作脚本 → 完成业务逻辑
- 前端 JS 可以通过 `document.getElementById('按钮ID').click()` 模拟点击
### 方式 2:通过 AJAX 接口
平台提供 REST API,前端可以发起 AJAX 请求:
```javascript
// 调用平台 REST API(4.x 路径示例)
var url = "/obpm/ajax/runtime/form/saveField.action";
$.ajax({
url: url,
type: "POST",
data: { application: "xxx", field1: "value1" },
success: function(resp) {
// 处理返回
}
});
```
### 方式 3:通过值变更脚本(隐式触发)
- 给一个隐藏字段写值
- 该字段在「值变更脚本」中写后台 Rhino 逻辑
- 前端 JS 改这个字段值时,自动触发后台脚本
```javascript
// 前端
document.getElementsByName("隐藏字段名")[0].value = "trigger";
// 触发 onchange 事件
```
### 方式 4:自定义 Servlet(高级)
- 在 `WEB-INF/lib` 中开发一个 Servlet,注册到 web.xml
- 通过 `Packages.cn.myapps.external.MyServlet` 在平台脚本中调用
- 适合复杂业务场景
## 三、不推荐的做法
- ❌ 直接在前端 JS 中写 Rhino 脚本(如 `Packages.cn.myapps...`)—— 浏览器无法识别
- ❌ 用 `<% %>` JSP 标签 —— 平台不支持自定义 JSP
- ❌ 把数据库密码、业务逻辑硬编码到前端 JS —— 安全风险
## 四、需要确认的需求
- 你具体想在前端做什么动作?(保存数据 / 调外部接口 / 触发流程 / 计算返回值)
- 是否需要返回值给前端?
- 当前版本是 4.x 还是 5.x?(5.x 推荐使用统一的 OpenAPI 体系)
参考文档:
http://docs.myapps.cn/
http://docs.myapps.cn/quick-start/dev-script/
http://docs.myapps.cn/quick-start/openapi/
把你的具体场景说一下,可以给出更针对性的方案。 |