title: E9流程表单前端接口API created: 2026-04-18 updated: 2026-04-18 type: reference tags: [weaver]
E9流程表单前端接口API
来源:泛微官方文档 https://e-cloudstore.com/doc.html?appId=98cb7a20fae34aa3a7e3a3381dd8764e
1. 说明
1.1 简介
- 所有接口统一封装在全局对象
window.WfForm中 - 部分接口存在使用范围,最低kb版本以及是否移动端/PC端独有。没有特殊注明情况下通用
- 表单字段相关操作,不推荐使用jQuery,禁止原生JS直接操作DOM结构!
- 推荐使用API接口操作,由产品统一运维;同时使用API才能完整的兼容移动终端
1.2 移动端兼容
WfForm对象下接口,兼容新版移动端EM7。由于API接口在PC端与移动端已经统一,EM7表单在移动终端不再引入 custompage4emoble 列,直接引入 custompage 列(与PC模板一致)。
前端区分终端:
后端区分终端:
1.3 前端代码开发方式
- 方式1:模板上代码块,针对单个节点,在显示/打印/移动模板单独配置
- 方式2:【路径管理】→ 打开具体路径 → 【基础设置】→ 【自定义页面】,针对此路径下所有节点所有模板生效
- 方式3:【路径管理】→ 【应用设置】→ 【流程表单自定义页面设置】,针对系统所有非模板模式的场景
⚠️ 特别注意:方式二、方式三禁止引入 init_wev8.js。
1.4 PC端打开表单的方式
新建请求:
查看请求:
求:**window.open("/workflow/request/ViewRequestForwardSPA.jsp?requestid=5963690");
```### 1.5 移动端打开表单的方式
```javascript
// 新建链接
var createUrl = "/spa/workflow/static4mobileform/index.html#/req?iscreate=1&workflowid=748";
// 查看链接
var viewUrl = "/spa/workflow/static4mobileform/index.html#/req?requestid=4503066";
第一种方式(推荐): openLink.openWorkflow(url, callbackFun, returnUrl)
| 参数 | 类型 | 说明 |
|---|---|---|
| url | String | 打开表单的链接 |
| callbackFun | Function | 仅限EM客户端,返回时的回调函数 |
| returnUrl | String | 非EM客户端,返回/提交后到指定链接 |
第二种方式: 仅限于EM客户端,使用EM-SDK弹webview。
第三种方式(不推荐): window.open 或 window.location.href 跳转。
2. 注册自定义事件
户端,使用EM-SDK弹webview。
第三种方式(不推荐): window.open 或 window.location.href 跳转。
2. 注册自定义事件### 2.1 注册拦截事件(执行前触发,可阻断/放行)
支持多次注册,按注册顺序执行;支持异步ajax。
动作类型:
| 动作类型 | 说明 | 最低版本 |
|---|---|---|
WfForm.OPER_SAVE |
保存 | |
WfForm.OPER_SUBMIT |
提交/批准/提交需反馈/不需反馈等 | |
WfForm.OPER_SUBMITCONFIRM |
提交至确认页面 | |
WfForm.OPER_REJECT |
退回 | |
WfForm.OPER_REMARK |
批注提交 | |
WfForm.OPER_INTERVENE |
干预 | |
WfForm.OPER_FORWARD |
转发 | |
WfForm.OPER_TAKEBACK |
强制收回 | |
WfForm.OPER_DELETE |
删除 | |
WfForm.OPER_ADDROW |
添加明细行,需拼明细表序号 | |
WfForm.OPER_DELROW |
删除明细行,需拼明细表序号 | |
WfForm.OPER_PRINTPREVIEW |
打印预览 | KB900190501 |
WfForm.OPER_EDITDETAILROW |
移动端-编辑明细 | KB900191101 |
WfForm.OPER_BEFOREVERIFY |
校验必填前触发事件 | KB900191201 |
WfForm.OPER_TURNHANDLE |
转办 | KB900201101 |
WfForm.OPER_ASKOPINION |
意见征询 | KB900201101 |
WfForm.OPER_TAKFROWARD |
征询转办 | KB900201101 |
WfForm.OPER_TURNREAD |
传阅 | KB900201101 |
WfForm.OPER_FORCEOVER |
强制归档 | KB900201101 |
WfForm.OPER_BEFORECLICKBTN |
点右键按钮前 | KB900201101 |
WfForm.OPER_SAVECOMPLETE |
保存后页面跳转前 | KB900210501 |
WfForm.OPER_WITHDRAW |
撤回 | KB900201101 |
WfForm.OPER_CLOSE |
页面关闭 | KB900201101 |
接口: registerCheckEvent:function(type, fun)
类型:
| 类型 | 说明 | 最低版本 |
|---|---|---|
WfForm.ACTION_ADDROW |
添加明细行 | KB900190407 |
WfForm.ACTION_DELROW |
删除明细行 | KB900190407 |
WfForm.ACTION_EDITDETAILROW |
移动端-编辑明细行 | KB900190501 |
WfForm.ACTION_SWITCHDETAILPAGING |
切换明细分页 | KB900191201 |
WfForm.ACTION_SWITCHTABLAYOUT |
切换模板布局标签页 | KB900191201 |
接口: registerAction: function(actionname, fn)
WfForm.registerAction(WfForm.ACTION_ADDROW+"1", function(index){
alert("添加行下标是"+index); // 下标从1开始
});
WfForm.registerAction(WfForm.ACTION_DELROW+"2", function(arg){
alert("删除行下标集合是"+arg.join(","));
});
3. 字段基础操作接口(不适用附件、位置字段类型)
3.1 将字段名称转换成字段id
灵活运用此方法,可实现多表单、多环境,代码块通用。
convertFieldNameToId: function(fieldname, symbol, prefix)
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| fieldname | String | 是 | 字段名称 |
| symbol | String | 否 | 表单标示,main/detail_1,默认main |
| prefix | Boolean | 否 | 是否需要field前缀,默认true |
var fieldid = WfForm.convertFieldNameToId("zs");
var fieldid = WfForm.convertFieldNameToId("zs_mx", "detail_1");
var fieldid = WfForm.convertFieldNameToId("zs_mx", "detail_1", false);
getFieldValue: function(fieldMark)
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| fieldMark | String | 是 | 格式 field${字段ID}_${明细行号} |
// 获取文本字段或浏览按钮主键值
var fieldvalue1 = WfForm.getFieldValue("field110");
// 获取浏览按钮specialobj
var fieldvalue2 = mobx.toJS(wfform.getFieldValueObj("field110").specialobj);
3.3 修改单个字段值(不支持附件类型)
changeFieldValue: function(fieldMark, valueInfo)
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| fieldMark | String | 是 | 格式 field${字段ID}_${明细行号} |
| valueInfo | JSON | 是 | {value:"修改的值"};浏览按钮需specialobj数组 |
// 修改文本框
WfForm.changeFieldValue("field123", {value:"1.234"});
// 修改浏览框(必须有specialobj)
WfForm.changeFieldValue("field11_2", {
value: "2,3",
specialobj:[
{id:"2",name:"张三"},
{id:"3",name:"李四"}
]
});
// 修改check框(0不勾选、1勾选)
WfForm.changeFieldValue("field123", {value:"1"});
// 只读单行文本,显示值与入库值不一致
WfForm.changeFieldValue("field123", {
value: "入库真实值",
specialobj: { showhtml: "界面显示值" }
});
⚠️ 特别注意: - 后台字段如果设置的是只读属性,changeFieldValue修改的值在非创建时刻禁止入库,属于篡改数据 - 需设置为可编辑属性,前台显示只读效果,同时设置禁止手工编辑 - 不适用于附件字段类型
- 后台字段如果设置的是只读属性,changeFieldValue修改的值在非创建时刻禁止入库,属于篡改数据
- 需设置为可编辑属性,前台显示只读效果,同时设置禁止手工编辑
- 不适用于附件字段类型### 3.4 改变单个字段显示属性
changeFieldAttr: function(fieldMark, viewAttr)
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| fieldMark | String | 是 | 格式 field${字段ID}_${明细行号} |
| viewAttr | int | 是 | 1=只读,2=可编辑,3=必填,4=隐藏字段标签及内容,5=隐藏字段所在行 |
3.5 同时修改字段的值及显示属性
changeSingleField: function(fieldMark, valueInfo, variableInfo)
3.6 批量修改字段值或显示属性
changeMoreField: function(changeDatas, changeVariable)
WfForm.changeMoreField({
field110:{value:"修改后的值"},
field111:{value:"2,3",specialobj:[{id:"2",name:"张三"},{id:"3",name:"李四"}]},
},{
field110:{viewAttr:2},
field111:{viewAttr:3},
});
3.7 触发指定字段涉及的所有联动(归档调用无效)
triggerFieldAllLinkage: function(fieldMark)
包括字段联动、SQL联动、日期时间计算、字段赋值、公式、行列规则、显示属性联动、选择框联动等。
3.8 根据字段ID获取字段信息
getFieldInfo: function(fieldid)
返回JSON包含:htmltype(大类型)、detailtype(小类型)、fieldname(数据库名称)、fieldlabel(显示名)、viewattr(1只读/2可编辑/3必填)
3.9 获取字段当前的只读/必填属性
getFieldCurViewAttr: function(fieldMark)
实时获取,包含显示属性联动、代码接口变更、已办、明细已有字段不可修改等变更情况。
4. 表单字段事件绑定、自定义渲染
`javascript WfForm.getFieldCurViewAttr("field110_2"); // 1只读、2可编辑、3必填
---
## 4. 表单字段事件绑定、自定义渲染### 4.1 表单字段值变化触发事件
`bindFieldChangeEvent: function(fieldMarkStr, funobj)`
| 参数 | 类型 | 必须 | 说明 |
|------|------|------|------|
| fieldMarkStr | String | 是 | 可多个逗号分隔,如 `field110,field111_2` |
| funobj | Function | 是 | 参数:obj(DOM对象)、id(字段标示)、value(修改后的值) |
```javascript
WfForm.bindFieldChangeEvent("field27555,field27556", function(obj,id,value){
console.log("WfForm.bindFieldChangeEvent--",obj,id,value);
});
⚠️ 特别注意: 事件内改变本字段的值,需要 setTimeout 延时。
4.2 明细字段值变化触发事件
bindDetailFieldChangeEvent: function(fieldMarkStr, funobj)
参数:id(字段标示)、rowIndex(行标示)、value(修改后的值)
4.3 字段区域绑定动作事件
| 类型 | 说明 |
|---|---|
| onblur | 失去焦点(仅单行文本) |
| onfocus | 获取焦点(仅单行文本) |
| onclick | 单击(字段所在单元格区域) |
| ondbclick | 双击 |
| mouseover | 鼠标移入 |
| mouseout | 鼠标移出 |
4.4 自定义代理渲染单行文本框字段(KB900190407+)
proxyFieldComp: function(fieldMark, el, range)
仅对varchar类型字段生效。
4.5 自定义追加渲染表单字段(KB900190407+)
afterFieldComp: function(fieldMark, el, range)
在标准字段展现内容基础上追加渲染自定义组件。
4.6 函数式自定义渲染表单字段(KB900190701+)
proxyFieldContentComp: function(fieldid, fn)
支持全部字段类型,优先级高于4.4、4.5。
4.7 根据字段标识获取字段组件(KB900190701+)
generateFieldContentComp: function(fieldMark)
获取字段组件,可单独提取放在任意地方渲染。
5. 明细表操作相关接口
0701+)
generateFieldContentComp: function(fieldMark)
获取字段组件,可单独提取放在任意地方渲染。
5. 明细表操作相关接口### 5.1 添加明细行并设置初始值
addDetailRow: function(detailMark, initAddRowData={})
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| detailMark | String | 是 | 明细1=detail_1,以此递增 |
| initAddRowData | JSON | 否 | 初始值 {field110:{value:"11"}} |
5.2 删除明细表指定行/全部行
delDetailRow: function(detailMark, rowIndexMark)
rowIndexMark: "all"=全部行,"1,2,3"=部分行
5.3 选中明细指定行/全部行
checkDetailRow: function(detailMark, rowIndexMark, needClearBeforeChecked)
5.4 获取明细行所有行标示
getDetailAllRowIndexStr: function(detailMark)
var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");
for(var i=0; i<rowArr.length; i++){
var rowIndex = rowArr[i];
if(rowIndex !== ""){
var fieldMark = "field111_"+rowIndex;
}
}
5.5-5.14 其他明细接口
| 接口 | 说明 | 最低版本 |
|---|---|---|
| getDetailCheckedRowIndexStr | 获取选中行下标 | KB900190501 |
| controlDetailRowDisableCheck | 控制check框禁用勾选 | |
| controlDetailRowDisplay | 控制明细行显示/隐藏 | |
| getDetailRowKey | 获取已有行数据库主键 | |
| getDetailRowCount | 获取明细总行数 | |
| 添加/删除行前阻断 | 见接口2.1 | KB900190501 |
| 添加/删除行后触发 | 见接口2.2 | |
| setDetailAddUseCopy | 添加明细时复制最后一行 | |
| getDetailRowSerailNum | 获取明细行序号 | KB900190601 |
6. 常用全局接口(与字段无关)
6.1 获取当前打开请求的基础信息
getBaseInfo: function()
返回:{f_weaver_belongto_userid, formid, nodeid, requestid, workflowid}
getGlobalStore: function()
获取当前操作人员、节点名称等。 longto_userid, formid, nodeid, requestid, workflowid}
getGlobalStore: function()
获取当前操作人员、节点名称等。### 6.2 可控制显示时间的message信息
showMessage: function(msg, type, duration)
| 参数 | 类型 | 说明 |
|---|---|---|
| msg | String | 提示信息 |
| type | int | 1警告/2错误/3成功/4一般,默认1 |
| duration | Float | 消失时间(秒),默认1.5秒 |
6.3 系统样式的Confirm确认框
showConfirm: function(content, okEvent, cancelEvent, otherInfo={})
otherInfo可自定义:title、okText、cancelText。
6.4 表单顶部按钮、右键菜单置灰
controlBtnDisabled: function(isDisabled)
6.5 调用右键按钮事件
doRightBtnEvent: function(type)
常用type:BTN_SUBMIT、BTN_WFSAVE、BTN_REJECTNAME、BTN_FORWARD等。
6.6 刷新表单页面
reloadPage: function(params={})
6.7 移动端打开链接方式
window.showHoverWindow(url, baseRoute)
6.8 扩展提交操作发送给服务端的参数(KB900190801+)
appendSubmitParam: function(obj={})
推荐以 cus_ 开头。
6.9 获取校验必填逻辑第一个未必填字段(KB900191201+)
getFirstRequiredEmptyField: function()
6.10 触发一次必填验证(KB900191201+)
verifyFormRequired: function(mustAddDetail=true, fieldRequired=true)
7. 不同字段类型特定接口
| 接口 | 说明 | 限定条件 |
|---|---|---|
| appendBrowserDataUrlParam | 扩展浏览按钮取数参数 | 非日期浏览按钮 |
| getBrowserShowName | 获取浏览按钮显示值 | 非日期浏览按钮 |
| removeSelectOption | 移除选择框选项 | 选择框类型 |
| controlSelectOption | 控制选择框选项 | 选择框类型 |
| getSelectShowName | 获取选择框显示值 | 选择框类型 |
| setTextFieldEmptyShowContent | 文本字段空值提示 | 单行文本/整数/浮点数/千分位/多行文本 |
| overrideBrowserProp | 复写浏览按钮props | 浏览按钮类型 |
| controlDateRange | 控制日期可选范围 | 日期类型,KB900190501+ |
| controlRadioPrintText | Radio打印仅显示选中文字 | 单选框,KB900190501+ |
| 控制日期可选范围 | 日期类型,KB900190501+ | | controlRadioPrintText | Radio打印仅显示选中文字 | 单选框,KB900190501+ |
---## 8. 签字意见接口(KB900190501+)
| 接口 | 说明 |
|---|---|
| getSignRemark() | 获取签字意见内容 |
| setSignRemark(text, isClear, isAfter, callback) | 设置签字意见内容 |
| appendSignEditorBottomBar(comps) | 扩展签字意见底部按钮 |
9. 历史E8代码块兼容(不推荐)
| 接口 | 替代方案 |
|---|---|
| checkCustomize | 使用2.1拦截提交事件 |
| bindPropertyChange | 使用4.1监听字段变化 |
| _customAddFun | 使用2.2钩子事件 |
| _customDelFun | 使用2.2钩子事件 |
| window._writeBackData | 使用WfForm.changeFieldValue |
⚠️ 禁止JS原生操作(如 document.getElementById("field111").value)。
10. 常用配置文件修改方式
10.1 修改意见默认字体
/api/workflow/index/updateWfConfig?name=signinput_default_fontfamily&value=仿宋_GB2312/FangSong_GB2312
10.2 修改意见默认字体大小
10.3 流程自定义浏览框缓存开关
10.4 非多行文本html字段支持html格式
需执行SQL更新 workflow_config 表,然后重启resin。
10.5 PC端-流程表单显示底部耗时信息(KB900190801+)
10.6 明细首行固定不跟随滚动(KB900191101+)
10.7 明细字段合计赋零值或空值
10.8 pc端-手写签批按钮开关(KB900191001+)
写签批按钮开关(KB900191001+)/api/workflow/index/updateWfConfig?name=handwrittensign_switch&value=1
```### 10.9 移动端-选择框显示成radio效果(KB900191101+)
### 10.10 移动端-表单正文、附件签批功能开关(KB900190308+)
修改 `MobileWFOfficeSign.properties`:`mobileWFOffice=1`
---
## 11. 常用CSS样式案例
### 11.1 明细添加删除按钮靠左
```css
.detailButtonDiv{float:left}