跳转至

title: E9流程表单前端接口API source: https://e-cloudstore.com/doc.html?appId=98cb7a20fae34aa3a7e3a3381dd8764e


E9流程表单前端接口API

1. 说明

1.1 简介

所有接口统一封装在全局对象 window.WfForm 中。 部分接口存在使用范围,最低kb版本以及是否移动端/PC端独有。没有特殊注明情况下通用。 表单字段相关操作,不推荐使用jQuery,禁止原生JS直接操作DOM结构! 大家开发过程中,推荐都使用API接口操作,由产品统一运维;同时使用API才能完整的兼容移动终端。

1.2 移动端兼容

WfForm 对象下接口,兼容新版移动端 EM7。 由于API接口在PC端与移动端已经统一,为减少开发工作量以及后期维护成本;故EM7表单在移动终端不再引入 workflow_basecustompage4emoble 列作为自定义页面,直接引入 custompage 列(与PC模板一致)作为自定义页面。

前端(JS方法)区分终端: 可通过方法 WfForm.isMobile() 判断是否移动端。

var isMobile = WfForm.isMobile(); // true表示是eMobile、微信、钉钉等移动终端,false代表PC端

后端请求(自定义页面等)区分终端:

boolean isMobile = "true".equals(request.getParameter("_ec_ismobile")); // true表示是eMobile、微信、钉钉等移动终端,false代表PC端

1.3 前端代码开发方式

  • 方式1:模板上代码块,针对单个节点,在显示/打印/移动模板单独配置。
  • 方式2:【路径管理】-打开具体路径-【基础设置】-【自定义页面】,针对此路径下所有节点所有模板生效。
  • 方式3:【路径管理】-【应用设置】-【流程表单自定义页面设置】,针对系统所有非模板模式的场景(PC及移动)。注意此页面为全局custompage,应避免写ready、checkCustomize等全局函数,只定义些函数体。

特别注意:方式二、方式三禁止引入 init_wev8.js。 如遇配置不生效,请先将代码块/custompage仅写alert确认是否生效,再逐步排查错误原因。

1.4 PC端打开表单的方式

  • 新建请求:传参路径id,会自动计算活动版本的路径id
    window.open("/workflow/request/CreateRequestForward.jsp?workflowid=747");
    
  • 查看请求:传参请求id,用户需本身具备此请求查看权限,主次账号需带入账号信息
    window.open("/workflow/request/ViewRequestForwardSPA.jsp?requestid=5963690");
    
    账号信息
    window.open("/workflow/request/ViewRequestForwardSPA.jsp?requestid=5963690");
    ```### 1.5 移动端打开表单的方式
    移动端表单链接:
    ```javascript
    // 新建链接,传参路径id
    var createUrl = "/spa/workflow/static4mobileform/index.html#/req?iscreate=1&workflowid=748";
    // 查看链接,传参请求id
    var viewUrl = "/spa/workflow/static4mobileform/index.html#/req?requestid=4503066";
    

第一种方式(推荐):调用封装好的方法 如果是通过移动端脚手架打包的模块,可以直接调用。如果是自行开发的界面,需要引入 /spa/coms/openLink.js。 最低支持版本:KB900190601

openLink.openWorkflow(url, callbackFun, returnUrl)
- url: 打开表单的链接 - callbackFun: 仅限EM客户端,返回时的回调函数 - returnUrl: 非EM客户端,返回/提交后到指定链接

第二种方式:仅限于EM客户端,打开表单并可控制表单返回/提交后事件回调 使用EM-SDK,弹webview方式实现。

window.em.openLink({ url: viewUrl, openType: 2 });
window.em.ready(function(){
    window.em.registerBroadcast({
      name: "_closeWfFormCallBack",
      action: function (argument) { alert("E-mobile打开表单链接,返回或提交后触发此回调函数"); }
    });
});

2. 注册自定义事件

