EAS BOS 报表开发

EAS BOS 报表开发

只是做为新手BOS报表开发一个参考:

 

开发所需要新建的文件

  • ContractReportFilterUI:报表弹出的条件选择框,在新建时需要继承系统UI
    com.kingdee.eas.framework.report.client.CommRptBaseConditionUI 
  • ContractReportUI:用于报表展示,需要继承系统UI com.kingdee.eas.framework.report.client.CommRptBaseUI 
  • ContractReportFacade:用于调用系统查询的Facade,也需要继承系统类com.kingdee.eas.framework.report.app.CommRptBase 通用报表查询Facade,Facade可以没有添加方法。  
  • ContractReportBillViewUI 用于报表联查,新建时直接继承CoreUI即可。 

ContractReportFilterUI 方法说明及关键代码

新建UI发布之后,有3个方法是需要重写,getCustomCondition setCustomCondition onInit ,需要验证输入信息,再重写 verify方法即可

  • getCustomCondition:用于获取报表界面的界面参数,也可以理解成过滤信息
  • setCustomCondition: 用于将弹出UI的界面参数保存起来,和上面方法对应
  • onInit 系统初始化方法,你可以初始化控件,也可以初始化控件值

以下为完成代码:

/**

 * output package name

 */

package your package;



import java.util.Map;



import org.apache.log4j.Logger;



import com.kingdee.bos.ui.face.CoreUIObject;

import com.kingdee.eas.framework.report.util.RptConditionManager;

import com.kingdee.eas.framework.report.util.RptParams;

import com.kingdee.eas.util.SysUtil;

import com.kingdee.eas.util.client.MsgBox;

import com.kingdee.util.StringUtils;



public class ContractReportFilterUI extends AbstractContractReportFilterUI {

        private static final Logger logger = CoreUIObject

                         .getLogger(ContractReportFilterUI.class);



        public ContractReportFilterUI() throws Exception {

                 super();

                 initControl();

        }



        public void initControl() {

                 ApF7InitUtils.initAdminF7(prmtAdmin, this, null, null);

                 ApF7InitUtils.initCompanyF7(prmtFiCompany, this, null, null, false);

                 txtStartDate.setValue(ApRptConstant.getFirstDay());

                 txtEndDate.setValue(ApRptConstant.getLastDay());

                 txtStatus.setSelectedItem(null);

                 txtContractWay.setSelectedItem(null);

        }



        public RptParams getCustomCondition() {

                 RptParams param = new RptParams();

                 // 放置本界面的参数

                 RptConditionManager rcm = new RptConditionManager();

                 if (null != prmtFiCompany.getValue()) {

                         rcm.setProperty("fiCompany", prmtFiCompany.getValue());

                 } else {

                         rcm.setProperty("fiCompany", null);

                 }

                 if (null != prmtAdmin.getValue()) {

                         rcm.setProperty("admin", prmtAdmin.getValue());

                 } else {

                         rcm.setProperty("admin", null);

                 }

                 if (null != prmtType.getValue()) {

                         rcm.setProperty("type", prmtType.getValue());

                 } else {

                         rcm.setProperty("type", null);

                 }

                 if (!StringUtils.isEmpty(txtNumber.getText())) {

                         rcm.setProperty("number", txtNumber.getText());

                 } else {

                         rcm.setProperty("number", null);

                 }

                 if (!StringUtils.isEmpty(txtName.getText())) {

                         rcm.setProperty("name", txtName.getText());

                 } else {

                         rcm.setProperty("name", null);

                 }



                 if (null != txtStartDate.getValue()) {

                         rcm.setProperty("startDate", txtStartDate.getValue());

                 } else {

                         rcm.setProperty("startDate", null);

                 }



                 if (null != txtEndDate.getValue()) {

                         rcm.setProperty("endDate", txtEndDate.getValue());

                 } else {

                         rcm.setProperty("endDate", null);

                 }

                 if (null != txtContractWay.getSelectedItem()) {

                         rcm.setProperty("contractWay", txtContractWay.getSelectedItem());

                 } else {

                         rcm.setProperty("contractWay", null);

                 }

                 if (null != txtStatus.getSelectedItem()) {

                         rcm.setProperty("status", txtStatus.getSelectedItem());

                 } else {

                         rcm.setProperty("status", null);

                 }



                 Map map = rcm.toMap();

                 param.putAll(map);

                 return param;

        }



       

