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

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

公众号.jpg

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

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

本篇文档介绍业务单据Editt界面的一些常用样式开发


图片

01


新增单据设置默认值



    /**     * 新增单据     */   
  protected com.kingdee.bos.dao.IObjectValue createNewData()
   {
   
       com.kingdee.eas.custom.cost.ExpenseBillInfo objectValue = new com.kingdee.eas.custom.cost.ExpenseBillInfo();
       
       objectValue.setCreator((com.kingdee.eas.base.permission.UserInfo)(com.kingdee.eas.common.client.SysContext.getSysContext().getCurrentUser()));
       //设置空控件默认值   
       
       objectValue.setBizDate(new Date());//设置默认业务日期
       
       objectValue.setBillState(billStateEnum.SAVE);//设置单据状态
       
       UserInfo userInfo = (UserInfo) (SysContext.getSysContext().getCurrentUser());
       objectValue.setApplier(userInfo.getPerson());   //设置报销人        
       return objectValue;
   
  }

说明:

    标准自带的createNewData方法,对objectValue设置相应的属性值即可,该方法只会在单据新增时调用



02


新增分录设置默认值


    /**     * 新增分录行     */    
    protected IObjectValue createNewDetailData(KDTable table)    {
            ExpenseBillEntryInfo info = new ExpenseBillEntryInfo(); // 创建一个分录实体对象        
            info.setAmount(BigDecimal.ZERO);  // 金额默认为0        
            return info;    
    }


说明:

    标准自带的createNewDetailData方法,新增一个分录对象,对象设置属性值,返回对象就可以了,在分录每次新增行时会调用该方法


03


初始化单据按钮


    /**     * 初始化按钮     */    
    protected void initWorkButton() {
          super.initWorkButton();
          btnAudit.setEnabled(true);  //审核按钮可用      
          btnUnAudit.setEnabled(true); //反审核按钮可用      
          chkMenuItemSubmitAndAddNew.setSelected(false); //取消连续新增      
          menuSubmitOption.setVisible(false);//取消连续新增      
          btnCopy.setVisible(false); //隐藏赋值      
          actionCopy.setEnabled(false); //禁用赋值action      
          actionCopy.setVisible(false);     
     }


说明:

    重写标准自带的initWorkButton方法,需要先执行完毕父类的逻辑再执行自己开发的逻辑,所以需要在super加入自定义代码,在界面每次打开时会调用该方法

图片


04


样式设置

    /**     *页面打开     */    
    public void onShow() throws Exception {
            super.onShow();        
            initHeadStyle(); //新增表头样式方法        
            initTableStyle();//新增分录表头样式方法    
     }

说明:

    重写标准自带的onShow方法,需要先执行完毕父类的逻辑再执行自己开发的逻辑,所以需要在super加入自定义代码,在界面每次打开时会调用该方法



05


页面表头样式设置

    /**     * 设置表头样式     */    
    private void initHeadStyle() {      
            //txtnumber 字段可以不用设置,父类中已经对该控件进行了控制,例如启用编码规则后不可修改等      
            pkBizDate.setRequired(true);//设置必填      
            prmtapplier.setRequired(true);//设置必填      
            prmtcompany.setRequired(true);//设置必填      
            prmtdept.setRequired(true); //设置必填      
            txtamount.setRequired(true);//设置必填      
            billState.setEnabled(false); //设置不可修改       
            //设置默认过滤
            // EntityViewInfo view = new EntityViewInfo();  //创建view 用来过滤
            // FilterInfo expenseFilter = new FilterInfo();  //创建filter //用来过滤
            // expenseFilter.getFilterItems().add(new FilterItemInfo("isEnabled",true)); 
            //设置过滤条件 只在展示启用状态的数据
            //        view.setFilter(expenseFilter);// 将filter 放进view
            //        SorterItemCollection sic = new SorterItemCollection(); 
            //设置排序
            //        SorterItemInfo sicItme = new SorterItemInfo("number");
            //设置按照编码排序
            //        sicItme.setSortType(SortType.ASCEND); 
            //设置排序方式
            //    sic.add(sicItme);  
            //    view.setSorter(sic); 
            //排序赋值给 view
            //    prmtcompany.setEntityViewInfo(view);
            // 给公司字段设置过滤    
            }

说明:

    新增initHeadStyle方法,在onShow方法的super后调用,一般用来设置固定的有些属性,例如必填,是否显示,是否必填,以及一些F7的固定过滤

注:

    1、设置的必填只是把单元格的背景色设置为了黄色,单据在保存和提交时不会主动去验证,验证方法需要自己添加。

    2、一些动态的过滤,例如选择了公司之后,过滤部门F7只能选择该公司的下属部门,会在下篇文章中讲解。


06



页面分录样式设置


    
/**
    * 设置分录样式
    */
   
