单据开发-业务单据List界面代码篇(GUI端)
金蝶云社区-黒白
黒白
8人赞赏了该文章 737次浏览 未经作者许可,禁止转载编辑于2022年03月18日 08:41:17

注公众号获取更多金蝶EAS开发方面的内容

公众号.jpg

因论坛版权要求,部分图片无法显示,可以直接方位微信公众号链接

 https://mp.weixin.qq.com/s/lrbsxsux3Y98lbjmtd7Bqw

本篇文档介绍业务单据List界面的开发

和基础资料相同不需要写任何代码就可以实现增删改查

主要介绍List界面一些常用的代码




01


CU数据隔离

    /**     * list是否需要CU隔离,     */    
    protected boolean isIgnoreCUFilter() {
        return false;  
     }


02


Edit界面打开方式

    /**     * 设置edit界面打开方式为 newTab     */    
    protected String getEditUIModal() {
        return UIFactoryName.NEWTAB;  
    }


03


初始化按钮控制状态


    /**     * 初始化按钮状态     */    
    protected void initWorkButton() {
          super.initWorkButton();      
          btnAudit.setEnabled(true); //按钮可用      
          btnUnAudit.setEnabled(true); //按钮可用      //会集成父类很多无用的按钮,可以在这里通过setVisible 设置不可见    
          }


04


页面加载


     /**     * 页面加载     */    
     public void onLoad() throws Exception {
           super.onLoad();      //可以设置按钮的状态      //设置金额格式      
           String numberFormat = "%r-[=]{#,##0.00}n";    
           this.tblMain.getColumn("creditAmount").getStyleAttributes().setNumberFormat(numberFormat);    
      }



05




向EDIT界面传递参数


    /**     * 通过ctx传递参数     */    
    protected void prepareUIContext(UIContext uiContext, ActionEvent e) {
          super.prepareUIContext(uiContext, e);      
          uiContext.put("paramKey", "paramVal"); // 新增时 向EDIT 界面传递参数,如果需要可以使用    
    }


06


数据修改前验证


    /**     * 修改按钮aciton     */    
    public void actionEdit_actionPerformed(ActionEvent e) throws Exception {
          //需要在 点击按钮前验证,故验证方法写在 supper之前      
          checkSelected(); //操作前检查是否选中行,父类方法 直接调用      
          String id = getSelectedKeyValue(); //获取选中行的ID,父类方法直接调用      
          ReWorkFlowUtil.isBillInWorkflow(id);//判断单据是否在流程中心,框架工具栏直接调用      
          ExpenseBillInfo info = ExpenseBillFactory.getRemoteInstance().getExpenseBillInfo(new ObjectUuidPK(id));
          if(info.getBillState().equals(billStateEnum.AUDITING)          
          ||info.getBillState().equals(billStateEnum.AUDIT)){        
          MsgBox.showWarning(this, "单据处于审批中/已审批状态,不能修改");        
              SysUtil.abort();//结束进程      
          }      
          super.actionEdit_actionPerformed(e);    
          }


07




数据删除前验证


     /**     * 删除按钮aciton     */    
     public void actionRemove_actionPerformed(ActionEvent e) throws Exception {
           //需要在 点击按钮前验证,故验证方法写在 supper之前      
           checkSelected(); //操作前检查是否选中行,父类方法 直接调用      
           String id = getSelectedKeyValue(); //获取选中行的ID,父类方法直接调用      
           ReWorkFlowUtil.isBillInWorkflow(id);//判断单据是否在流程中心,框架工具栏直接调用      
           ExpenseBillInfo info = ExpenseBillFactory.getRemoteInstance().getExpenseBillInfo(new ObjectUuidPK(id));
           if(info.getBillState().equals(billStateEnum.AUDITING)||info.getBillState().equals(billStateEnum.AUDIT)){
                   MsgBox.showWarning(this, "单据处于审批中/已审批状态,不能删除");        
                   SysUtil.abort();//结束进程      
            }     
             super.actionRemove_actionPerformed(e);    
             }



08


