跳转至

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模板一致)。

前端区分终端:

var isMobile = WfForm.isMobile(); // true=eMobile/微信/钉钉等,false=PC端

后端区分终端:

boolean isMobile = "true".equals(request.getParameter("_ec_ismobile"));

1.3 前端代码开发方式

  • 方式1:模板上代码块,针对单个节点,在显示/打印/移动模板单独配置
  • 方式2:【路径管理】→ 打开具体路径 → 【基础设置】→ 【自定义页面】,针对此路径下所有节点所有模板生效
  • 方式3:【路径管理】→ 【应用设置】→ 【流程表单自定义页面设置】,针对系统所有非模板模式的场景

⚠️ 特别注意:方式二、方式三禁止引入 init_wev8.js

1.4 PC端打开表单的方式

新建请求:

window.open("/workflow/request/CreateRequestForward.jsp?workflowid=747");

查看请求:

window.open("/workflow/request/ViewRequestForwardSPA.jsp?requestid=5963690");
求:**
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客户端,返回/提交后到指定链接
window.openLink.openWorkflow(createUrl, function(){
    alert("E-mobile打开表单链接,返回或提交后触发此回调函数");
});

第二种方式: 仅限于EM客户端,使用EM-SDK弹webview。

第三种方式(不推荐): window.openwindow.location.href 跳转。


2. 注册自定义事件

户端,使用EM-SDK弹webview。

第三种方式(不推荐): window.openwindow.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)

参数 类型 必须 说明
type String 动作类型,多个逗号分隔
fun Function 自定义函数,入参为callback,放行需调用callback,不调用代表阻断
type String 动作类型,多个逗号分隔
fun Function 自定义函数,入参为callback,放行需调用callback,不调用代表阻断
jQuery().ready(function(){
    WfForm.registerCheckEvent(WfForm.OPER_SAVE, function(callback){
        jQuery("#field27495").val("保存自动赋值");
        callback(); // 继续提交需调用callback,不调用代表阻断
    });

    WfForm.registerCheckEvent(WfForm.OPER_ADDROW+"1", function(callback){
        alert("添加明细1前执行逻辑");
        callback(); // 允许继续添加行
    });

    WfForm.registerCheckEvent(WfForm.OPER_DELROW+"2", function(callback){
        alert("删除明细2前执行逻辑");
        callback();
    });
});
PER_DELROW+"2", function(callback){
alert("删除明细2前执行逻辑");
callback();
});
});
```### 2.2 注册钩子事件(完成后触发)

类型:

类型 说明 最低版本
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);
oId("zs_mx", "detail_1"); var fieldid = WfForm.convertFieldNameToId("zs_mx", "detail_1", false); ```### 3.2 获取单个字段值

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=隐藏字段所在行
WfForm.changeFieldAttr("field110", 1); // 只读
WfForm.changeFieldAttr("field110", 4); // 隐藏(只支持主表字段)

3.5 同时修改字段的值及显示属性

changeSingleField: function(fieldMark, valueInfo, variableInfo)

WfForm.changeSingleField("field110", {value:"修改的值"}, {viewAttr:"1"});

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联动、日期时间计算、字段赋值、公式、行列规则、显示属性联动、选择框联动等。

jQuery(document).ready(function(){
    WfForm.triggerFieldAllLinkage("field110");
});

3.8 根据字段ID获取字段信息

getFieldInfo: function(fieldid)

返回JSON包含:htmltype(大类型)、detailtype(小类型)、fieldname(数据库名称)、fieldlabel(显示名)、viewattr(1只读/2可编辑/3必填)

WfForm.getFieldInfo("111");

3.9 获取字段当前的只读/必填属性

getFieldCurViewAttr: function(fieldMark)

实时获取,包含显示属性联动、代码接口变更、已办、明细已有字段不可修改等变更情况。

WfForm.getFieldCurViewAttr("field110_2"); // 1只读、2可编辑、3必填

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"}}
WfForm.addDetailRow("detail_2", {field111:{value:"初始值"}});

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 修改意见默认字体大小

/api/workflow/index/updateWfConfig?name=signinput_default_fontsize&value=36/36px

10.3 流程自定义浏览框缓存开关

/api/workflow/index/updateWfConfig?name=un_use_customize_browser_cache&value=0

10.4 非多行文本html字段支持html格式

需执行SQL更新 workflow_config 表,然后重启resin。

10.5 PC端-流程表单显示底部耗时信息(KB900190801+)

/api/workflow/index/updateWfConfig?name=show_duration_log&value=1

10.6 明细首行固定不跟随滚动(KB900191101+)

/api/workflow/index/updateWfConfig?name=detail_locked_button_row&value=1

10.7 明细字段合计赋零值或空值

/api/workflow/index/updateWfConfig?name=colRule_noRow_empty&value=1

10.8 pc端-手写签批按钮开关(KB900191001+)

/api/workflow/index/updateWfConfig?name=handwrittensign_switch&value=1
写签批按钮开关(KB900191001+)
/api/workflow/index/updateWfConfig?name=handwrittensign_switch&value=1
```### 10.9 移动端-选择框显示成radio效果(KB900191101+)
/api/workflow/index/updateWfConfig?name=mobile_show_radio&value=1
### 10.10 移动端-表单正文、附件签批功能开关(KB900190308+)
修改 `MobileWFOfficeSign.properties`:`mobileWFOffice=1`

---

## 11. 常用CSS样式案例

### 11.1 明细添加删除按钮靠左
```css
.detailButtonDiv{float:left}

11.2 单元格图片居中、自适应缩放(KB900190901+)

.imageCell_swap{background-position:center}
.imageCell_swap{background-size:100% 100%}

11.3 控制浏览按钮链接颜色

.browserColorCell a{color:red !important}

11.4 控制主表选择框字段最小宽度

.selectCell .wea-select{min-width:50px !important}

12. 其它场景分享

12.1 移动端异构系统提交表单后刷新流程列表(KB900191101+)

window.location.href = 当前ecology服务器地址 + "/workflow/workflow/WfRefreshList.jsp";