项 | 说明 |
---|---|
抽象类 | FormToolbarBuilderListener |
接口 | ValueListenerInterface |
返回值 | List<ButtonModel> |
异常 | -如抛出异常时,异常被包装成结果返回,后继执行被中断 |
项 | 说明 |
---|---|
抽象类 | ValueListener |
接口 | ValueListenerInterface |
返回值 | String |
异常 | -如抛出异常时,异常被包装成结果返回,后继执行被中断 |
1.用户打开任务表单时
项 | 说明 |
---|---|
名称 | 按钮名称 |
执行动作 | 按钮执行的动作,支持JavaScript和Java两种。Java时为实现com.actionsoft.bpms.bpmn.engine.listener.ValueListener的抽象类 |
执行前回调 | 一个固定函数名的JavaScript脚本函数,点击该按钮时执行btclickBefore(buttonName) buttonName 当前点击的按钮名称 |
执行前先保存表单 | 点击按钮之前是否保存表单 |
交互风格 | 确定该按钮的提交方式,可选方式:Form提交 ,Ajax |
提交目标 | 该选项在交互风格 选择Form提交 时可用,可选项:_blank ,_self ,_parent |
颜色 | 按钮颜色 |
显示位置 | 可选项:显示在菜单中 ,显示在工具栏 |
窗口外观 | 该选项在交互风格 选择Form提交 时可用,可设置标题,宽度,高度 |
执行后回调 | 该选项在交互风格 选择Ajax 时可用分别提供成功的回调函数和失败的回调函数btclickSuccess(buttonName,response) buttonName 当前点击的按钮名称response 服务器响应结果btclickFailure(buttonName,response) buttonName 当前点击的按钮名称response 服务器响应结果 |
关联任务状态 | 设置在不同任务状态时,扩展按钮是否显示 |
Ajax事件事件回调函数:btclickSuccess/btclickFailure参数说明
参数名 | 说明 |
---|---|
buttonName | 用户点击的按钮名称 |
response | 服务器响应结果,一个Json结构,参考下面的Ajax事件函数Json说明 |
Ajax事件事件回调函数:response的JSON结构说明
{
"msg": "一个服务器端放入的消息",
"id": ":responseobject;",//系统自动生成
"result": "ok"//系统根据服务器端代码ResponseObject的类型生成,可能是ok、error
}
public class TestFormToolbarBuild extends FormToolbarBuilderListener {
public String getDescription() {
return "表单扩展按钮工具栏构建事件测试";
}
public String getProvider() {
return "Actionsoft";
}
public String getVersion() {
return "1.0";
}
/**
* 对扩展按钮的程序处理
*
* @param ctx 流程引擎提供给监听器的上下文对象
* @param initButs 默认的扩展按钮列表
* @return 处理过的按钮列表
*/
@Override
public List<ButtonModel> buttonFactory(ProcessExecutionContext ctx, List<ButtonModel> buttonModels) {
//根据需求处理buttonModels,如增加访问权限,是否显示等...
System.out.println("表单扩展按钮工具栏构建事件测试----" + buttonModels);
return buttonModels;
}
}
Form提交方式
package com.actionsoft.apps.poc.form.event;
import java.util.HashMap;
import java.util.Map;
import com.actionsoft.apps.AppsConst;
import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
import com.actionsoft.bpms.bpmn.engine.listener.ValueListener;
import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate;
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
import com.actionsoft.bpms.server.UserContext;
public class MyBtnActionImpl extends ValueListener {
@Override
public String execute(ProcessExecutionContext ctx) throws Exception {
//参数获取
//注意:除特殊说明外,下列参数仅在该事件中场景有效
//记录ID
String boId = ctx.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BOID);
//表单ID
String formId = ctx.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_FORMID);
//BO表名
String boName = ctx.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BONAME);
// Form提交
Map<String, Object> result = new HashMap<String, Object>();
UserContext me = ctx.getUserContext();
result.put("sid", me.getSessionId());
result.put("userId", ctx.getUserContext().getUID());
String processInstId = ctx.getProcessInstance().getId();
return HtmlPageTemplate.merge(AppsConst.SYS_APP_PORTAL, "my.htm", result);
}
}
Ajax方式
package com.actionsoft.apps.poc.form.event;
import java.util.HashMap;
import java.util.Map;
import com.actionsoft.apps.AppsConst;
import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
import com.actionsoft.bpms.bpmn.engine.listener.ValueListener;
import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate;
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
import com.actionsoft.bpms.server.UserContext;
public class MyBtnActionImpl extends ValueListener {
@Override
public String execute(ProcessExecutionContext ctx) throws Exception {
//参数获取
//记录ID
String boId = ctx.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BOID);
//表单ID
String formId = ctx.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_FORMID);
//BO表名
String boName = ctx.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BONAME);
// Ajax方式
ResponseObject ro = ResponseObject.newOkResponse();
boolean r = true;// 针对业务进行处理
// 处理业务逻辑成功时
if (r) {
ro.msg("成功");// 返回给服务器的消息
ro.put("key1", "value1").put("key2", "value2");// 放入前端需要的参数
return ro.toString();
} else {
// 错误时
ro = ResponseObject.newErrResponse();
ro.msg("错误");
return ro.toString();
}
}
}
注意:选择该方式时,注意调整好对话框的宽度和高度
对话框提供了
确定
和取消
两个标准按钮,默认为隐藏状态,可以通过代码控制
//需要在上述Server端提到的my.htm中,处理以下函数
//页面初始化时候执行
jQuery(document).ready(function() {
//如果需要对话框显示“确定”按钮,调用如下代码
parent.$("#BTN_Extend_Action").show();
//默认按钮名称“确定”
parent.$("#BTN_Extend_Action").html("保存");//可通过此方式修改
//如果需要对话框显示“取消”按钮,调用如下代码
parent.$("#BTN_Extend_Close").show();
//默认按钮名称“取消”
parent.$("#BTN_Extend_Close").html("关闭");//可通过此方式修改
});
//实现ok函数,用于处理页面中的业务数据的保存操作,同时,对话框会显示确定按钮,如果没有此类操作,可忽略
function ok() {
//处理自己的业务逻辑
//可以调用如下代码,关闭对话框
parent.AWSFormMainUtil.closeBtnExtendDialog();
}
//关闭对话框时的业务处理,如果存在了该函数,对话框会显示取消按钮
function cancel() {
//...
parent.AWSFormMainUtil.closeBtnExtendDialog();
}
//该函数在对话框关闭前调用,如果返回false,则可以阻止对话框的关闭,如果有需要则实现
function btnWinClose(buttonName) {
//return false;//可用于阻止对话框关闭
}
//在表单上实现如下JavaScript函数,多个按钮可以共用一个函数,由buttonName的参数进行区分
function btclickSuccess(buttonName, response){
if (buttonName == "按钮名称") {
$.simpleAlert(response.msg,response.result);//可以给出一个消息提醒
}
//该方法中,也可以处理服务器端响应的错误信息,取决于服务器端代码处理的方式
}
//服务器处理错误时,可能会调用,
function btclickFailure(buttonName, response){
if (buttonName == "按钮名称") {
$.simpleAlert(response.msg,response.result);//可以给出一个消息提醒
}
}