ction: function (argument) { alert("E-mobile打开表单链接,返回或提交后触发此回调函数"); } }); });

## 2. 注册自定义事件### 2.1 注册拦截事件,指定动作执行前触发,并可阻断/放行后续操作
支持多次注册,按注册顺序依次执行;支持异步ajax,避免请求卡住。
场景1:表单提交、保存、退回、转发、强制收回等操作执行前,执行自定义逻辑并阻断/放行后续操作。
场景2:明细添加行、删除行前,执行自定义逻辑并阻断/允许后续操作。

**接口名称及参数说明**
```javascript
registerCheckEvent:function(type,fun)
- type: 动作类型(详见上表),多个逗号分隔 - fun: 自定义函数,此函数入参为callback,执行自定义逻辑完成或异步ajax的success函数体内,放行需调用callback,不调用代表阻断后续操作

样例

jQuery().ready(function(){
    WfForm.registerCheckEvent(WfForm.OPER_SAVE, function(callback){
        jQuery("#field27495").val("保存自动赋值");
        callback();    // 继续提交需调用callback,不调用代表阻断
    });
    WfForm.registerCheckEvent(WfForm.OPER_SAVE+","+WfForm.OPER_SUBMIT,function(callback){
        // ... 执行自定义逻辑
        callback();
    });
    WfForm.registerCheckEvent(WfForm.OPER_ADDROW+"1", function(callback){
        alert("添加明细1前执行逻辑,明细1则是OPER_ADDROW+1,依次类推")
        callback();    // 允许继续添加行调用callback,不调用代表阻断添加
    });
});

2.2 注册钩子事件,指定动作完成后触发

支持多次调用注册,按注册的先后顺序依次执行。

registerAction: function(actionname, fn)
样例
WfForm.registerAction(WfForm.ACTION_ADDROW+"1", function(index){
    alert("添加行下标是"+index);
});     // 下标从1开始,明细1添加行触发事件,注册函数入参为新添加行下标

3. 字段基础操作接口

on(index){ alert("添加行下标是"+index); }); // 下标从1开始,明细1添加行触发事件,注册函数入参为新添加行下标

## 3. 字段基础操作接口### 3.1 将字段名称转换成字段id
灵活运用此方法,可实现多表单、多环境,代码块通用;解耦代码块中指定fieldid。
```javascript
convertFieldNameToId: function(fieldname,symbol,prefix)
样例
var fieldid = WfForm.convertFieldNameToId("zs");
var fieldid = WfForm.convertFieldNameToId("zs_mx", "detail_1");
var fieldid = WfForm.convertFieldNameToId("zs_mx", "detail_1", false);

3.2 获取单个字段值

getFieldValue: function(fieldMark)
样例
var fieldvalue1 = WfForm.getFieldValue("field110");
var fieldvalue2 = mobx.toJS(wfform.getFieldValueObj("field110").specialobj);

3.3 修改单个字段值(不支持附件类型)

此方法修改的字段如果涉及到触发联动、单元格格式化等,修改完值会自动触发联动/格式化。

changeFieldValue: function(fieldMark, valueInfo)
样例
WfForm.changeFieldValue("field123", {value:"1.234"});
WfForm.changeFieldValue("field11_2", {
    value: "2,3",
    specialobj:[
        {id:"2",name:"张三"},
        {id:"3",name:"李四"}
    ]
});     

3.4 改变单个字段显示属性(只读/必填等)

changeFieldAttr: function(fieldMark, viewAttr)
- viewAttr: 1:只读,2:可编辑,3:必填,4:隐藏字段标签及内容,5:隐藏字段所在行

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

changeSingleField: function(fieldMark, valueInfo, variableInfo)

3.6 批量修改字段值或显示属性

changeMoreField: function(changeDatas, changeVariable)

3.7 触发指定字段涉及的所有联动(归档调用无效)

