WeaTable API

简介:WeaTable 为前台表格信息实体类,其中存储了展示表格所需要的各种标签信息,信息以全局变量作为映射,并提供了拼组html语句,获取返回信息的公共方法,本文将会讲解WeaTable的运行原理、内部参数、方法、关联类及其常见的问题

@Author : Jaylan Zhou

@RefTitleAuthor : Andy Zhang

@Date : 2019.11

@Version 1.0

引用类

内部参数

字段名 数据类型 描述
pageUID String 用户定制相关id,其值为pageID+user.getUID();
pageID String 页面id(其默认值为多少不清楚)
tableType WeaTableType(枚举类) WeaTableType结构体枚举类,其有五种类型的值:CHECKBOX 多选
RADIO 单选
NONE 无
THUMBNAIL 缩略图显示
OFFICALDOC 文档模版
pagesize String 每页大小获取pagesize的方法:
此值可通过PageIdConst.getPageSize(pageId,userId)或其重载方法PageIdConst.getPageSize(pageId,userId,mould)方法进行获取
此值的获取原理为,根据传入的pageId和userId查询用户设置的默认分页值,若查询不到,则进行以下操作:
1.若传入了mould,根据mould判断其是否为文档列表或表单建模列表,并查询分页信息
2.若未传入mould,或第一步操作查询不到,则赋予默认值10
instanceid String 实体id(暂不知如何使用)
datasource String 需要获取数据的数据源(用于非数据库查询分页的数据源)应为java类的全路径限制+方法名如:weaver.docs.docs.DocDataSource.getNoReadLog方法getNoReadLog传递的参数为4个:User user,Map<String,String> sourceparams,HttpServletRequest request,HttpServletResponse response
sourceparams String 配合datasource使用,用于传递数据源必要的参数,以+分隔多参数,以:分隔key和value。如:id:79+userid:1+usertype:0,方法中使用:params.get("id") params.get("userid") params.get("usertype")获取值
pageBySelf String 配合datasource使用,用于控制是否由开发人员来控制分页,默认由系统组件分页。设置为true时由开发人员控制分页处理。
此值为String类型的"true","false"
backfields String 字段名:从数据库中返回的字段名称
示例:SELECT id,name FROM table1 那么此值应为"id,name"
sqlform String from后面至where前面的子句
示例:SELECT ... FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t2.t1id = t1.id,那么此值为"table1 AS t1 LEFT JOIN table2 AS t2 ON t2.t1id = t1.id"
sqlwhere String where后面至group by前面的子句
示例:SELECT ... WHERE id = '1',那么此值为"id = '1'"
sqlorderby String order by 子句
示例:SELECT ... ORDER BY id,name,那么此值为"id,name"
sqlprimarykey String 此表中的主键,若此表主键为id,则此值为"id"
sqlsortway String 表格的排序方式(不清楚如何具体使用)
sqlisdistinct String 是否去重,此值为String类型的"true","false"
poolname String 数据源名称(如何具体使用)
sqlgroupby String group by后面至order by前面的子句
示例:SELECT ... GROUP BY id,name,那么此值为"id,name"
rowstylefield String 行样式
openPrimaryKeyOrder WeaBoolAttr(枚举类) 是否打开主键排序
此值为WeaBoolAttr.TRUE,WeaBoolAttr.FALSE
mergeOrder WeaBoolAttr(枚举类) (?)
此值为WeaBoolAttr.TRUE,WeaBoolAttr.FALSE
fastpage String 是否启快速排序
此值为String类型的"true","false"
sumColumns String 多列做和,必须与col列中的列名一致,有多个需要统计的列的话以,分隔
若要合计money1,money2,money3的值,则此值应为"money1,money2,money3"
该属性用于报表支持
sumValues String 将合计数据直接送入 逗号分隔
decimalFormat String 格式化参数逗号分隔 (String.format的风格)
columns List<WeaTableColumn> 列属性
此值为列信息类WeaTableColumn的集合
operates WeaTableOperates 操作菜单相关 operate的权限控制
checkboxpopedom WeaTableCheckboxpopedom 主要用于checkbox 权限控制
countColumnsDbType String 千分位合计处理字段 字段名逗号分隔(具体如何使用?)
mobileshowtype WeaMobileShowType(枚举类) 移动端属性判断组件类型,此类有两个值:
ListView
Table
mobileshowtemplate String 移动端模版属性,此值为SplitMobileTemplateBean类序列化后的Base64加密值
调用createMobileTemplate(SplitMobileTemplateBean bean)公共方法后,此值将自动注入