        public void onInit(RptParams initParams) throws Exception {

                 initControl();

        }



        public void setCustomCondition(RptParams params) {

                 if (null != params.getObject("fiCompany")) {

                         prmtFiCompany.setValue(params.getObject("fiCompany"));

                 } else {

                         prmtFiCompany.setValue(null);

                 }

                 if (null != params.getObject("admin")) {

                         prmtAdmin.setValue(params.getObject("prmtAdmin"));

                 } else {

                         prmtAdmin.setValue(null);

                 }

                 if (null != params.getObject("type")) {

                         prmtType.setValue(params.getObject("type"));

                 } else {

                         prmtType.setValue(null);

                 }

                 if (null != params.getObject("number")) {

                         txtNumber.setText(params.getObject("number") + "");

                 } else {

                         txtNumber.setText(null);

                 }

                 if (null != params.getObject("name")) {

                         txtName.setText(params.getObject("name") + "");

                 } else {

                         txtName.setText(null);

                 }



                 if (null != params.getObject("startDate")) {

                         txtStartDate.setValue(params.getObject("startDate"));

                 } else {

                         txtStartDate.setValue(null);

                 }



                 if (null != params.getObject("endDate")) {

                         txtEndDate.setValue(params.getObject("endDate"));

                 } else {

                         txtEndDate.setValue(null);

                 }



                 if (null != params.getObject("contractWay")) {

                         txtContractWay.setSelectedItem(params.getObject("contractWay"));

                 } else {

                         txtContractWay.setSelectedItem(null);

                 }

                 if (null != params.getObject("status")) {

                         txtStatus.setSelectedItem(params.getObject("status"));

                 } else {

                         txtStatus.setSelectedItem(null);

                 }

        }



        public boolean verify() {

                 if (null == prmtFiCompany.getValue()) {

                         MsgBox.showError("请选择组织.");

                         SysUtil.abort();

                 }

                 return super.verify();

        }

}

 

ContractReportUI 方法说明及关键代码

新建完UI发布之后,同样的也是需要重写父类方法,其中包括:getParamsForInit,getQueryDialogUserPanel,getRemoteInstance,getTableForPrintSetting,query,下面分别简单说明下各方法的用途

  • getParamsForInit:从弹出UI获取界面参数
  • getQueryDialogUserPanel:指定弹出UI
  • getRemoteInstance:远程调用查询的接口
  • getTableForPrintSetting:获取表格打印设置
  • query:查询对话框点击确定后执行

另外我自己还添加一个功能,报表联查,方法名为:actionBillView_actionPerformed,完整示例请参考代码:

public class ContractReportUI extends AbstractContractReportUI
{
    private static final Logger logger = CoreUIObject.getLogger(ContractReportUI.class);
    

    public ContractReportUI() throws Exception
    {
        super();
        this.setUITitle("合同一览表");
        btnBillView.setEnabled(true);
    }


	protected void tblMain_tableClicked(com.kingdee.bos.ctrl.kdf.table.event.KDTMouseEvent e) throws Exception
    {
        if (e.getClickCount()==2) {
        	actionBillView_actionPerformed(null);
		}
    }

    public void actionBillView_actionPerformed(ActionEvent e) throws Exception
    {
    	int row = KDTableUtil.getSelectedRow(tblMain);
    	if (row==-1) {
			MsgBox.showInfo("请选择行..");
			SysUtil.abort();
		}
    	String orgId=null;
    	if (null!=params.getObject("fiCompany")) {
			CompanyOrgUnitInfo object = (CompanyOrgUnitInfo)params.getObject("fiCompany");
			orgId=object.getId().toString();
    	}
    	String id = APRuleUtil.getString(tblMain.getCell(row, "ID").getValue());
    	UIContext uiContext = new UIContext(this);
		uiContext.put("ID", id);
		uiContext.put("orgId", orgId);
		IUIWindow uiWindow = UIFactory.createUIFactory(UIFactoryName.EDITWIN).create(ContractReportBillViewUI.class.getName(), uiContext, null, OprtState.VIEW);
		uiWindow.show();
    }


