单据列表,根据中文字段拼音排序原创
金蝶云社区-技术支持与赋能部_ZH
技术支持与赋能部_ZH
1人赞赏了该文章 443次浏览 未经作者许可,禁止转载编辑于2023年09月20日 17:25:28

关键词:列表,拼音,排序

一、需求

单据列表中文字段要求以拼音排序,标准产品列表中文字段是跟数据库字段排序确定的。而不同的数据库,排序机制又不一样。这样就给我们项目中就需要自行二开实现汉字拼音排序的这个需求。

数据库汉字排序机制

https://blog.csdn.net/Senssic/article/details/38557521

二、思路与方案

2.1分析思路

可以添加拼音字段,作为排序的辅助字段


2.2实现方案

1、单据添加需要排序的中文辅助字段,列表中不需要展示该拼音字段。

2、列表添加排序按钮,通过页面缓存将参数传递到setFilter事件中,判断是升序还是降序。

三、实现过程

1、单据中添加汉字的排序拼音字段

image.png

2、列表中添加排序按钮(donothing)

image.png

3、添加列表插件,重写itemclick,setFilter事件

@Override
public void itemClick(ItemClickEvent evt) {
    super.itemClick(evt);
    String itemKey = evt.getItemKey();

    if(itemKey.equals("lago_baritemap")){//升序按钮监听

        this.getPageCache().put("order","order");//通过页面缓存传参,升序
        this.getView().invokeOperation("refresh");//执行列表刷新,否则页面不会调用setfilter事件

    }
    if(itemKey.equals("lago_baritemap1")){//降序按钮监听

        this.getPageCache().put("order","desc");//通过页面缓存传参,降序
        this.getView().invokeOperation("refresh");

    }

}

@Override
public void setFilter(SetFilterEvent e) {
    super.setFilter(e);
//从缓存中取排序参数
    String order = this.getPageCache().get("order");
    //根据参数判定执行拼音字段排序
    if(order!=null&&order.equals("order")){
    
        e.setOrderBy("lago_textfield1 asc");

    }
    if(order!=null&&order.equals("desc")){
        e.setOrderBy("lago_textfield1 desc");

    }

}


四、效果图

列表中,拼音字段可以不展示,展示出来只是为了演示效果~

image.png

五、开发环境版本

V5.0.011

六、注意事项

如果拼音字段手动录入比较麻烦,可以写插件实现汉字转拼音,或者写定时任务,将历史数据字段统一转一遍拼音字段即可


汉字转拼音方案,可以参考下面方案,也可以自行查找,这个应用已经比较广泛了。

https://blog.51cto.com/u_16213461/7002730

https://blog.csdn.net/weixin_50518271/article/details/117449995


七、参考资料

开发平台

学习成长中心

八、源代码




源码.zip(5.37KB)

图标赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!