构造方法

WeaTable 除了第一种无参的构造方法外,其他构造方法均是将形参传入全局变量,形同set方法,因此方法体不再赘述

    /**
     * 构造方法1
     * 方法作用:实例化化columns,operates,checkboxpopedom,checkboxList 四个全局变量
     */
    public WeaTable() {
        columns=new ArrayList<WeaTableColumn>();
        operates=new WeaTableOperates();
        checkboxpopedom=new WeaTableCheckboxpopedom();
        checkboxList=new ArrayList<WeaTableCheckboxpopedom>();
    }

    /**
     * 构造方法2
     * 方法作用:将形式参数传入全局变量,等同于set方法
     */
    public WeaTable(String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, List<WeaTableColumn> cols)
    
    /**
     * 构造方法3
     * 方法作用:将形式参数传入全局变量,等同于set方法 
     */
    public WeaTable(String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, String sqlsortway, List<WeaTableColumn> cols)

    /**
     * 构造方法4
     * 方法作用:将形式参数传入全局变量,等同于set方法
     */
    public WeaTable(String pageUID, WeaTableType tableType, String pagesize, String instanceid, String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey,
            String sqlsortway, List<WeaTableColumn> cols)
    
    /**
     * 构造方法5
     * 方法作用:将形式参数传入全局变量,等同于set方法
     */
    public WeaTable(String pageUID, WeaTableType tableType, String pagesize, String instanceid, String backfields, String sqlform, String sqlwhere, String sqlorderby,String sqlgroupby, String sqlprimarykey,String sqlsortway, List<WeaTableColumn> cols)


    /**
     * 构造方法6
     * 方法作用:将形式参数传入全局变量,等同于set方法
     */
    public WeaTable(String pageUID, String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, String sqlsortway, List<WeaTableColumn> cols)
    
    /**
     * 构造方法7
     * 方法作用:将形式参数传入全局变量,等同于set方法
     */
    public WeaTable(String pageUID, WeaTableType tableType, String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, String sqlsortway, List<WeaTableColumn> cols)

公共方法

WeaTable 共有三个公共方法

    /**
     * 创建移动端模板属性
     * 传入参数:SplitMobileTemplateBean
     * 方法作用:将SplitMobileTemplateBean类进行序列化,并将序列化后的值进行Base64加密,存入全局变量mobileshowtemplate中
     */
public void createMobileTemplate(SplitMobileTemplateBean bean) 
  
  /**
     * 将WeaTable的参数拼组成前端对应的分页html语句并作为字符串返回
     * 返回值:拼组后的分页html字符串
     * 方法作用:根据WeaTable内部存储的全局变量值拼组成前端对应的分页html语句并作为字符串返回
     */
  
public String getTableString()
  
   /**
     * 将创建后的html语句存入缓存
     * 返回值:结果Map
     * 方法作用:此方法在调用getTableString()后执行,获取到拼组后的html字符串,并生成一个UUID作为sessionkey,将二者存入缓存,并返回一个Map,其中存储了返回类型字段和sessionkey
     */
  
public Map<String,Object> makeDataResult()

调用原理

WeaTable 其实是一个分页信息实体类,底层会根据其全局变量中存储的参数值,拼接对应的分页html,并存入缓存,其执行过程大致如下:

  • 1.实例化一个WeaTable实体类
  • 2.按照业务需求,用set方法或构造方法给WeaTable中的全局变量赋值
  • 3.赋值完成后,调用其makeDataResult()方法,获取到其返回的Map
  • 4.新建WeaResultMsg实体类,调用其putAll()方法,将第3步返回的Map存入
  • 5.调用WeaResultMsg的success()方法
  • 6.调用WeaResultMsg的getResultMap()方法,获取其返回的Map<String,Object>

WeaTable 拼组后的html语句,并不存在于Map中,而是存在于Ecology底层内置的缓存Ehcache中,Map中存储了WeaTable的返回类型,及html语句所对应的sessionkey,key为系统自动生成,为一个UUID

在系统设置了Redis的情况下,Redis中也会存储返回的语句