	protected RptParams getParamsForInit() {
		return params;
	}


	protected CommRptBaseConditionUI getQueryDialogUserPanel() throws Exception {
		return new ContractReportFilterUI();
	}


	protected ICommRptBase getRemoteInstance() throws BOSException {
		return ContractReportFacadeFactory.getRemoteInstance();
	}


	protected KDTable getTableForPrintSetting() {
		return this.tblMain;
	}

	/**
     * 查询对话框点击确定后执行
     * @param params 查询条件
     */
	protected void query() {
		//查询条件设置到界面
		initParamToUI(params);
		tblMain.checkParsed();
		tblMain.setEditable(false);
		try {
			//设置光标处于等待状态
			setCursorOfWair();
			
			 //查询数据,在Facade查询方法里返回值是RptParams,需要把查询集保存到RptParams里,再通过界面取出即可
			 RptParams rps = ((ICommRptBase)getRemoteInstance()).query(params);
			 if(rps!=null){
				 IRowSet conReport =  ((IRowSet)rps.getObject(ApRptConstant.RPT_PARAMETERS)) ;
				 if(conReport!=null){
					fillTable(conReport);
					tblMain.getSelectManager().setSelectMode(KDTSelectManager.ROW_SELECT);
				 }
			 }

		} catch (Exception e) {
            e.printStackTrace();
            this.handUIException(e);
        } finally {
            this.setCursorOfDefault();
        }
	}




	private int fillTable(IRowSet rs) throws SQLException {
		tblMain.removeRows();
		while (rs.next()) {
			IRow row = tblMain.addRow();
			row.getCell("number").setValue(rs.getString("FNUMBER"));
			row.getCell("name").setValue(rs.getString("CFNAME"));
			row.getCell("ContractType").setValue(rs.getString("CONTRACTTYPE"));
			row.getCell("status").setValue(StatusEnum.getEnum(rs.getString("CFSTATUS")).getAlias());
			row.getCell("inOutType").setValue(rs.getString("INOUTTYPE"));
			row.getCell("contractWay").setValue(ContractTypeEnum.getEnum(rs.getString("CFCONTRACTWAY")).getAlias());
			row.getCell("customer").setValue(rs.getString("CUSTOMER"));
			row.getCell("supplier").setValue(rs.getString("SUPPLIER"));
			row.getCell("bizDate").setValue(rs.getString("FBIZDATE"));
			row.getCell("startDate").setValue(rs.getString("CFSTARTDATE"));
			row.getCell("endDate").setValue(rs.getString("CFENDDATE"));
			row.getCell("days").setValue(rs.getString("CFDAYS"));
			row.getCell("amount").setValue(rs.getBigDecimal("CFAMOUNT"));
			row.getCell("totalAmount").setValue(rs.getBigDecimal("CFTOTALAMOUNT"));
			row.getCell("unAmount").setValue(rs.getBigDecimal("CFUNAMOUNT"));
			row.getCell("person").setValue(rs.getString("CFPERSON"));
			row.getCell("department").setValue(rs.getString("DEPARTMENT"));
			row.getCell("createDate").setValue(rs.getString("FCREATETIME"));
			row.getCell("ID").setValue(rs.getString("ID"));
		}
		String [] cols=new String[]{"amount","totalAmount","unAmount"};
		ApRptConstant.formatTableNumber(tblMain, cols);
		ApRptConstant.appendFootRow(tblMain, cols);
		cols=new String[]{"bizDate","startDate","endDate","createDate"};
		ApRptConstant.formatTableDate(tblMain, cols);
		return tblMain.getRowCount();
	}