triggerFieldAllLinkage:function(fieldMark)
场景:触发子流程默认不执行字段联动,可在创建节点代码块触发,实现打开时刻执行字段联动。 avascript triggerFieldAllLinkage:function(fieldMark)
场景:触发子流程默认不执行字段联动,可在创建节点代码块触发,实现打开时刻执行字段联动。### 3.8 根据字段ID获取字段信息
```javascript
getFieldInfo:function(fieldid)
返回值包含 htmltype, detailtype, fieldname, fieldlabel, viewattr 等。

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

getFieldCurViewAttr:function(fieldMark)
此方法为实时获取字段显示属性,包含显示属性联动、代码接口变更、已办、明细已有字段不可修改等可能的变更情况。

4. 表单字段事件绑定、自定义渲染

4.1 表单字段值变化触发事件

bindFieldChangeEvent: function(fieldMarkStr,funobj)
特别注意: 如果字段绑定事件,事件内改变本字段的值,需要 setTimeout 延时下。

4.2 明细字段值变化触发事件

bindDetailFieldChangeEvent: function(fieldMarkStr,funobj)

4.3 字段区域绑定动作事件

推荐使用值变化事件实现开发。

bindFieldAction: function(type, fieldids, fn)
类型包括 onblur, onfocus, onclick, ondbclick, mouseover, mouseout

4.4 自定义代理渲染单行文本框字段

proxyFieldComp: function(fieldMark, el, range)
最低版本要求:KB900190407。仅对单行文本框字段类型生效。

4.5 自定义追加渲染表单字段

afterFieldComp: function(fieldMark, el, range)

4.6 函数式自定义渲染表单字段

proxyFieldContentComp: function(fieldid,fn)
最低版本要求:KB900190701。以函数返回值方式自定义渲染表单字段,支持全部的字段类型。

4.7 根据字段标识获取字段组件

generateFieldContentComp:function(fieldMark)
最低版本要求:KB900190701。

5. 明细表操作相关接口

5.1 添加明细行并设置初始值

addDetailRow: function(detailMark, initAddRowData={})

5.2 删除明细表指定行/全部行

delDetailRow: function(detailMark, rowIndexMark)

5.3 选中明细指定行/全部行

checkDetailRow: function(detailMark, rowIndexMark,needClearBeforeChecked)
细指定行/全部行
checkDetailRow: function(detailMark, rowIndexMark,needClearBeforeChecked)
```### 5.4 获取明细行所有行标示
```javascript
getDetailAllRowIndexStr function(detailMark)

5.5 获取明细选中行下标

getDetailCheckedRowIndexStr function(detailMark)

5.6 控制明细行check框是否禁用勾选

controlDetailRowDisableCheck: function(detailMark, rowIndexMark, disableCheck)

5.7 控制明细数据行的显示及隐藏

controlDetailRowDisplay: function(detailMark, rowIndexMark, needHide)

5.8 获取明细已有行的数据库主键

getDetailRowKey: function(fieldMark)

5.9 获取明细总行数

getDetailRowCount function(detailMark)

5.10 添加行、删除行前执行逻辑或阻断事件

采用注册函数机制,详见接口2.1。

5.11 添加行、删除行后触发事件

采用钩子机制,详见接口2.2。

5.12 移动端跳转至明细编辑行页面执行事件

最低版本要求:KB900190501。

5.13 添加明细时默认复制最后一行记录

setDetailAddUseCopy: function(detailMark, needCopy)

5.14 根据明细行标识获取序号(第几行)

getDetailRowSerailNum: function(mark, rowIndex)

6. 常用全局接口

6.1 获取当前打开请求的基础信息

getBaseInfo: function()
返回包含 f_weaver_belongto_userid, formid, nodeid, requestid, workflowid 等。

6.2 可控制显示时间的message信息

showMessage: function(msg, type, duration)

6.3 系统样式的Confirm确认框

showConfirm: function(content, okEvent, cancelEvent, otherInfo={})

6.4 表单顶部按钮、右键菜单置灰

controlBtnDisabled: function(isDisabled)

6.5 调用右键按钮事件

doRightBtnEvent: function(type)
例如 BTN_SUBMIT, BTN_WFSAVE, BTN_REJECTNAME 等。
doRightBtnEvent: function(type)
例如 BTN_SUBMIT, BTN_WFSAVE, BTN_REJECTNAME 等。### 6.6 刷新表单页面
reloadPage: function(params={})

6.7 移动端打开链接方式

window.showHoverWindowfunction(url,baseRoute)

6.8 扩展提交操作发送给服务端的参数

appendSubmitParam: function(obj={})
最低版本要求:KB900190801。

6.9 获取校验必填逻辑第一个未必填的字段

getFirstRequiredEmptyField: function()

6.10 触发一次必填验证

verifyFormRequired: function(mustAddDetail=true, fieldRequired=true)

7. 不同字段类型特定接口

7.1 扩展浏览按钮取数接口参数值

appendBrowserDataUrlParam: function(fieldMark, jsonParam)

7.2 获取浏览按钮的显示值

getBrowserShowName:function(fieldMark,splitChar)

7.3 移除选择框字段选项

removeSelectOption: function(fieldMark, optionKeys)

7.4 控制选择框字段选项

controlSelectOption:function(fieldMark, optionKeys)

7.5 获取选择框字段的显示值

getSelectShowName:function(fieldMark,splitChar)

7.6 文本字段可编辑状态提示信息

setTextFieldEmptyShowContent:function(fieldMark,showContent)

7.7 复写浏览按钮组件的props

overrideBrowserProp: function(fieldMark,jsonParam)

7.8 控制日期浏览按钮的可选日期范围

controlDateRange: function(fieldMark,start,end)

7.9 控制Radio框字段打印是否仅显示选中项文字

controlRadioPrintText: function(fieldid)

8. 签字意见接口

8.1 获取签字意见内容

getSignRemark: function()

8.2 设置签字意见内容

setSignRemark: function(text,isClear=true,isAfter=true,callback)

8.2 设置签字意见内容

setSignRemark: function(text,isClear=true,isAfter=true,callback)
```### 8.3 扩展签字意见输入框底部按钮
```javascript
appendSignEditorBottomBar: function(comps=[])

9. 历史E8代码块的相关兼容

  • 9.1 提交事件执行自定义函数 (建议使用2.1代替)
  • 9.2 字段值变化触发事件bindPropertyChange (建议使用4.1代替)
  • 9.3 明细新增行渲染后触发事件 (建议使用2.2代替)
  • 9.4 明细删除行渲染后触发事件 (建议使用2.2代替)
  • 9.5 修改浏览按钮字段值window._writeBackData (建议使用WfForm.changeFieldValue)
  • 9.6 少用jQuery操作
  • 9.7 禁止JS原生操作

10 常用配置文件修改方式

10.1 修改意见默认字体

/api/workflow/index/updateWfConfig?name=signinput_default_fontfamily&value=仿宋_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: update workflow_config set value=value||',field12345_1' where name='support_html_textarea_field'

10.5 PC端-流程表单显示底部耗时信息开关

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

10.6 明细开启横向滚动条情况下,首行固定

/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端-手写签批按钮开关

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

10.9 移动端-选择框单选框类型显示成radio效果开关

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

10.10 移动端-表单正文、附件签批功能开关

修改 MobileWFOfficeSign.properties

11 常用CSS样式案例分享

11.1 实现明细添加删除按钮靠左显示

.detailButtonDiv{float:left} eWFOfficeSign.properties`。

11 常用CSS样式案例分享

11.1 实现明细添加删除按钮靠左显示

.detailButtonDiv{float:left}### 11.2 实现单元格图片居中、自适应缩放 .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 移动端异构系统提交表单后,如何刷新流程列表

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