NC6 关于打印

5 篇文章 0 订阅
	//打印模板信息
	//Select * From Pub_Systemplate Where Tempstyle=3 
	String pkCorp=getModel().getContext().getPk_org();
	String funCode="20080EBM";
	String pkUser=getModel().getContext().getPk_loginUser();
	String nodeKey="cheque";
	
	//参数为父窗口
	PrintEntry print = new PrintEntry(chequeInfo);
	print.setAdjustable(true);//可以调整
	print.setMultiPrintCopies(false);//打印多份
	print.setAttachPrintable(false);//附件打印
	print.setTemplateID(pkCorp, funCode, pkUser, null, nodeKey);
	
	ChequeVO[] datas = chequeInfo.getDatas();
	//打印的数据,需要于模板里字段名一致
	for (int i = 0; i < datas.length; i++) {
		ChequeVO chequeVO = datas[i];
		//实现nc.ui.pub.print.IMetaDataDataSource接口
		//重写getMDObjects()方法,将通过构造方法传入的数据返回给打印画布
		print.setDataSource(new ChequeDataSource(new Object[]{chequeVO}));
	}
	//实现nc.ui.pub.print.IPrintListener接口,处理打印前后的逻辑
	ChequePrintListener printListener = new ChequePrintListener();
	printListener.setBills(datas);
	printListener.setModel(getModel());
	printListener.setDataManager(getDataManager());
	
	print.setPrintListener(printListener);
	print.preview();//预览

打印数据源

package nc.ui.arap.actions.cheque;

import nc.ui.pub.print.IMetaDataDataSource;

public class ChequeDataSource implements IMetaDataDataSource {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5757765450250679031L;
	private Object[] printData;
	
	public ChequeDataSource(Object[] printData) {
		super();
		this.printData = printData;
	}

	@Override
	public String[] getItemValuesByExpress(String paramString) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public boolean isNumber(String paramString) {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public String[] getDependentItemExpressByExpress(String paramString) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String[] getAllDataItemExpress() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String[] getAllDataItemNames() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String getModuleName() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public Object[] getMDObjects() {
		// TODO 自动生成的方法存根
		return printData;
	}

}

打印监听器

package nc.ui.arap.actions.cheque;

import java.util.ArrayList;
import java.util.List;

import nc.bs.framework.common.NCLocator;
import nc.itf.arap.cheque.IChequeNo;
import nc.ui.arap.bill.ArapBillUIUtil;
import nc.ui.pub.print.IPrintListener;
import nc.ui.pub.print.PrintException;
import nc.ui.pubapp.uif2app.model.BillManageModel;
import nc.ui.pubapp.uif2app.query2.model.IModelDataManager;
import nc.ui.uif2.UIState;
import nc.ui.uif2.model.AbstractUIAppModel;
import nc.vo.arap.basebill.BaseAggVO;
import nc.vo.arap.basebill.BaseBillVO;
import nc.vo.arap.cheque.ChequeVO;
import nc.vo.arap.pub.ArapBillTypeInfo;
import nc.vo.fipub.exception.ExceptionHandler;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;

/**
 * 支票打印监听
 * @author xiangfeifei
 *
 */
public class ChequePrintListener implements IPrintListener {
	private ChequeVO[] bills;
	private AbstractUIAppModel model;
	private IModelDataManager dataManager;
	private IChequeNo chequeService = NCLocator.getInstance().lookup(IChequeNo.class);
	private List<Integer> index = new ArrayList<Integer>(); 
	private List<ChequeVO> failed  = new ArrayList<ChequeVO>();
	private List<ChequeVO> sucess  = new ArrayList<ChequeVO>();
	@Override
	public void beforePrint() throws PrintException {
		
	}

	@Override
	public void afterPrint(int paramInt) throws PrintException {
		if(bills != null){
			try {
				splitCheque();
				update(sucess.toArray(new ChequeVO[0]));
				refresh();//代码复制列表刷新和卡片刷新
				delete(failed.toArray(new ChequeVO[0]));
			} catch (Exception e) {
				throw new PrintException(e.getMessage());
			}
		}
	}

	@Override
	public void beforePrintPage(int paramInt1, int paramInt2)
			throws PrintException {
		
	}

	@Override
	public void afterPrintPage(int paramInt1, int paramInt2)
			throws PrintException {
		index.add(paramInt1);
	}

	private void splitCheque() throws Exception {
		for (int i = 0; i < bills.length; i++) {
			ChequeVO vo = bills[i];
			if(index.contains(i)){
				sucess.add(vo);
			}else{
				failed.add(vo);
			}
		}
		
	}
	private void delete(ChequeVO[] vos) throws Exception {
		chequeService.deleteCheque(vos);
	}
	private void update(ChequeVO[] vos) throws Exception {
		chequeService.update(vos);
		
	}

	private void refresh() throws Exception {
		if (getModel().getUiState() == UIState.EDIT) {
			Object obj = model.getSelectedData();
			if ((obj != null) && ((obj instanceof AggregatedValueObject))) {
				BaseBillVO parentVO = (BaseBillVO) ((AggregatedValueObject) obj)
						.getParentVO();
				BaseAggVO newVO = getBillAggVO(parentVO.getPk_billtype(),
						parentVO.getPrimaryKey());

				if ((newVO == null)
						|| (Integer.valueOf(1).equals(newVO.getParentVO()
								.getAttributeValue("dr")))) {
					
					((BillManageModel) getModel()).directlyDelete(obj);
					
				} else {
					((BillManageModel) getModel()).directlyUpdate(newVO);
				}
			}
		} else {
			getDataManager().refresh();
		}
	}

	private BaseAggVO getBillAggVO(String pk_billtype, String pk) {
		BaseAggVO[] bill = null;
		try {
			bill = NCLocator.getInstance().lookup(
					ArapBillTypeInfo.getInstance(pk_billtype)
							.getBillQueryService())
					.findBillByPrimaryKey(new String[] { pk });
		} catch (BusinessException e) {
			ExceptionHandler.consume(e);
		}
		BaseAggVO baseAggVO = (null != bill) && (bill.length > 0) ? bill[0]
				: null;

		ArapBillUIUtil
				.refreshChildVO2HeadVO(new AggregatedValueObject[] { baseAggVO });
		return baseAggVO;
	}
	public ChequeVO[] getBills() {
		return bills;
	}

	public void setBills(ChequeVO[] bills) {
		this.bills = bills;
	}

	public AbstractUIAppModel getModel() {
		return model;
	}

	public void setModel(AbstractUIAppModel model) {
		this.model = model;
	}

	public IModelDataManager getDataManager() {
		return dataManager;
	}

	public void setDataManager(IModelDataManager dataManager) {
		this.dataManager = dataManager;
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值