	public void initParamToUI(RptParams params) {
		if (null!=params.getObject("fiCompany")) {
			CompanyOrgUnitInfo object = (CompanyOrgUnitInfo)params.getObject("fiCompany");
			txtFiCompany.setText(object.getNumber()+"-"+object.getName());
		}else {
			txtFiCompany.setText("");
		}
	}

 

Facade关键代码

因为Facade已经继承了父类,所以这里不需要再新建方法,重写父类方法即可,整个Facade只需要写一个方法就好了。protected RptParams _query(Context ctx, RptParams params) 在方法中,需要先获取界面参数再拼SQL即可,参考代码如下:

@Override

    protected RptParams _query(Context ctx, RptParams params)

                 throws BOSException, EASBizException {

         if (null == params) {

                 throw new EASBizException(new NumericExceptionSubItem("0003","请先设置过滤条件.."));

                 }

         String fiCompanyId=null;

         if (null!=params.getObject("fiCompany")) {

                 CompanyOrgUnitInfo object = (CompanyOrgUnitInfo)params.getObject("fiCompany");

                 fiCompanyId=object.getId().toString();

                 }

         String departmentId=null;

                 if (null!=params.getObject("admin")) {

                         AdminOrgUnitInfo object = (AdminOrgUnitInfo)params.getObject("prmtAdmin");

                         departmentId=object.getId().toString();

                 }

                 String contractTypeId=null;

                 if (null!=params.getObject("type")) {

                         ContractTypeInfo object = (ContractTypeInfo)params.getObject("type");

                         contractTypeId=object.getId().toString();

                 }

                 String number=null;

                 if (null!=params.getObject("number")) {

                         number=APRuleUtil.getString(params.getObject("number"));

                 }

                 String name=null;

                 if (null!=params.getObject("name")) {

                         name=APRuleUtil.getString(params.getObject("name"));

                 }

                 Date startDate=null;

                 if (null!=params.getObject("startDate")) {

                         startDate = APRuleUtil.getDateValue(params.getObject("startDate"));

                 }

                 Date endDate=null;

                 if (null!=params.getObject("endDate")) {

                         endDate = APRuleUtil.getDateValue(params.getObject("endDate"));

                 }

                

                 String contractWayId=null;

                 if (null!=params.getObject("contractWay")) {

                         ContractTypeEnum object = (ContractTypeEnum)params.getObject("contractWay");

                         contractWayId = object.getValue();

                 }

                 String status=null;

                 if (null!=params.getObject("status")) {

                         StatusEnum object = (StatusEnum)params.getObject("status");

                         status=object.getValue();

                 }

                

                 StringBuffer sql = new StringBuffer();

                 SqlParams sp = new SqlParams();

                 sql.append("SELECT A.FNUMBER,A.CFNAME,B.FNAME_L2 CONTRACTTYPE,A.CFSTATUS,C.FNAME_L2 INOUTTYPE,A.CFCONTRACTWAY ,D.FNAME_L2 CUSTOMER,E.FNAME_L2 SUPPLIER,A.FBIZDATE,\r\n");

        sql.append("A.CFSTARTDATE,A.CFENDDATE,A.CFDAYS,A.CFAMOUNT,A.CFTOTALAMOUNT,A.CFUNAMOUNT,A.CFPERSON,F.FNAME_L2 DEPARTMENT,A.FCREATETIME,A.FID ID FROM CT_AP_APPRAISE A \r\n");

                 sql.append("LEFT JOIN CT_BD_ContractType b on a.CFContractTypeID=b.FID \r\n");

                 sql.append("LEFT JOIN CT_BD_InOutType C ON C.FID=A.CFInOutTypeID \r\n");

                 sql.append("LEFT JOIN T_BD_Customer D ON D.FID=A.CFCustomerID \r\n");

                 sql.append("LEFT JOIN T_BD_Supplier E ON E.FID=A.CFSupplierID \r\n");

                 sql.append("LEFT JOIN T_ORG_Admin F ON F.FID=A.CFDepartmentID \r\n");

                 sql.append("WHERE 1=1 \r\n");

                 if (null!=fiCompanyId) {

                         sql.append("and a.CFFICompanyID=? \r\n");

                         sp.addString(fiCompanyId);

                 }

                 if(null!=departmentId)

                 {

                         sql.append("and a.CFDepartmentID=? \r\n");

                         sp.addString(departmentId);

                 }

                 if(null!=contractTypeId)

                 {

                         sql.append("and a.CFContractTypeID=? \r\n");

                         sp.addString(contractTypeId);

                 }

                 if(null!=number)

                 {

                         sql.append("and a.FNumber like '%"+number+"%' \r\n");

                         //sp.addString(number);

                 }

                 if(null!=name)

                 {

                         sql.append("and a.CFName like '%"+name+"%' \r\n");

                         //sp.addString(name);

                 }

                 if(null!=startDate)

                 {

                         sql.append("and a.FBizDate>=? \r\n");

                         java.sql.Date date=new java.sql.Date(startDate.getTime());

                         sp.addDate(date);

                 }

                

                 if(null!=endDate)

                 {

                         sql.append("and a.FBizDate<=? \r\n");

                         java.sql.Date date=new java.sql.Date(endDate.getTime());

                         sp.addDate(date);

                 }

                 if(null!=contractWayId)

                 {

                         sql.append("and a.CFContractWay=? \r\n");

                         sp.addString(contractWayId);

                 }

                 if(null!=status)

                 {

                         sql.append("and a.CFStatus=? \r\n");

                         sp.addString(status);

                 }

                 sql.append("ORDER BY a.FNumber");

                

                 IRowSet set = DbUtil.executeQuery(ctx, sql.toString(), sp.getParams());

                //这里返回值是RptParams,需要把查询集保存到RptParams里,再通过界面取出即可

                 params.setObject(ApRptConstant.RPT_PARAMETERS, set);

         return params;

    }

另外在联查中,是通过调用之前已经新建好的单据的EditUI直接显示即可,也可以参考完整显示代码,

public class ContractReportBillViewUI extends AbstractContractReportBillViewUI

{

