如何通过插件对单据体的数据进行排序原创
金蝶云社区-Man_what_can_isay
Man_what_can_isay
16人赞赏了该文章 5,562次浏览 未经作者许可,禁止转载编辑于2022年08月05日 15:53:08


关键词:

控件 表单设计器控件 单据体

一、需求

单据体在新增行时,是在下方插入,一般是倒序的。

且有些单据体数据是引入的,数据可能是无序的。

或者有些场景需要单据体按照某个字段进行顺序展示。

二、思路与方案


实现方案

 image.png

图1 示例

本案例以时间字段为例,对单据体进行按时间最新在上为标准进行排序。

单据体是没有像列表一样的oderby方法的,所以我们可以通过IEntryOperate接口的moveEntryRowDown等方法使单据体数据在展示时能够按顺序排列

三、实现过程

1.        关键接口方法

this.getModel().moveEntryRowDown(string,int);
this.getModel().moveEntryRowUp (string, int);

2.        代码示例:

@Override
public void afterBindData(EventObject e) {
              // TODO Auto-generated method stub
              super.afterBindData(e);
              String status =this.getView().getFormShowParameter().getStatus().name();
              //判断单据当前状态是否在新增态下,如果是新增,下面的方法会报错
              if (!status.equals("ADDNEW")) {
                    
                     DynamicObjectCollection entry = this.getModel().getEntryEntity("kded_entryentity");
                     //朴实无华的冒泡排序算法,你可以选用性能更好的排序算法
                     for (int i = 0; i < entry.size()-1; i++) {
                            for(int j =0 ;j<entry.size()-1-i;j++)
                            {
                                   Date date = entry.get(j).getDate("kded_datefield");
                                   Date date1 = entry.get(j+1).getDate("kded_datefield");
                                   if (date.before(date1)) {
                                          //单据体行下移
                                          this.getModel().moveEntryRowDown("kded_entryentity", j);
                                   }     
                            }     
                     }
                     this.getView().updateView("kded_entryentity");
              }
             
       }

 

 

 

 image.png


图2 排序前

 

image.png 图3 排序后

五、开发环境版本

COSMICV4.0.014.0

六、注意事项

此方法排序后,如果进行保存或提交操作,数据库里保存的数据顺序也会改变;     

如未进行操作,数据库表的数据依旧是无序的,只是展示的时候会进行排序

七、参考资料

【开发平台】指导手册

学习成长中心


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