AWS 流程事件开发参考指南

PROCESS_FORM_GRID_FILTER

该流程全局的FORM_GRID_FILTER事件

说明
抽象类 FormGridFilterListener
接口 ValueListenerInterface
返回值
异常 -如抛出异常时,异常被包装成结果返回,后继执行被中断

如果该流程某个节点注册了FORM_GRID_FILTER事件,则对该节点来说,该PROCESS_FORM_GRID_FILTER事件失效。

常见触发场景

场景1:刷新有子表的表单时

  • 过滤子表行记录
  • 禁用子表行链接
  • 禁止子表行删除
  • 设置子表行的样式
  • 重新设置子表字段展示数据

开发示例

@Override
public FormGridRowLookAndFeel acceptRowData(ProcessExecutionContext context, List<BOItemModel> boItemList, BO boData) {
    String tableName = context.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BONAME);
    if (tableName.equals("BO_ACT_PUTONGSUB1")) {
        //创建一个对象
        FormGridRowLookAndFeel diyLookAndFeel = new FormGridRowLookAndFeel();
        String s3 = boData.getString("S3");
        String s4 = boData.getString("S4");
        if (s3 != null && s3.equals("50")) {
            diyLookAndFeel.setLink(false);// 设置这行数据不展示链接
            diyLookAndFeel.setRemove(false);// 设置这行数据不允许删除
            diyLookAndFeel.setCellCSS("style='background-color:yellow;font-color: ffffff;font-weight: bold;height: 125px'");
        }
        if (s3 != null && s3.equals("55")) {
            diyLookAndFeel.setDisplay(false);//不显示这条数据
        }
        if (s4 != null && s4.equals("60")) {
            boData.set("S1", "<img src='../commons/img/add1_16.png' border=0>" + s4);// 重新设定一个字段的值
        }
        //特别说明:
        //如果控制字段子表的`编辑`和`明细`链接的文字的显示隐藏
        //可判断字段名是否是`字段子表`UI组件,然后进行赋值
        //赋值规则:`编辑|明细`
        //如果不显示`编辑`,将该部分留空,如果不显示`明细`,将该部分留空
        //如:`|明细`,`编辑|`,`|`
        boData.set("字段子表字段名", "编辑|明细");

        //处理好之后,将该对象返回
        return diyLookAndFeel;
    }
    return null;//返回null按照原始数据展示子表
}

注意

给一个字段设置带有Html标签的值时,目前支持<a></a>标签和<img/>标签,其余标签将显示原样显示
同时,以下UI组件的字段不支持设置Html标签

  • 数值
  • 货币
  • 列表
  • 单选组
  • 复选组
  • 附件
  • HTML排版
  • 按钮
  • 自定义权限
  • 条形/二维码
  • 字段子表(仅支持上述代码中调整文字)
  • 电子印章

场景2:指定子表排序

开发示例

@Override
public String orderByStatement(ProcessExecutionContext context) {
    return "field1 asc,field2 desc";//两种字段组合的排序
    //return "field2 desc";//单个字段排序
}

场景3:自定义子表的表头Html

开发示例

    /**
 * 构造一个普通子表的表头Html片段,格式:<tr><th></th></tr>,支持多级表头,优先级比表单的自定义表头高
 *
 * @param ctx 流程引擎提供给监听器的上下文对象
 * @param formItemModel 子表项模型,可通过该模型获取到子表的BO模型
 * @param displayPolicy 应用显示策略后的可见的字段列表,其中key为字段名
 * @return
 */
@Override
public String getCustomeTableHeaderHtml(ProcessExecutionContext ctx, FormItemModel formItemModel, List<String> displayPolicy);
    StringBuilder html = new StringBuilder();
    BOModel boModel = BOCache.getInstance().getModel(formItemModel.getBoModelId());//获取BO模型
    List<BOItemModel> boItemList = boModel.getBoItems();
    if (displayPolicy != null && displayPolicy.size() > 0) {//判断子表可见字段的内容
        html.append("<tr>");
        //下面一行是序号列
        html.append("<th align='center' width='50' style='max-width:50px;'><I18N#序号></th>").append("\n");
        //下面四行是复选框列,注意,必须要按照以下格式,否则不能选择数据
        String callback = "callback=\"" + Html.toCallJS("AWSCommonGrid.checkCallback", new Object[] { Html.toJSObj("this"), formItemModel.getId() }) + "\"";
        html.append("<th align='center' width='50' style='max-width:50px;'><input type='checkbox' class='awsui-checkbox check-all' id='check-all-").append(formItemModel.getId()).append("'");
        html.append(" ").append(callback);
        html.append(" group='").append(formItemModel.getId()).append("'/></th>").append("\n");
        for (String fieldName : displayPolicy) {//遍历子表的可见字段,最终形成一个Html片段
            BOItemModel itemModel = BOCache.getInstance().getBOItemModelByBOName(boModel.getName(), fieldName);
            html.append("<th>").append(itemModel.getTitle()).append("</th>");
        }
        html.append("</tr>");
    }
    return html.toString();
}