    private static final Logger logger = CoreUIObject.getLogger(ContractReportBillViewUI.class);

    private AppraiseEditUI currentBaseUI=null;//基础资料

    private DepositRegisterListUI currentDepositUI=null;//保证金

    private ContractChangeListUI currentContractChangeUI=null;//合同变更

    private ReceiveBillListUI currentReceiveBillUI=null;//合同收款单

    private PaymentBillListUI currentPaymentBillUI=null;//合同付款单

   

    public ContractReportBillViewUI() throws Exception

    {

        super();

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

        setPreferredSize(screenSize);

    }



    public void onLoad() throws Exception {

         super.onLoad();

         kDTabbedPane1.remove(changeUI);//补充协议

         String ID = APRuleUtil.getString(getUIContext().get("ID"));

         String orgId = APRuleUtil.getString(getUIContext().get("orgId"));

         if (this.baseUI.getComponentCount() == 0) {

                         currentBaseUI = ((AppraiseEditUI) UIFactoryHelper

                                          .initUIObject(AppraiseEditUI.class.getName(),

                                                           getUIContext(), null, getOprtState()));

                         currentBaseUI.repaint();

                         baseUI.add(currentBaseUI);

                 }

         if (DepositUI.getComponentCount()==0) {

                 Map context = getUIContext();

                 context.clear();

                 context.put("appraise.id", ID);//

                 context.put("orgId", orgId);//

                 currentDepositUI = ((DepositRegisterListUI) UIFactoryHelper

                                          .initUIObject(DepositRegisterListUI.class.getName(),

                                                           context, null, getOprtState()));

                 currentDepositUI.repaint();

                 DepositUI.add(currentDepositUI);

                 }

         if (ContractChangeUI.getComponentCount()==0) {

                 Map context = getUIContext();

                 context.clear();

                 context.put("appraise.id", ID);

                 context.put("orgId", orgId);

                 currentContractChangeUI = ((ContractChangeListUI) UIFactoryHelper

                                          .initUIObject(ContractChangeListUI.class.getName(),

                                                           context, null, getOprtState()));

                 currentContractChangeUI.repaint();

                 ContractChangeUI.add(currentContractChangeUI);

                 }

        

         if (ReceiveBillUI.getComponentCount()==0) {

                 Map context = getUIContext();

                 context.clear();

                 context.put("appraise.id", ID);

                 context.put("orgId", orgId);

                 currentReceiveBillUI = ((ReceiveBillListUI) UIFactoryHelper

                                          .initUIObject(ReceiveBillListUI.class.getName(),

                                                           context, null, getOprtState()));

                 currentReceiveBillUI.repaint();

                 ReceiveBillUI.add(currentReceiveBillUI);

                 }

         if (PaymentBillUI.getComponentCount()==0) {

                 Map context = getUIContext();

                 context.clear();

                 context.put("appraise.id", ID);

                 context.put("orgId", orgId);

                 currentPaymentBillUI = ((PaymentBillListUI) UIFactoryHelper

                                          .initUIObject(PaymentBillListUI.class.getName(),

                                                           context, null, getOprtState()));

                 currentPaymentBillUI.repaint();

                 PaymentBillUI.add(currentPaymentBillUI);

                 }

        

    }



   



}

 

 

 