private void  initTableStyle() {
     kdtEntrys.checkParsed(); //解析分录      
     kdtEntrys.getColumn("amount").setRequired(true); //设置必填
     
     kdtEntrys.getColumn("taxRate").setRequired(true); //设置税率必填
     
     kdtEntrys.getColumn("expenseType").setRequired(true); //设置必填
     
     kdtEntrys.getColumn("tax").getStyleAttributes().setLocked(true);  //锁定列 不允许编辑
     
     kdtEntrys.getColumn("id").getStyleAttributes().setHided(true); //隐藏列
     
     String numberFormat = "%r-[=]{#,##0.00}n";
      
      kdtEntrys.getColumn("amount").getStyleAttributes().setNumberFormat(numberFormat);  //分录设置金额字段展示样式
     
     kdtEntrys.getColumn("taxRate").getStyleAttributes().setNumberFormat(numberFormat);//分录设置税率字段展示样式
     
     kdtEntrys.getColumn("tax").getStyleAttributes().setNumberFormat(numberFormat);//分录设置税额字段展示样式
     
     kdtEntrys.getColumn("purpose").getStyleAttributes().setWrapText(true);  //设置自动换行
     
     kdtEntrys.getColumn("purpose").setWidth(200); // 设置列宽
     
     kdtEntrys.getHeadRow(0).getCell("purpose").setValue("费用说明1"); //设置表头显示名字,因存在多表头getHeadRow 需要获取修改第几行表头
   
   
   //动态给分录F7 设置属性以及过滤
   
    kdtEntrys.addKDTEditListener(new KDTEditAdapter() {
     // 跟F7添加监听事件
           
           public void editStarted(KDTEditEvent e) {  
             
             int rowIndex=e.getRowIndex();
           
            int colIndex = e.getColIndex();
             
             String key=kdtEntrys.getColumnKey(colIndex);
             
             if(key.equals("expenseType")){   //判断 如果编辑的事件是费用类型
               
               kdtEntrys_expenseType();
             
             }
           
           }
         
         });
 
 }
   
   /**
    * 设置分录F7字段属性     */    
   
   private void kdtEntrys_expenseType() {

     //设置分录F7控件得相关属性
       
       final KDBizPromptBox expenseTypePrompt = new KDBizPromptBox();  //new 一个F7控件
       
       expenseTypePrompt.setQueryInfo("com.kingdee.eas.custom.cost.app.ExpenseTypeQuery"); //设置F7关联得query
       
       expenseTypePrompt.setVisible(true); //设置是否可见
     
       expenseTypePrompt.setEditable(true);  //设置是否可编辑
       
       expenseTypePrompt.setDisplayFormat("$name$"); //设置 展示样式
       
       expenseTypePrompt.setEditFormat("$number$"); // 设置编辑样式
       
       expenseTypePrompt.setCommitFormat("$number$"); //设置提交展示样式
       
       EntityViewInfo expenseView = new EntityViewInfo();  //创建view 用来过滤
       
       FilterInfo expenseFilter = new FilterInfo();  //创建filter //用来过滤
       
       expenseFilter.getFilterItems().add(new FilterItemInfo("isEnabled",true)); //设置过滤条件 只在展示启用状态的数据

//      expenseFilter.getFilterItems().add(new FilterItemInfo("creator.id",true)); // F7字段的过滤 可以使用 ".",最多支持3级        
       expenseView.setFilter(expenseFilter);// 将filter 放进view
     
      SorterItemCollection sic = new SorterItemCollection(); //设置排序
       
       SorterItemInfo sicItme = new SorterItemInfo("number");//设置按照编码排序
       
       sicItme.setSortType(SortType.ASCEND); //设置排序方式
       
       sic.add(sicItme);  
       
       expenseView.setSorter(sic); //排序赋值给 view
       
       expenseTypePrompt.setEntityViewInfo(expenseView); // 将view 给 pro
       
       KDTDefaultCellEditor kdtEntrys_expenseType_CellEditor = new KDTDefaultCellEditor(expenseTypePrompt); //创建一个编辑器
       
       this.kdtEntrys.getColumn("expenseType").setEditor(kdtEntrys_expenseType_CellEditor); // 将编辑器赋值给分录得 expenseType 控件
       
       ObjectValueRender kdtEntrys_expenseType_OVR = new ObjectValueRender();  //渲染
       
       kdtEntrys_expenseType_OVR.setFormat(new BizDataFormat("$name$")); //设置数据格式
       
       this.kdtEntrys.getColumn("expenseType").setRenderer(kdtEntrys_expenseType_OVR);  //设置渲染
       
       //添加选中监听, 因费用类型为树形基础资料,偷懒情况下, 可以设置F7 控件直接打开费用类型得Lsti界面

//       expenseTypePrompt.addSelectorListener(new SelectorListener() {

//      com.kingdee.eas.custom.cost.client.ExpenseTypeListUI expenseTypePrompt_F7ListUI = null;

//      public void willShow(SelectorEvent e) {

//        if (expenseTypePrompt_F7ListUI == null) {

//          try {

//            expenseTypePrompt_F7ListUI = new com.kingdee.eas.custom.cost.client.ExpenseTypeListUI();

//          } catch (Exception e1) {

//            e1.printStackTrace();

//          }

//          HashMap ctx = new HashMap();

//          ctx.put("bizUIOwner",javax.swing.SwingUtilities.getWindowAncestor(expenseTypePrompt_F7ListUI));

//          expenseTypePrompt_F7ListUI.setF7Use(true,ctx);

//          expenseTypePrompt.setSelector(expenseTypePrompt_F7ListUI);

//        }

//      }

//    });  
 }


说明:

    新增initTableStyle方法,在onShow方法的super后调用,一般用来设置固定的有些属性,例如必填,是否显示,是否必填,以及一些F7的固定过滤

注:

    1、设置的必填只是把单元格的背景色设置为了黄色,单据在保存和提交时不会主动去验证,验证方法需要自己添加。

    2、一些动态的过滤,例如选择了公司之后,过滤部门F7只能选择该公司的下属部门,可以给分录添加addKDTEditListener事件,在事件中,添加相应的if判单来设置影响的属性





因Edit界面相关逻辑代码较多分三篇进行讲解


欢迎加入QQ群:557537072

图片


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


本文转载自:微信公众号

作者:黑白

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

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