调用示例

  • 1.demo 示例

    /*
     * @Author      :wyl
     * @Date        :2019/4/9  17:25
     * @Version 1.0 :
     * @Description :
     **/
    public class WeaTableDemoCmd extends AbstractCommonCommand<Map<String,Object>> {
    
        public WeaTableDemoCmd(User user, Map<String,Object> params) {
            this.user = user;
            this.params = params;
        }
    
    
        @Override
        public BizLogContext getLogContext() {
            return null;
        }
    
        @Override
        public Map<String, Object> execute(CommandContext commandContext) {
            Map<String, Object> apidatas = new HashMap<String, Object>();
            //角色判断参考代码
    //        if(!HrmUserVarify.checkUserRight("LogView:View", user)){
    //            apidatas.put("hasRight", false);
    //            return apidatas;
    //        }
    
            if (null == user){
                apidatas.put("hasRight", false);
                return apidatas;
            }
    
            try {
                //返回消息结构体
                WeaResultMsg result = new WeaResultMsg(false);
    
                String pageID = "17ecc14c-9d64-4a43-81a4-7b7c6f792857";
                String pageUid = pageID + "_" + user.getUID();
                String pageSize = PageIdConst.getPageSize(pageID, user.getUID());
                String sqlwhere = " 1=1 ";
    
                //新建一个weatable
                WeaTable table = new WeaTable();
                table.setPageUID(pageUid);
                table.setPageID(pageID);
                table.setPagesize(pageSize);
    
                String fileds = " w.id,w.requestname,w.state,w.creatertime,w.creater,w.type,h.lastname ";
                table.setBackfields(fileds);
    
                //搜索条件,这里可以放高级搜索的的条件
                String requestname =  Util.null2String(params.get("requestname"));
                if (StringUtils.isNotBlank(requestname)) {
                    sqlwhere += " and w.requestname like '%" + requestname + "%' ";
                }
    
                //创建人
                String creater =  Util.null2String(params.get("creater"));
                if (StringUtils.isNotBlank(creater)) {
                    sqlwhere += " and w.creater in '(" + creater + ")' ";
                }
    
                //状态
                String state =  Util.null2String(params.get("state"));
                if (StringUtils.isNotBlank(state) && !StringUtils.equals("0",state)) {
                    sqlwhere += " and w.state = '" + state + "' ";
                }
    
                //类型
                String type =  Util.null2String(params.get("type"));
                if (StringUtils.isNotBlank(type) && !StringUtils.equals("0",type)) {
                    sqlwhere += " and w.type = '" + type + "' ";
                }
    
                String creatertime =  Util.null2String(params.get("creatertime"));
                if(StringUtils.isNotBlank(creatertime)){
    
                }
    
    
                //创建时间 startDate endDate
    //            String startDate = Util.null2String(params.get("startDate"));
    //            String endDate = Util.null2String(params.get("endDate"));
    //            if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
    //                sqlwhere += " and creatertime>='" + startDate + "' and creatertime<='" + endDate + "' ";
    //            }
    
    
    
                table.setSqlform(" ECOLOGY_PC_DEMO_WORKFOLW w LEFT JOIN HrmResource h on w.creater = h.id ");
                table.setSqlwhere(sqlwhere);
                table.setSqlorderby("id");
                table.setSqlprimarykey("id");
                table.setSqlisdistinct("false");
    
                table.getColumns().add(new WeaTableColumn("id").setDisplay(WeaBoolAttr.FALSE));   //设置为不显示
                table.getColumns().add(new WeaTableColumn("20%", "请求标题", "requestname","requestname"));
                table.getColumns().add(new WeaTableColumn("20%", "创建人", "lastname","lastname"));
                table.getColumns().add(new WeaTableColumn("20%", "状态", "state","state","com.engine.demo.demo05.cmd.WeaTableTransMethod.testTransMethod"));
                table.getColumns().add(new WeaTableColumn("20%", "类型", "type","type","com.engine.demo.demo05.cmd.WeaTableTransMethod.getType"));
                table.getColumns().add(new WeaTableColumn("20%", "创建日期", "creatertime","creatertime"));
    
    
                //设置左侧check默认不存在
                table.setCheckboxList(null);
                table.setCheckboxpopedom(null);
    
                result.putAll(table.makeDataResult());
                result.put("hasRight", true);
                result.success();
                apidatas = result.getResultMap();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return apidatas;
        }
    }
    

用户 Q&A

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352