NC6 关于打印
//打印模板信息//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;}@Overridepublic String[] getItemValuesByExpress(String paramString) {// TODO 自動生成的方法存根return null;}@Overridepublic boolean isNumber(String paramString) {// TODO 自動生成的方法存根return false;}@Overridepublic String[] getDependentItemExpressByExpress(String paramString) {// TODO 自動生成的方法存根return null;}@Overridepublic String[] getAllDataItemExpress() {// TODO 自動生成的方法存根return null;}@Overridepublic String[] getAllDataItemNames() {// TODO 自動生成的方法存根return null;}@Overridepublic String getModuleName() {// TODO 自動生成的方法存根return null;}@Overridepublic 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>();@Overridepublic void beforePrint() throws PrintException {}@Overridepublic 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());}}}@Overridepublic void beforePrintPage(int paramInt1, int paramInt2)throws PrintException {}@Overridepublic 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;}}總結
- 上一篇: 搜索引擎的故事
- 下一篇: 联想笔记本使用Driver Booste