数据审核


    /**     * 审核按钮aciton     */    
    public void actionAudit_actionPerformed(ActionEvent e) throws Exception {
    //      super.actionAudit_actionPerformed(e);  
    // action为自己手动添加的action ,super 可以去掉      
    checkSelected(); //操作前检查是否选中行,父类方法 直接调用      
    String id = getSelectedKeyValue(); //获取选中行的ID,父类方法直接调用      
    ReWorkFlowUtil.isBillInWorkflow(id);//判断单据是否在流程中心,框架工具栏直接调用      
    IExpenseBill iBill = ExpenseBillFactory.getRemoteInstance();      
    ExpenseBillInfo info = iBill.getExpenseBillInfo(new ObjectUuidPK(id));//获取单据对象       
    if(!info.getBillState().equals(billStateEnum.SUBMIT)){        
        MsgBox.showWarning(this, "单据处于非已提交状态,不能直接审核");        
        SysUtil.abort();//结束进程      
     }else{        
         iBill.unpassAudit(new ObjectUuidPK(id), info);  //调用后台bean方法,更新单据状态及其他      
      }      
          refreshList();    
      
      }



 

09




数据反审核


       /**     * 反审核按钮aciton     */    
       public void actionUnAudit_actionPerformed(ActionEvent e) throws Exception {
       //      super.actionUnAudit_actionPerformed(e); 
       // action为自己手动添加的action ,super 可以去掉      
       checkSelected(); //操作前检查是否选中行,父类方法 直接调用      
       String id = getSelectedKeyValue(); //获取选中行的ID,父类方法直接调用      
       IExpenseBill iBill = ExpenseBillFactory.getRemoteInstance();      
       ExpenseBillInfo info = iBill.getExpenseBillInfo(new ObjectUuidPK(id));//获取单据对象       
       if(!info.getBillState().equals(billStateEnum.AUDIT)){        
           MsgBox.showWarning(this, "单据处于非已审批状态,不能直接反审核");        
           SysUtil.abort();//结束进程      
        }else{        
            iBill.passAudit(new ObjectUuidPK(id), info);  
            //调用后台bean方法,更新单据状态及其他      
         }      
             refreshList();    
          }


    


10




排序与过滤


    /**     * list添加排序与过滤     */    
    protected IQueryExecutor getQueryExecutor(IMetaDataPK arg0,        EntityViewInfo arg1) {
         EntityViewInfo view = (EntityViewInfo) arg1.clone(); //复制一个view      
         view.getSorter().add(new SorterItemInfo("number"));   //添加默认排序     
         //以下为添加默认过滤, 如自己新增的单子只有自己能看到(创建人必须等于当前人)    
         //也可以写一些动态的排序,如左树右表结构,需要动态传递选中树节点的值
         //    FilterInfo filter = view.getFilter()==null?new FilterInfo():view.getFilter();
         //    filter.getFilterItems().add(new FilterItemInfo("creater.id",value,CompareType.EQUALS));
         //    view.setFilter(filter);       
         return super.getQueryExecutor(arg0, view);    
     }


图片

11




table加载后修改值

       /**     * table加载完成后,修改相应的值     */    
       protected void afterTableFillData(KDTDataRequestEvent e) {
            super.afterTableFillData(e);      
            //循环行      for (int i = e.getFirstRow(); i <= e.getLastRow(); i++) {        
            //获取行对象      IRow row = this.tblMain.getRow(i);      
            //获取行ID      String id = (String) row.getCell("id").getValue();      
            //把创建人列,全部设置为张三      row.getCell("creator.name").setValue("张三");     
            //同理也可以单价*数量=金额来进行相应的计算
            //      BigDecimal price = (BigDecimal) row.getCell("price").getValue(); 
            //获取单价
            //      BigDecimal count = (BigDecimal) row.getCell("count").getValue(); 
            //获取数量
            //      row.getCell("amount").setValue(price.multiply(count) );  }    
           }



12




整体展示


image.png

image.png

image.png

image.png




注:

    为方便演示修改,删除,审核和反审核中存着大量重复代码,实际项目中可以进行封装


欢迎加入QQ群:557537072

图片


关注微信公众号获取更多资讯


本文转载自:微信公众号

作者:黑白

原文链接:https://mp.weixin.qq.com/s/lrbsxsux3Y98lbjmtd7Bqw

赞 8