                                                                                         THE    END

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: EAS(企业应用软件)和BOS(业务操作平台)是一种企业级应用软件,用于管理企业内部的各种业务流程和数据。单据开发是指在EASBOS系统中,根据企业的具体业务需求,开发和定制各种业务单据模板和流程。 在EASBOS系统中,单据是一种重要的业务文档,用于记录和处理企业的业务活动。例如,销售订单、采购申请、合同、报销单等都属于常见的业务单据。通过定制化开发,可以根据企业的实际需求,创建适合企业业务特点的单据模板,并设计相应的工作流程用于处理和审批这些单据。 单据开发一般包含以下几个步骤: 1. 需求分析:与企业相关部门沟通,了解业务需求,明确单据开发的目标和范围。 2. 设计单据模板:根据需求分析的结果,设计单据模板,包括单据的样式、字段和布局等,确保单据能够满足业务需求。 3. 编码开发:根据设计的单据模板,进行编码开发工作,实现单据在EASBOS系统中的呈现和功能。 4. 测试和调试:进行单据开发的测试和调试工作,确保单据的正常运行,并满足企业的需求。 5. 部署和上线:将开发好的单据模板和应用程序部署到EASBOS系统中,并让相关人员开始使用。 6. 维护和优化:持续跟踪和维护开发的单据,在实际使用中及时进行修复和优化,以保证系统的稳定性和性能。 通过EASBOS系统的单据开发,企业可以更加高效地管理和处理各种业务单据,提高工作效率和准确性。同时,定制化的单据开发也使企业能够适应特定行业或业务的需求,提供更加个性化和专业化的管理解决方案。 ### 回答2: EAS (企业应用系统) 和 BOS (业务操作系统) 是一种常用于企业管理的软件平台。它们可以帮助企业管理各种业务流程和数据,提高工作效率和准确性。 EAS 是一个综合性的企业管理软件平台,它集成了各种功能模块,涵盖了企业的各个领域,包括财务、人力资源、采购、销售、供应链等。通过EAS,企业可以实现业务流程的标准化和自动化,提高工作效率,减少人工错误。EAS可以提供全面的数据分析和报表功能,供企业管理者进行决策分析。 BOS 是建立在EAS平台上的具体业务应用系统。通过BOS,企业可以实现各种业务单据的开发和管理。比如,采购订单、销售订单、合同、报价单等。BOS可以根据企业的实际需求,定制各种业务单据,并与其他系统进行数据交互。BOS可以实现单据的自动流转和审批,减少了人工处理的时间和成本。 在进行EASBOS单据开发时,需要考虑企业的实际需求和业务流程。首先,需要对业务流程进行分析,确定需要开发的单据类型和数据字段。然后,可以使用EAS平台自带的开发工具,或者使用其他开发工具进行单据开发开发过程中,需要进行系统测试和调试,确保单据的准确性和稳定性。 总之,EASBOS单据开发是企业管理的重要组成部分。通过合理的单据开发和管理,可以提高企业的工作效率和管理水平,实现企业的可持续发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值