AWS 流程事件开发参考指南

FORM_TOOLBAR_BUILD

表单工具栏构建

说明
抽象类 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;
    }

}

Button动作在Server端实现

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();
        }
    }
}

Form提交类按钮在前端用法

注意:选择该方式时,注意调整好对话框的宽度和高度

对话框提供了确定取消两个标准按钮,默认为隐藏状态,可以通过代码控制

//需要在上述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;//可用于阻止对话框关闭
}

Ajax类按钮用在前端用法

//在表单上实现如下JavaScript函数,多个按钮可以共用一个函数,由buttonName的参数进行区分
function btclickSuccess(buttonName, response){
    if (buttonName == "按钮名称") {
        $.simpleAlert(response.msg,response.result);//可以给出一个消息提醒
    }
    //该方法中,也可以处理服务器端响应的错误信息,取决于服务器端代码处理的方式
}
//服务器处理错误时,可能会调用,
function btclickFailure(buttonName, response){
    if (buttonName == "按钮名称") {
        $.simpleAlert(response.msg,response.result);//可以给出一个消息提醒
    }
}


Seven
 010-62962343-690
 liujx@actionsoft.com.cn
感谢您对该文档的关注!如果您对当前页面内容有疑问或好的建议,请与我联系。如果您需要解答相关技术问题请登录AWS客户成功社区