场景4:自定义AJAX子表的表头JSON

重写public String getEditGridHeaderJSON(ProcessExecutionContext ctx, FormItemModel formItemModel, List displayPolicy)方法

该方法返回一个JSONArray结构
参考文档:
http://localhost:8080/portal/commons/awsui-library/index.html#form/grid
注意修改自己的IP地址以及端口

[{
    title: "AWSUI - 报表展示",
    width: 250,
    height: 150,
    align: 'center',
    colModel: [{
        title: "二级栏目1",
        align: 'center',
        colModel: [{
            title: "三级栏目1",
            width: 90,
            align: 'center'
        }, {
            title: "三级栏目2",
            width: 90,
            align: 'center'
        }, {
            title: "三级栏目3",
            width: 90,
            align: 'center'
        }]
    }, {
        title: "二级栏目2",
        align: 'center',
        colModel: [{
            title: "三级栏目1",
            width: 100,
            align: 'center'
        }, {
            title: "三级栏目2",
            width: 100,
            align: 'center'
        }]
    }]
}];

开发示例

    /**
 * 构造一个AJAX子表的表头JSON,格式:
 ['表字段', {
    title: "表头",
    width: 250,
    align: 'center',
    colModel: [{
        title: "二级栏目1",
        align: 'center',
        colModel: [
            表字段1,
            表字段2,
            表字段3
        ]
    }, {
        title: "二级栏目2",
        align: 'center',
        colModel: [
            表字段1,
            表字段2
        ]
    }]
}],
 *
 *
 * @param ctx 流程引擎提供给监听器的上下文对象
 * @param formItemModel 子表项模型,可通过该模型获取到子表的BO模型
 * @param displayPolicy 应用显示策略后的可见的字段列表,其中key为字段名
 * @return
 */
@Override
public String getEditGridHeaderJSON(ProcessExecutionContext ctx, FormItemModel formItemModel, List<String> displayPolicy);
    StringBuilder headJson = new StringBuilder();
    BOModel boModel = BOCache.getInstance().getModel(formItemModel.getBoModelId());//获取BO模型
    List<BOItemModel> boItemList = boModel.getBoItems();
    if (displayPolicy != null && displayPolicy.size() > 0) {//判断子表可见字段的内容
    /*    String headJson = "['ASSESSOBJECT','WEIGHT',
                + "{'title':'第一季度','align':'center','colModel':['CONSTANT11','CONSTANT12','CONSTANT13','CONSTANT14','CONSTANT15']},"+
                  "{'title':'第二季度','align':'center','colModel':['CONSTANT21','CONSTANT22','CONSTANT23']},"+
                  "{'title':'第三季度','align':'center','colModel':['CONSTANT31','CONSTANT32','CONSTANT33']},"+
                  "{'title':'第四季度','align':'center','colModel':['CONSTANT41','CONSTANT42','CONSTANT43']}+
                   ]";*/
        headJson.append("[");
        String season1 = "{'title':'第一季度','align':'center','colModel':[";//表头 title 必填 ,align ,width 选填
        String season2 = "{'title':'第二季度','align':'center','colModel':[";//colModel是字段直接写字段名称
        String season3 = "{'title':'第三季度','align':'center','colModel':[";
        String season4 = "{'title':'第四季度','align':'center','colModel':[";
        for (String fieldName : displayPolicy) {//遍历子表的可见字段,最终形成一个JSON片段
            BOItemModel itemModel = BOCache.getInstance().getBOItemModelByBOName(boModel.getName(), fieldName);
            if(itemModel.getName().equals("ASSESSOBJECT")){
               headJson.append("'").append(itemModel.getName()).append("',");//没有多级表头直接展示字段
            }else if(itemModel.getName().contains("WEIGHT")){
                 headJson.append("'").append(itemModel.getName()).append("',");
            }else if(itemModel.getName().contains("CONSTANT1")){
                season1+="'"+itemModel.getName()+"'"+",";
            }else if(itemModel.getName().contains("CONSTANT2")){
                season2+="'"+itemModel.getName()+"'"+",";
            }else if(itemModel.getName().contains("CONSTANT3")){
                season3+="'"+itemModel.getName()+"'"+",";
            }else if(itemModel.getName().contains("CONSTANT4")){
                season4+="'"+itemModel.getName()+"'"+",";
            }
        }
        season1 = season1.substring(0,season1.length()-1)+"]},";
        season2 = season2.substring(0,season2.length()-1)+"]},";
        season3 = season3.substring(0,season3.length()-1)+"]},";
        season4 = season4.substring(0,season4.length()-1)+"]}";
        headJson.append(season1).append(season2).append(season3).append(season4).append("]");
    }
    return headJson.toString();
}


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